一、简介
在主机清单文件中,可能处于安全考虑,你可能不会记录被控端主机的用户名、密码、SSH端口。如下图所示,定义了root用户的账号密码,可能会出现问题。
当然这个问题也可以解决,通过ansible-vault对主机清单文件加密。这里就通过另外一种方式来避免用户名、密码以明文的形式出现在主机清单中。
二、操作步骤
2.1、对单个playbook剧本任务定义密钥文件
说明:这里就以控制端为普通用户lolaage为例。
1、在主控端上创建普通用户
[root@localhost ~]# useradd lolaage
[root@localhost ~]# echo "123456" | passwd --stdin lolaage
2、主控端上lolaage用户下生成公私钥文件
[lolaage@localhost ~]$ whoami
lolaage
[lolaage@localhost ~]$ ssh-keygen -t dsa -f ~/.ssh/id_dsa -P ""
[lolaage@localhost ~]$ sshpass -p123456 ssh-copy-id -i .ssh/id_dsa.pub -o StrictHostKeyChecking=no -p22 root@192.168.1.191
[lolaage@localhost ~]$ sshpass -p123456 ssh-copy-id -i .ssh/id_dsa.pub -o StrictHostKeyChecking=no -p22 root@192.168.1.192
[lolaage@localhost ~]$ sshpass -p123456 ssh-copy-id -i .ssh/id_dsa.pub -o StrictHostKeyChecking=no -p22 root@192.168.1.193
说明:这里主要是主控端普通用户lolaaage与受控端主机root用户之间的互信。
3、主机清单文件
[mysql_cluster_1]
192.168.1.191
[mysql_cluster_2]
192.168.1.192
[mysql_cluster_3]
192.168.1.193
4、一个简单的playbook
当主控端是以lolaage用户登录的,则在playbook文件中中无需定义密钥文件
- name: 使用私钥文件连接到远程主机
hosts: mysql_cluster_1
remote_user: root
tasks:
- name: 执行命令
command: date
当主控端是以root用户或其它用户登录的,则需要在playbook文件中定义密钥文件,将/home/lolaage/.ssh/id_dsa文件复制到/opt/mysql_cluster/cluster/node3目录中,并给予777权限。
- name: 使用私钥文件连接到远程主机
hosts: mysql_cluster_1
remote_user: root
vars:
ansible_ssh_private_key_file: /opt/mysql_cluster/cluster/node3/id_dsa
tasks:
- name: 执行命令
command: date
5、执行结果如下所示:
2.2、对所有playbook剧本任务定义密钥文件
说明:这里就以控制端为普通用户lolaage为例。
1、在主控端上创建普通用户
[root@localhost ~]# useradd lolaage
[root@localhost ~]# echo "123456" | passwd --stdin lolaage
2、主控端上lolaage用户下生成公私钥文件
[lolaage@localhost ~]$ whoami
lolaage
[lolaage@localhost ~]$ ssh-keygen -t dsa -f ~/.ssh/id_dsa -P ""
[lolaage@localhost ~]$ sshpass -p123456 ssh-copy-id -i .ssh/id_dsa.pub -o StrictHostKeyChecking=no -p22 root@192.168.1.191
[lolaage@localhost ~]$ sshpass -p123456 ssh-copy-id -i .ssh/id_dsa.pub -o StrictHostKeyChecking=no -p22 root@192.168.1.192
[lolaage@localhost ~]$ sshpass -p123456 ssh-copy-id -i .ssh/id_dsa.pub -o StrictHostKeyChecking=no -p22 root@192.168.1.193
说明:这里主要是主控端普通用户lolaaage与受控端主机root用户之间的互信。
3、主机清单文件
当主控端是以lolaage用户登录的,则主机清单文件中无需定义密钥文件
[mysql_cluster_1]
192.168.1.191
[mysql_cluster_2]
192.168.1.192
[mysql_cluster_3]
192.168.1.193
当主控端是以root用户或其它用户登录的,则需要在主机清单文件中定义密钥文件,将/home/lolaage/.ssh/id_dsa文件复制到/opt/mysql_cluster/cluster/node3目录中,并给予777权限。
[mysql_cluster_1]
192.168.1.191 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_private_key_file=/opt/mysql_cluster/cluster/node3/id_dsa
[mysql_cluster_2]
192.168.1.192 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_private_key_file=/opt/mysql_cluster/cluster/node3/id_dsa
[mysql_cluster_3]
192.168.1.193 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_private_key_file=/opt/mysql_cluster/cluster/node3/id_dsa
执行playbook示例如下:
总结:整理不易,如果对你有帮助,可否点赞关注一下?
更多详细内容请参考:《Linux运维篇:Linux系统运维指南》