问题描述
我写了这个小实用程序脚本:
for h in $SERVER_LIST; do ssh $h "uptime"; done
将新服务器添加到$SERVER_LIST
时,脚本将停止:
The authenticity of host 'blah.blah.blah (10.10.10.10)' can't be established.
RSA key fingerprint is a4:d9:a4:d9:a4:d9a4:d9:a4:d9a4:d9a4:d9a4:d9a4:d9a4:d9.
Are you sure you want to continue connecting (yes/no)?
我试过yes
:
for h in $SERVER_LIST; do yes | ssh $h "uptime"; done
没有运气。
有没有办法参数化ssh
以自动接受任何新密钥?
最佳解决思路
使用StrictHostKeyChecking选项,例如:
ssh -oStrictHostKeyChecking=no $h uptime
这个选项也可以添加到〜/.ssh /config中,例如:
Host somehost
Hostname 10.0.0.1
StrictHostKeyChecking no
请注意,如果主机密钥已更改,即使使用此选项,也会收到警告:
$ ssh -oStrictHostKeyChecking=no somehost uptime
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
31:6f:2a:d5:76:c3:1e:74:f7:73:2f:96:16:12:e0:d8.
Please contact your system administrator.
Add correct host key in /home/peter/.ssh/known_hosts to get rid of this message.
Offending RSA key in /home/peter/.ssh/known_hosts:24
remove with: ssh-keygen -f "/home/peter/.ssh/known_hosts" -R 10.0.0.1
Password authentication is disabled to avoid man-in-the-middle attacks.
Keyboard-interactive authentication is disabled to avoid man-in-the-middle attacks.
ash: uptime: not found
如果您的主机不经常重新安装,您可以使用-oUserKnownHostsFile=/dev/null
选项使其不太安全(但对于often-changing主机密钥更方便)。这将丢弃所有接收到的主机密钥,因此它永远不会生成警告。
次佳解决思路
您可以使用以下命令将服务器的指纹添加到known_hosts
ssh-keyscan -H <ip-address> >> ~/.ssh/known_hosts
ssh-keyscan -H <hostname> >> ~/.ssh/known_hosts
注:替换< ip-address>和<主机名>用你想添加的服务器的IP和DNS名称。
唯一的问题是你最终会在你的known_hosts中有两次服务器。这并不是什么大事,只是提到。为确保没有重复,可以首先运行以下命令首先删除所有服务器:
ssh-keygen -R <ip-address>
ssh-keygen -R <hostname>
所以你可以运行:
for h in $SERVER_LIST; do
ip=$(dig +search +short $h)
ssh-keygen -R $h
ssh-keygen -R $ip
ssh-keyscan -H $ip >> ~/.ssh/known_hosts
ssh-keyscan -H $h >> ~/.ssh/known_hosts
done
在删除re-add时要注意的一点是,您基本上将删除验证指纹的安全性。因此,在每次执行实用程序脚本之前,您肯定不希望运行此脚本。
第三种解决思路
对于这种响应,我迟了一点,但明智的做法是在运行正常运行时间采集之前在新机器上执行ssh-keyscan。
ssh-keyscan <newhost> >> ~/.ssh/known_hosts
为了方便起见,禁用完整性检查听起来就像是一个糟糕的计划,即使您认为自己完全控制了环境。