如何在Fedora 29上安装Ansible以实现IT和服务器自动化
如何在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