据我所知,默认的 ssh 选项StrictHostKeyChecking
设置为ask
,因此第一个 ssh 连接看起来像:
$ ssh host.example.com
The authenticity of host 'host.example.com (1.2.3.4)' can't be established.
RSA key fingerprint is 52:9b:0a:f1:e4:51:1b:96:8c:b7:96:7c:d3:d2:7d:9f.
Are you sure you want to continue connecting (yes/no)?
- 假设可能存在安全问题,我想第一次自动添加主机密钥。
- 我希望任何本地用户能够自动使用主机密钥(例如无需任何额外的
ssh
命令行选项)。
答案1
我认为 keyscan 更干净:
/usr/bin/ssh-keyscan $host >> $SSH_KNOWN_HOSTS
如果您需要先删除陈旧的条目:
/usr/bin/ssh-keygen -R $host -f $SSH_KNOWN_HOSTS
那么你就不需要再遭受这些警告了。
答案2
我已经阅读man ssh
并man ssh_config
找到了解决方案:
#!/bin/bash
SSH_KNOWN_HOSTS=/etc/ssh/ssh_known_hosts
[ -e $SSH_KNOWN_HOSTS ] || touch $SSH_KNOWN_HOSTS
for host in \
host1.example.com \
host2.example.com \
; do
ssh-keygen -R $host -f $SSH_KNOWN_HOSTS
ssh -q -o StrictHostKeyChecking=no -o BatchMode=yes -o UserKnownHostsFile=$SSH_KNOWN_HOSTS $host echo '' || true
done
chmod a+r $SSH_KNOWN_HOSTS
它有效但似乎有点不靠谱。你知道更短的方法来做到这一点吗?
答案3
将公钥添加到 /etc/ssh/ssh_known_hosts,它将适用于系统中的所有用户。请注意,该文件可能还有其他密钥。或者您可以指定其他已知主机文件:
ssh -o UserKnownHostsFile=/root/.ssh/example.com.known_hosts