Ansible | 首次使用时密钥分发问题
Posted Nick技术栈
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ansible | 首次使用时密钥分发问题相关的知识,希望对你有一定的参考价值。
Ansible,是默认基于SSH通信的。所以,登陆的时候,都要进行身份认证。当然,在我们机器比较少(两三台)的时候,可以逐个逐个输入密码,去拷贝一个密钥。当数量达到一定大的时候,就不允许我们这样去做了。那么我们有下面这几种方法:
1、利用Ansible里面的模块+yaml来做
2、利用export工具,利用export工具和ssh联合,免交互分发密钥
3、利用sshpass工具,来做
下面来一个个做介绍:
方法一:利用Ansible里面的模块+yaml来做
我们需要配置的文件有
/etc/ansible/hosts
/etc/ansible/ansible.cfg
Step 1:/etc/ansible/hosts
要加入我们需要配置的主机组
例子:
[ ]
192.168.120.133 ansible_user=root ansible_ssh_pass="12123"
192.168.120.129 ansible_user=root ansible_ssh_pass="12123"
Step 2:/etc/ansible/ansible.cfg
在七十行左右的位置
把#host_key_checking = False放开
成为host_key_checking
不检查密钥;
Step 3:写yaml脚本
---
hosts: node
user: root
tasks:
name: ssh-copy
authorized_key: user=root key="{{ lookup('file', '/root/.ssh/id_rsa.pub') }}"
tags:
sshkey
一定要安装格式来。yaml是严格的格式控制的语言。
hosts要和上面Step 1写的匹配!
Step 4:执行ansible-Playbook!
# ansible-playbook push.ssh.yaml
成功的输出:
常见错误
[root@localhost ~]# ansible-playbook push.ssh.yaml
PLAY [node] ***************************************************************************************************
TASK [Gathering Facts] ****************************************************************************************
fatal: [192.168.120.133]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).", "unreachable": true}
fatal: [192.168.120.129]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).", "unreachable": true}
to retry, use: --limit @/root/push.ssh.retry
PLAY RECAP ****************************************************************************************************
192.168.120.129 : ok=0 changed=0 unreachable=1 failed=0
192.168.120.133 : ok=0 changed=0 unreachable=1 failed=0
遇到这个错误的时候,要看看我们的防火墙配置是否正确,以及前面的免检查密钥配置是否正确!还有密码写得有没有问题!
Step 5:开启/etc/ansible/ansible.cfg密钥检查以及删除/etc/ansible/hosts密码
---------------/etc/ansible/ansible.cfg
# uncomment this to disable SSH key host checking
host_key_checking = False
---------/etc/hosts------------------
[node]
192.168.120.133 ansible_user=root
192.168.120.129 ansible_user=root
Step 6:验证!
[ ]
成功!!
方法二:利用export工具,利用export工具和ssh联合,免交互分发密钥:
可以参考上一篇文章
方法三:利用sshpass工具实现:
思路:编写一个shell脚本,把密码和账户以参数方式传递
echo "-----------------`date +%Y-%m-%d/%H:%M:%S`------------------" >> ./ssh_cp_log
#to produce ssh-keygen
expect ./ssh1.exp
cat ./userlist|while read line
do
ip=`echo $line|awk '{print $1}'`
user=`echo $line|awk '{print $2}'`
pass=`echo $line|awk '{print $3}'`
sshpass -p $pass ssh-copy-id $user@$ip >> /dev/null
#check
if [ $? -eq 0 ]
then
echo $ip had copy success>>./ssh_cp_log
else
echo $ip fail!>>./ssh_cp_log
fi
done
echo result can see in ssh_cp_log
用户列表设置:一个存在一个不存在,顺带验证!
[root@node2 send.dir]# cat userlist
192.168.120.133 root 1
192.168.120.153 root 2
结果:
以上是关于Ansible | 首次使用时密钥分发问题的主要内容,如果未能解决你的问题,请参考以下文章