如何在Fedora上安装Ansible
时间:2019-04-29 03:18:06 来源:igfitidea点击:
Ansible是一个类似于Chef和Puppet的免费开源的配置管理工具。它可以在基于SSH的会话上工作,不需要在远程服务器上使用任何软件或客户机/代理。人们可以使用Ansible来管理Linux、Unix、macOS和BSD系列操作系统。
如何在Fedora安装ansible并配置ansible playbook?
更新Fedora系统
$ sudo dnf update $ sudo dnf search ansible
在Fedora Linux上安装Ansbile
$ sudo dnf info ansible $ sudo dnf install ansible
安装后查看ansible版本
$ ansible --version
在linux上设置ssh密钥
在Fedora上使用ssh-keygen命令创建密钥对
$ ssh-keygen -t itrssh -C "Desktop ssh key"
复制并安装公钥到远程Linux/Unix/BSD服务器上
$ ssh-copy-id -i $HOME/.ssh/id_itrssh.pub itr@aliyun-ubuntu $ ssh-copy-id -i $HOME/.ssh/id_itrssh.pub [email protected] $ ssh-copy-id -i $HOME/.ssh/id_itrssh.pub [email protected]
测试是否可用不用密码就能登录到服务器上
$ssh [email protected]
测试Ansible
创建一个inventory文件
$ vi inventory
inventory:
[lanhosts] 10.9.80.3 192.168.1.250 [alihosts] aliyun-ubuntu
以用户itr的身份,在lanhosts中的两台主机上运行uptime
命令和lsb_release
命令:
$ ansible -u itr -i inventory -m raw -a 'uptime' lanhosts $ ansible -u itr -i inventory -m raw -a 'lsb_release -a' lanhosts
编写 Ansible playbook 来管理服务器
修改inventory文件,配置sudo参数
[all:vars] ansible_user='itr' ansible_become='yes' ansible_become_pass='passwd' ### itr的密码 ansible_become_method='sudo' [lanhosts] 10.9.80.3 192.168.1.250 [alihosts] aliyun-ubuntu
playbook其实就是在远程机器上执行的脚本/命令。创建一个名为test.yml的playbook,如下所示:
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-playbook -i inventory test.yml
密码安全
我们直接把密码放在了inventory文件。 现在修改一下
inventory:
## ansible_become_pass='passwd' ### itr的密码 ansible_become_pass='{{ my_user_password }}'
然后创建一个文件 passwords.yml:
$ ansible-vault create passwords.yml
设置密码后,会打开编辑器。在最后添加
my_user_password: 这里填写密码
保存后,运行
$ ansible-playbook -i inventory --ask-vault-pass --extra-vars '@passwords.yml' test.yml
使用Ansible playbook添加用户
假设我们要给所有lanhosts组的服务器都添加一个新用户nginx。 新建一个yml文件:
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: nginx 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: itr state: present manage_dir: yes key: "{{ lookup('file', '/home/itr/.ssh/id_itrssh.pub') }}"
运行:
$ ansible-playbook -i inventory --ask-vault-pass --extra-vars '@passwords.yml' add-user.yml
如何使用ansible安装和删除包
我们将使用apt命令为lanhosts组中的所有主机添加和删除软件包。
创建一个ubuntu-pkg文件:
ubuntu-pkg.yml
--- - hosts: linodehosts tasks: - name: Add a list of software on 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 VMs ... apt: name: "{{ packages }}" state: absent vars: packages: - nano
运行
$ ansible-playbook -i inventory --ask-vault-pass --extra-vars '@passwords.yml' ubuntu-software.yml