之前使用vmware vCenter管理虚拟机, 我们在做模版时就将控制节点的公钥放入了虚拟机模版, 因此使用模版新建的虚拟机都可以直接从控制节点免密钥登录的, 能够有效解决虚拟机密码被改了无法登录的问题, 以及通过控制节点来做一些软件安装/配置修改和服务监控等。
最近在OpenStack上新建了100多台机器, 这些机器一开始并没有内置公钥, 机器开机后要对他们进行初始化, 如修改yum源和主机名, 常用工具安装, SELINUX/iptables禁用, vim设置优化等, 逐一手动修改工作量无疑会大到让人奔溃, 在不熟悉Ansible的情况下, 我们要做的第一步就是将控制节点的公钥拷贝到远程虚拟机上, 但是一个个的执行ssh-copy-id 还要输入不同的随机密码,也会累死人的。 现呢? 摸索了一下, 找到了对应的解决办法;
vim /etc/ssh/ssh_config
#Add at the end of file
StrictHostKeyChecking no
ssh或ssh-copy-id免输yes,ssh首次访问总是提示Are you sure you want to continue connecting (yes/no)
1、ssh -o stricthostkeychecking=no
ssh-copy-id -o stricthostkeychecking=no 验证成功
2、ssh-copy-id -i .ssh/id_rsa.pub [email protected] 验证搭配使用sshpass不行
3、ssh -J [email protected] [email protected] 没有验证
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum install -y sshpass
#-p指的是主机的passwd
for i in {2..4}; do sshpass -p '111' ssh-copy-id -o stricthostkeychecking=no [email protected].$i ; done
[root@3228507c4263 pluginconf.d]# for i in {2..4}; do sshpass -p '111' ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected].$i ; done
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
方法二:详细步骤
sshpass (添加epel源进行安装)
ssh-copy-id (centos已内置)
将需要添加公钥的主机名/IP地址/主机密码存入到文本文件node.hosts中,格式如下:
node01 10.0.0.21 9nDvik7w
node02 10.0.0.22 5fDviDEw
node03 10.0.0.23 FiPp2UpR
node04 10.0.0.24 KeMbe57z
node05 10.0.0.25 FElJ3ArM
使用sshpass将密码传递给ssh-copy-id , 使得当需要输入密码时, 能够自动读取变量进行输入并完成验证.
本脚本在原来的基础上添加了一些附加功能, 包括:
脚本copy_ssh_id.sh如下: