编写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 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
日期:2020-03-23 08:04:00 来源:oir作者:oir