尝试通过 ssh 连接到我控制的计算机时,我收到了熟悉的消息:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ 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
[...].
Please contact your system administrator.
Add correct host key in /home/sward/.ssh/known_hosts to get rid of this message.
Offending RSA key in /home/sward/.ssh/known_hosts:86
RSA host key for [...] has changed and you have requested strict checking.
Host key verification failed.
Run Code Online (Sandbox Code Playgroud)
我确实更改了密钥。我读了几十篇帖子,说解决这个问题的方法是从known_hosts文件中删除旧密钥。
但我想要的是让 ssh 接受旧密钥和新密钥。错误消息 (" Add correct host key") 中的语言表明应该有某种方法可以添加正确的主机密钥而不删除旧的主机密钥。
我一直无法弄清楚如何在不删除旧密钥的情况下添加新的主机密钥。
这是可能的,还是错误消息极具误导性?
qua*_*nta 169
获取您服务器的 rsa 密钥,您server_ip的服务器的 IP 地址在哪里,例如192.168.2.1:
$ ssh-keyscan -t rsa server_ip
Run Code Online (Sandbox Code Playgroud)
示例响应:
Run Code Online (Sandbox Code Playgroud)# server_ip SSH-2.0-OpenSSH_4.3 server_ip ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAwH5EXZG...
在客户端,复制整个响应行server_ip ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAwH5EXZG...,并将此键添加到~/.ssh/known_hosts文件底部:
server_ip ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAqx9m529...(the offending key, and/or the very bottom of the `known_hosts` file)
server_ip ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAwH5EXZG... (line you're adding, copied and pasted from above)
Run Code Online (Sandbox Code Playgroud)小智 122
使用以下命令从 known_hosts 中删除该条目:
ssh-keygen -R *ip_address_or_hostname*
Run Code Online (Sandbox Code Playgroud)
这将从known_hosts文件中删除有问题的 IP 或主机名,然后再次尝试连接。
从手册页:
-R hostname
从 known_hosts 文件中删除属于主机名的所有键。此选项可用于删除散列主机(请参阅上面的 -H 选项)。
Mar*_*ark 22
一个非常简单的方法是:
cp ~/.ssh/known_hosts ~/.ssh/known_hosts.bak
Run Code Online (Sandbox Code Playgroud)
然后编辑 known_hosts 以清除原始密钥,然后使用以下命令 ssh 到主机:
ssh name@computer
Run Code Online (Sandbox Code Playgroud)
它会自动添加新密钥;然后比较这两个文件。meld 之类的程序是比较两个文件的好方法。然后合并文件以使 known_hosts 包含两个密钥
我保留两个密钥的“原因”是目标系统是多重引导,尽管我敢说有一种跨安装同步密钥的方法,但允许多个密钥似乎更直接。
编辑2015/06
我应该补充一下,现在重新审视它,我注意到一种更简单的方法 [只要条目是可识别的,通常是从主机名/IP 地址而不是引用其特定位置的错误消息];
甚至还有 HostKeyAlias 选项
ssh -o HostKeyAlias=mynewaliasforthemachine name@computer
Run Code Online (Sandbox Code Playgroud)
然后随后,在 ssh 客户端在别名下添加新密钥后,您可以编辑 known_hosts 以替换别名的“真实”主机名/IP 地址,或者使用别名选项永远连接到该主机的化身
小智 6
我在使用多个不同系统(用于编译 arm 二进制文件、项目、xbmc 等的开发系统)启动的 raspberry pi 上遇到了同样的问题,并且遇到了同样的问题。他们在本地网络上使用 DHCP,而我的路由器总是重复使用相同的 IP,因为 MAC 地址是相同的。我已经通过在我的主机文件中使用不同的域名解决了这个问题:
10.10.10.110 pi-dev
10.10.10.110 pi-xbmc
10.10.10.110 pi-etc
Run Code Online (Sandbox Code Playgroud)
known_hosts 文件按主机名保存指纹,因此即使它是相同的 IP 地址,每个唯一的主机名也会获得不同的条目。
每次使用新系统时,我都厌倦了将名称添加到主机文件中,因此我想出了一种更懒惰的方法,即在 IP 地址上使用前导零,例如:
$ ssh pi@10.10.10.110
$ ssh pi@010.10.10.110
$ ssh pi@10.010.10.110
Run Code Online (Sandbox Code Playgroud)
(未规范化的)IP 地址的每个变体在 known_hosts 中都有自己的条目。
小智 6
如果您的客户端和服务器都有 OpenSSH 6.8 或更高版本,您可以使用或UpdateHostKeys yes中的选项。例如:ssh_config~/.ssh/config
Host *
UpdateHostKeys yes
Run Code Online (Sandbox Code Playgroud)
这使得 SSH 存储服务器必须存储的所有主机密钥known_hosts,并且当服务器更改或删除一个主机密钥时,该密钥也会在您的known_hosts.
| 归档时间: |
|
| 查看次数: |
485459 次 |
| 最近记录: |