如何在Fedora 29上安装Ansible以实现IT和服务器自动化

时间:2020-01-09 10:39:18  来源:igfitidea点击:

如何在Fedora 29工作站上安装Ansible?
如何使用Fedora Linux桌面设置和测试Ansible剧本?

说明:Ansible是一个免费的开源配置管理工具。
它类似于Chef或Puppet。
它可以在基于SSH的会话上运行,并且不需要远程服务器上的任何软件或客户端/代理。
可以使用Ansible管理Linux,Unix,macOS和* BSD系列操作系统。
该页面显示了如何在Fedora Linux 29上安装ansible并设置您的第一个Ansible剧本。

在Fedora 29上安装Ansible的过程

  • 更新您的Fedora 29系统,运行:sudo dnf update
  • 在Fedora 29上安装Ansible,运行:sudo dnf install ansible
  • 在Fedora 29中升级Ansible,运行:sudo dnf upgrade ansible
  • 设置基于ssh密钥的身份验证
  • 测试Ansible

步骤1. 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

输出示例:

ansible 2.7.5
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/home/Hyman/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.7/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 3.7.2 (default, Jan  3 2019, 09:14:01) [GCC 8.2.1 20161215 (Red Hat 8.2.1-6)]

步骤2.在Linux或Unix上设置ssh密钥

首先,在Fedora Linux桌面/工作站上使用ssh-keygen命令创建密钥对:

$ ssh-keygen -t ed25519 -C "Desktop ssh key"

接下来,使用ssh-copy-id命令将公钥复制并安装在远程Linux/Unix/BSD服务器中:

$ ssh-copy-id -i $HOME/.ssh/id_ed25519.pub user@ubuntu-server-ec2
$ ssh-copy-id -i $HOME/.ssh/id_ed25519.pub ec2-user@freebsd-server-lightsail
$ ssh-copy-id -i $HOME/.ssh/id_ed25519.pub Hyman@centos-server-linode

使用ssh命令测试较少的密码登录:

$ ssh Hyman@centos-server-linode
$ ssh ec2-user@freebsd-server-lightsail

步骤3.测试Ansible

我们的示例Ansible设置

首先在控制计算机上创建列表文件,如下所示:

$ vi inventory

添加所有远程Linux/* BSD服务器的主机名/IP地址:

## my vms/server hosted locally ##
[lanhosts]
192.168.1.203
192.168.1.207

## my vms/servers hosted by AWS (EC2/Lightsail) ##
[awshosts]
vm1.theitroad.local

## my Linode VMs ##
[linodehosts]
vm2.theitroad.local

接下来在我局域网中的两台主机(即lanhosts组)上以用户Hyman的身份运行uptime命令和lsb_release命令:

$ ansible -u Hyman -i inventory -m raw -a 'uptime' lanhosts
$ ansible -u Hyman -i inventory -m raw -a 'lsb_release -a' lanhosts

步骤4.编写您的第一本Ansible剧本来管理Linux/Unix服务器

首先,更新列表文件以指示在远程服务器上成为sudo的用户名和方法。
这是用cat命令显示的更新后的主机文件:

cat inventory

示例配置文件:

[all:vars]
ansible_user='Hyman'           # Username for ssh connection
ansible_become='yes'             # Run commands as root user?
ansible_become_pass='PasswordForHymanUser' # Password for sudo user i.e. ansible_user password
ansible_become_method='sudo'     # How do I become root user? Use sudo.
 
## my vms/server hosted locally ##
[lanhosts]
192.168.1.203 ansible_python_interpreter='/usr/bin/python2'
192.168.1.207 ansible_python_interpreter='/usr/bin/python3'
 
## my vms/servers hosted by AWS (EC2/Lightsail) ##
[awshosts]
vm1.theitroad.local
 
## my Linode VMs ##
[linodehosts]
vm2.theitroad.local

剧本不过是在遥控器上执行的脚本/命令而已。
使用文本编辑器(例如vim命令/nano命令),如下创建一个名为test.yml的剧本:

vim test.yml

追加以下代码:

--
- hosts: lanhosts
 
  tasks:
          - name: Get hostname for testing purpose
            command: /bin/hostname
            changed_when: False
            register: hostname
 
          - debug: var={{ item }}
            with_items:
                    - hostname.stdout

Ansible中的剧本使用Yaml。
接下来,在Fedora Linux工作站/控制机上按以下方式运行它:

$ ansible-playbook -i inventory test.yml

有关以不安全格式存储的密码的说明

仔细查看列表文件中的以下配置目录:

ansible_become_pass='PasswordForHymanUser'

以明文形式存储密码和其他敏感信息是一个坏主意。
让我们解决这个问题:

$ vim inventory

找:

ansible_become_pass='PasswordForHymanUser'

更换:

ansible_become_pass='{{ my_user_password }}'

保存并关闭文件。
接下来创建一个名为passwords.yml的新加密数据文件,运行以下命令:

$ ansible-vault create passwords.yml

设置库的密码。
提供密码后,该工具将启动您使用$EDITOR定义的任何编辑器。
追加以下内容:

my_user_password: your_password_for_ansible_user

保存并关闭文件。
如下运行:

$ ansible-playbook -i inventory --ask-vault-pass --extra-vars '@passwords.yml' test.yml

使用Ansible剧本添加用户

假设您需要添加一个名为wwwjobs的新用户lanhosts组中的所有主机。
创建一个名为add-user.yml的新剧本:

--
- hosts: lanhosts
  tasks:
          - name: Add a new user to my Linux VMs with password disabled but allow ssh log in
            user:
                    name: wwwjobs
                    comment: "Account to run jobs for our web server"
                    shell: /bin/bash
                    groups: sudo
                    append: yes
                    password: *
          - name: Upload ssh key for user wwwjobs for log in purpose
            authorized_key:
                    user: Hyman
                    state: present
                    manage_dir: yes
                    key: "{{ lookup('file', '/home/Hyman/.ssh/id_ed25519.pub') }}"

如下运行:

$ ansible-playbook -i inventory --ask-vault-pass --extra-vars '@passwords.yml' add-user.yml

如何添加和删除软件包

在此示例中,我们将使用apt命令为linodehosts组中的所有主机添加和删除软件包。
创建一个名为ubuntu-software.yml的文件:

--
- hosts: linodehosts
  tasks:
          - name: Add a list of software on Linode VMs ...
            apt:
                    name: "{{ packages }}"
                    state: present
            vars:
                    packages:
                            - vim
                            - unzip
                            - htop
                            - atop
                            - iftop
                            - nmon
                            - sysstat
                            - iotop
                            - nicstat
                            - vnstat
          - name: Delete a list of software from Linode VMs ...
            apt:
                    name: "{{ packages }}"
                    state: absent
            vars:
                    packages:
                            - nano

再次运行,如下所示:

$ ansible-playbook -i inventory --ask-vault-pass --extra-vars '@passwords.yml' ubuntu-software.yml