ansible部署
| 主机名 | ip | 说明 |
| ------- | ------------ | ------ |
| master | 192.168.6.80 | 管理机 |
| client1 | 192.168.6.22 | 客户机 |
| client2 | 192.168.6.23 | 客户机 |
1.安装ansible软件
[root@sql ~]# yum install epel-release ansible libselinux-python -y
2.查看ansible软件
[root@sql ~]# rpm -ql ansible |egrep '^/etc|^/usr/bin'
/etc/ansible #Ansible软件主目录
/etc/ansible/ansible.cfg #Ansible主配置文件
/etc/ansible/hosts #Ansible软件被管理节点的主机列表文件
/etc/ansible/roles
/usr/bin/ansible #Anisble批量管理命令
/usr/bin/ansible-2
/usr/bin/ansible-2.7
/usr/bin/ansible-config
/usr/bin/ansible-connection
/usr/bin/ansible-console
/usr/bin/ansible-console-2
/usr/bin/ansible-console-2.7
/usr/bin/ansible-doc
/usr/bin/ansible-doc-2
/usr/bin/ansible-doc-2.7
/usr/bin/ansible-galaxy
/usr/bin/ansible-galaxy-2
/usr/bin/ansible-galaxy-2.7
/usr/bin/ansible-inventory
/usr/bin/ansible-playbook #Ansible程序剧本执行命令
/usr/bin/ansible-playbook-2
/usr/bin/ansible-playbook-2.7
/usr/bin/ansible-pull
/usr/bin/ansible-pull-2
/usr/bin/ansible-pull-2.7
/usr/bin/ansible-test
/usr/bin/ansible-vault
/usr/bin/ansible-vault-2
/usr/bin/ansible-vault-2.7
3.检查版本
[root@sql ~]# ansible --version
ansible 2.9.27
config file = /etc/ansible/ansible.cfg
configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/site-packages/ansible
executable location = /usr/bin/ansible
python version = 2.7.5 (default, Oct 14 2020, 14:45:30) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]
ansible客户机部署
安装如下依赖软件
yum install epel-release libselinux-python -y
Ansible批量管理方式
批量管理主机有两种方式:
-
传统的密码认证
-
密钥管理
配置基础环境,Ansible管理的主机清单
1.备份配置文件
cp /etc/ansible/hosts{,.bak}
2.添加客户机的ip地址
[root@sql ~]# cat /etc/ansible/hosts
[client]
192.168.6.22
192.168.6.23
密码认证方式
Ansible是直接利用本地SSH
以及一些远程SSH服务
作为客户端的,且基本上客户端的SSH服务默认都是开启的,无须额外配置
[root@sql ~]# ansible client -m command -a "hostname" -k -u root
SSH password:
192.168.6.23 | CHANGED | rc=0 >>
web02
192.168.6.22 | CHANGED | rc=0 >>
rsync01
如果报错:
1.手动访问客户端机器,生成指纹密钥
ssh root@192.168.6.22
ssh root@192.168.6.23
配置免密登录
对于主机列表文件的配置参数修改
| 参数 | 参数类型 | 参数说明 |
| ---------------- | -------- | ------------------------- |
| Ansible_host | 通用连接 | 远程主机ip |
| ansible_port | ↑ | 设置SSH连接端口,默认22 |
| Ansible_user | ↑ | 默认SSH远程连接的用户身份 |
| Ansible_ssh_pass | 连接控制 | 指定SSH远程主机密码 |
Ansible软件使用的前提是SSH+KEY免密验证的环境,如果没有配置也可以使用Ansible,如下
[root@sql ~]# cat /etc/ansible/hosts
[client]
192.168.6.22 ansible_ssh_user=root ansible_ssh_pass=1234
192.168.6.23 ansible_ssh_user=root ansible_ssh_pass=1234
现在可以不用输入密码,就可以登录远程操作服务器
# -m是默认参数, -k 输入密码,都可以省略
[root@sql ~]# ansible client -a "hostname"
192.168.6.23 | CHANGED | rc=0 >>
web02
192.168.6.22 | CHANGED | rc=0 >>
rsync01
SSH密钥方式
比起SSH密码登录更安全方便
1.编写脚本
[root@sql scripts]# cat /usr/local/scripts/distribution.sh
#!/bin/bash
#Date: 2022-03-04
rm -rf ~/.ssh/id_rsa*
ssh-keygen -f ~/.ssh/id_rsa -P "" > /dev/null 2>&1
SSH_Pass=1234
Key_Path=~/.ssh/id_rsa.pub
for ip in 22 23
do
sshpass -p$SSH_Pass ssh-copy-id -i $Key_Path "-o StrictHostKeyChecking=no" 192.168.6.$ip
done
# 非交互式分发公钥命令需要用sshpass指定SSH密码,通过-o StrictHostKeyChecking=no 跳过SSH连接确认信息
2.执行
bash //usr/local/scripts/distribution.sh
修改一下ansible主机列表的文件,看一下效果
#此时我们在配置文件中没有设置用户和密码
[root@sql scripts]# cat /etc/ansible/hosts
[client]
#192.168.6.22 ansible_ssh_user=root ansible_ssh_pass=1234
#192.168.6.23 ansible_ssh_user=root ansible_ssh_pass=1234
192.168.6.22
192.168.6.23
在执行一下看看是否需要密码
[root@sql scripts]# ansible client -a "hostname"
192.168.6.23 | CHANGED | rc=0 >>
web02
192.168.6.22 | CHANGED | rc=0 >>
rsync01
!>注意