这是一个我们都面临的简单问题,可能无需多想就可以手动解决。
当服务器发生变化、重新配置或重新分配 IP 地址时,我们会收到下面的 SSH 主机验证消息。我有兴趣简化工作流程以解决这些 ssh 识别错误。
给出以下消息,我通常vi /root/.ssh/known_hosts +434
会删除(dd
)有问题的行。
我见过其他组织的开发人员/用户删除他们的全部的 known_hosts
看到这条消息后,我感到很沮丧。虽然我没有那么做,但我知道有一种更优雅的方式来处理这个问题。
尖端?
[root@xt ~]# ssh las-db1
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ 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 the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
ed:86:a2:c4:cd:9b:c5:7a:b1:2b:cc:42:15:76:8c:56.
Please contact your system administrator.
Add correct host key in /root/.ssh/known_hosts to get rid of this message.
Offending key in /root/.ssh/known_hosts:434
RSA host key for las-db1 has changed and you have requested strict checking.
Host key verification failed.
答案1
您可以使用以下ssh-keygen
命令按主机删除特定条目:
ssh-keygen -R las-db1
如果您没有该命令,您可以随时使用 sed:
sed -i '/las-db1/d' /root/.ssh/known_hosts
答案2
作为一个 Puppet 用户,我解决这个问题的方法是让我的 Puppet 服务器收集我的 SSH 主机密钥并将它们发布到所有建立 SSH 连接的系统。
这样我就不必担心删除它们了。99% 的时间里,puppet 都在运行,并且为我更新了密钥,因为我的代理每 30 分钟运行一次。对我来说,例外情况非常少见,所以如果我不愿意等待,我不介意快速编辑系统范围内的 known_hosts。
class ssh::hostkeys {
@@sshkey { "${::clientcert}_rsa":
type => rsa,
key => $sshrsakey,
tag => 'rsa_key',
}
if 'true' == $common::params::sshclient {
Sshkey <<| tag == 'rsa_key' |>> {
ensure => present
}
}
file {'/etc/ssh/ssh_known_hosts':
ensure => present,
owner => 'root',
group => 'root',
mode => 0644,
}
}
答案3
我想补充一条建议,它能够在非常特殊且不太需要担心安全性的情况下为您提供帮助。
我有一个实验室环境,其中的机器经常重新安装。每次发生这种情况时,都会生成新的主机密钥(我可能可以将主机密钥保存在某处并在安装后脚本中设置它)。
由于在这个实验室环境中安全性对我来说不是问题,并且密钥经常更改,因此我的 .ssh/config 文件中有以下内容:
Host lab-*
User kenny
IdentityFile ~/.ssh/lab_id_rsa
StrictHostKeyChecking no
UserKnownHostsFile=/dev/null
这确保连接到我的实验室机器不会再导致该错误,并且我的 ssh 客户端将直接连接而无需检查主机密钥。
只有当您根本不关心安全性时才应该这样做,因为这会使您处于容易受到中间人攻击的境地。
答案4
SSHFP DNS ResourceRecord 可能会有所帮助,具体取决于您的 ssh 客户端利用它的程度。将所有 ssh 公钥指纹与主机名一起存储在那里。
预先实施 DNSSEC 或 DNS over SSL。
http://www.ietf.org/rfc/rfc4255.txt
FreeIPA.org 负责处理主机和用户密钥管理以及 PKI 证书。它还会在创建新密钥时自动上传 SSHFP DNS 记录。
系统安全服务守护进程 (SSSD) 可以配置为缓存和检索主机 SSH 密钥,这样应用程序和服务只需在一个位置查找主机密钥。由于 SSSD 可以使用 FreeIPA 作为其身份信息提供者之一,因此 FreeIPA 提供了一个通用且集中的密钥存储库。管理员无需担心分发、更新或验证主机 SSH 密钥。
http://docs.fedoraproject.org/en-US/Fedora/17/html/FreeIPA_Guide/host-keys.html