编写Ansible playbook来管理Linux/Unix服务器
修改清单文件inventory,添加在远程服务器上成为sudo的用户名和方法。
vi inventory
修改如下:
[all:vars] ansible_user='jack' # ssh连接远程服务器使用的用户名 ansible_become='yes' # 是否以root身份运行命令 ansible_become_pass='PasswordForjackUser' # sudo用户的密码 ansible_become_method='sudo' # 如何变成root用户 [devserver] 192.168.1.101 ansible_python_interpreter='/usr/bin/python2' 192.168.1.102 ansible_python_interpreter='/usr/bin/python3' ### 指定在远程服务器上使用的python版本 [webserver] nginx.onitroad.test apache.onitroad.test
playbook是指定在远程服务器上要执行的脚本/命令。
创建一个新的playboo test.yml:
vim test.yml
内容如下:
--- - hosts: devserver tasks: - name: Get hostname for testing purpose command: /bin/hostname changed_when: False register: hostname - debug: var={{ item }} with_items: - hostname.stdout
如何运行Ansible playbook。
在Fedora Linux上使用下面命令:
$ ansible-playbook -i inventory test.yml
关于sudo密码问题
在清单文件中,密码以明文形式存储:
ansible_become_pass='PasswordForjackUser'
我们可以改成加密的密码:
$ vim inventory
将
ansible_become_pass='PasswordForjackUser'
改成
ansible_become_pass='{{ my_user_password }}'
然后创建一个新加密数据文件passwords.yml:
$ ansible-vault create passwords.yml
设置vault的密码。
然后该工具将启动$EDITOR定义的编辑器。
添加下面内容:
my_user_password: your_password_for_ansible_user
之后按如下方式运行:
$ ansible-playbook -i inventory --ask-vault-pass --extra-vars '@passwords.yml' test.yml
使用Ansible playbook 为远程服务器添加用户
假设我们要为webserver组中的所有主机添加一个新用户wwwuser。
创建一个新playbook add-user.yml:
--- - hosts: webserver tasks: - name: Add a new user to server user: name: wwwuser comment: "Account to run jobs for our web server" shell: /bin/bash groups: sudo append: yes password: * - name: Upload ssh key for user wwwuser for log in purpose authorized_key: user: jack state: present manage_dir: yes key: "{{ lookup('file', '/home/jack/.ssh/id_ed25519.pub') }}"
运行:
$ ansible-playbook -i inventory --ask-vault-pass --extra-vars '@passwords.yml' add-user.yml
如何使用Ansible playbook 为远程服务器添加和删除软件包
这里,我们将使用apt命令为devserver组中的所有主机添加和删除软件包。
创建一个名为ubuntu-software.yml的文件:
--- - hosts: devserver tasks: - name: Install packages on server apt: name: "{{ packages }}" state: present vars: packages: - unzip - htop - atop - nmon - sysstat - iotop - nicstat - vnstat - name: Delete packages from server apt: name: "{{ packages }}" state: absent vars: packages: - nano
按照如下方式运行:
$ ansible-playbook -i inventory --ask-vault-pass --extra-vars '@passwords.yml' ubuntu-software.yml
在Linux或Unix上设置ssh密钥
首先,在Ubuntu Linux上使用ssh-keygen命令创建密钥对:
{jack@ubuntu:~}$ ssh-keygen -t ed25519 -C "Desktop ssh key"
然后使用ssh-copy-id命令将公钥复制并安装在远程Linux/Unix/BSD服务器中:
{jack@ubuntu:~}$ ssh-copy-id -i $HOME/.ssh/id_ed25519.pub user@ubuntu-server {jack@ubuntu:~}$ ssh-copy-id -i $HOME/.ssh/id_ed25519.pub ansible@freebsd-server {jack@ubuntu:~}$ ssh-copy-id -i $HOME/.ssh/id_ed25519.pub ansible@centos-server
使用ssh命令检查是否可无密码登录远程服务器:
{jack@ubuntu:~}$ ssh ansible@centos-server-linode {jack@ubuntu:~}$ ssh ansible@freebsd-server-lightsail
Ansible是一个开源和免费的配置管理IT工具。它类似于Chef或Puppet。它可以在基于SSH的会话上运行,并且在远程Unix服务器上不需要任何软件或客户端代理。可以使用Ansible管理Linux,Unix,macOS和 BSD系列操作系统。
如何在Ubuntu 18.04工作站上安装Ansible?
如何使用Ubuntu Linux桌面创建并测试Ansible剧本?
在Ubuntu 18.04上安装Ansible的过程
- 更新Ubuntu 18.04 LTS系统,运行:
sudo apt update && sudo apt upgrade
- 在Ubuntu 18.04上安装Ansible,运行:
sudo apt install ansible
- 在Ubuntu 18.04上升级Ansible,运行:
sudo apt upgrade ansible
- 设置基于ssh密钥的身份验证
- 测试Ansible并编写playbook以实现自动化
在Ubuntu Linux中安装Ansible
执行以下apt命令以更新Ubuntu:
{jack@ubuntu:~}$ sudo apt update
搜索Ansbile软件包:
{jack@ubuntu:~}$ apt search ansible
或者
{jack@ubuntu:~}$ apt-cache search ansible
查找有关Ansible软件包的信息:
{jack@ubuntu:~}$ apt show ansible
在Ubuntu Linux上安装Ansbile
最后,执行以下apt命令来安装ansible:
{jack@ubuntu:~}$ sudo apt install ansible
查看Ansible版本
我们可以通过运行以下命令来验证Ansible版本:
{jack@ubuntu:~}$ ansible --version ## ubuntu install ansible and verify it ##
测试Ansible
首先在Fedora上创建清单文件,如下所示:
$ vi inventory
添加所有远程Linux服务器的主机名/IP地址:
[devserver] 192.168.1.101 192.168.1.102 [webserver] nginx.onitroad.test apache.onitroad.test
在devserver组中的2台服务器上以用户jack的身份运行uptime命令和lsb_release命令:
$ ansible -u jack -i inventory -m raw -a 'uptime' devserver $ ansible -u jack -i inventory -m raw -a 'lsb_release -a' devserver