如果有大量主机需要使用如 ansible 等工具来做批量管理时,就需要给对应的客户主机导入 SSH key,但是如果每一台都单独生成 key 然后再逐台导入,那么将花费大量时间,因此可以使用批量的方式来创建并导入远程主机
1、添加客户机白名单
第一次通过 SSH 访问客户机时,需要将该主机的指纹信息添加到管理主机的 “.ssh/known_hosts” 文件中,然后才能正常访问,否则无法通过 SSH 访问客户机
因为被管理的主机数量较多,因此可以使用 ansible 来获取并导入客户机的指纹信息
-
在 ansible 配置文件 “/etc/ansible/ansible.cfg” 中,将 “host_key_checking = False” 前面的注释去掉
-
在 “/etc/ansible/hosts” 文件中添加被管理主机的 IP 地址,其格式可以是以下的任意一种
[host_group1] 192.168.1.[2:5] # 与 [host_group1] 效果相同 [host_group2] 192.168.1.2 192.168.1.3 192.168.1.4 192.168.1.5 [webserver] 192.168.1.2 192.168.10.5 192.168.50.33 [dbserver] 192.168.1.9 192.168.10.18 192.168.50.3
-
执行
ansible all -m ping
或者ansible webserver -m ping
即可将上面配置文件中所有或指定主机的指纹自动添加到 “.ssh/known_hosts” 文件中
2、生成并导入key
使用 sshpass 批量生成并导入 key (注意:使用该方法,需要所有被管理主机的用户登录密码相同)
ssh-keygen -f /root/.ssh/id_rsa -P ''
NET=192.168.1
# 指定被管理主机的登录密码
export SSHPASS='passwd'
for IP in {11..13};do
sshpass -e ssh-copy-id $NET.$IP
done
返回结果
添加失败
一般是因为第一次登录,没有在 .ssh/known_hosts 中添加目标主机
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
添加成功
... (前面省略)... Number of key(s) added: 1 Now try logging into the machine, with: "ssh '192.168.1.x'" and check to make sure that only the key(s) you wanted were added. ... (其他主机省略)...
经过以上操作后,就可以通过 SSH key 实现免密登录远程主机了,也就可以使用 ansible 等工具批量管理远程主机了