编写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
如何在Fedora 29工作站上安装Ansible?
如何使用Fedora Linux上创建并测试Ansible playbook?
Ansible是一个免费的开源配置管理工具。
它类似于Chef或Puppet。
它可以在基于SSH的会话上运行,并且不需要远程服务器上的任何软件或客户端/代理。
可以使用Ansible管理Linux,Unix,macOS和BSD系列操作系统。
在Fedora 29上安装Ansible的过程
- 运行:
sudo dnf update
,更新Fedora 29系统 - 运行:
sudo dnf install ansible
,在Fedora 29上安装Ansible - 运行:
sudo dnf upgrade ansible
,在Fedora 29中升级Ansible - 设置基于ssh密钥用于身份验证
- 测试Ansible
在Fedora Linux安装Ansible
执行以下dnf命令来更新Fedora:
$ sudo dnf update $ dnf search ansible
查看有关Ansible软件包的信息:
$ dnf info ansible
在Fedora Linux上安装Ansbile
执行以下dnf命令:
$ sudo dnf install ansible
查看Ansible版本
查看我们刚安装的Ansible版本:
$ ansible --version
在Linux或Unix上设置ssh密钥
在Fedora Linux上使用ssh-keygen命令创建密钥对:
$ ssh-keygen -t ed25519 -C "ssh key"
使用ssh-copy-id命令将公钥复制并安装在远程Linux/Unix/BSD服务器中:
$ ssh-copy-id -i $HOME/.ssh/id_ed25519.pub user@ubuntu-server $ ssh-copy-id -i $HOME/.ssh/id_ed25519.pub jack@freebsd-server $ ssh-copy-id -i $HOME/.ssh/id_ed25519.pub jack@centos-server
使用ssh命令检查是否可无密码登录:
$ ssh jack@centos-server $ ssh jack@freebsd-server
测试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