编写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
如何在Ubuntu 18.04上安装Ansible

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