如何修复有关ECDSA主机密钥的警告


287

我正在尝试使用设置Ubuntu服务器上的无密码SSH ssh-copy-id myuser@myserver,但出现错误:

警告:“ myserver”的ECDSA主机密钥与IP地址“ 192.168.1.123”的密钥不同

是什么原因造成的,如何解决?我尝试删除.ssh远程计算机上的目录,并在ssh-keygen -R "myserver"本地运行,但这不能解决错误。


就我而言,我更改了与域的server(ip)绑定,然后更改了The ECDSA host key for server has changed。我的方法是删除有关域的相关缓存字符串~/.ssh/known_hosts。然后ssh起作用。
忍者

Answers:


415

删除192.168.1.123本地计算机上的缓存密钥:

ssh-keygen -R 192.168.1.123

14
从家里进行SSH时,在新安装的Debian服务器上对我不起作用。另外,答案很简洁。
克里斯K

/home/wf/.ssh/known_hosts已更新。原始内容保留为/home/wf/.ssh/known_hosts.old“警告:将IP地址'xxxx'的ECDSA主机密钥永久添加到已知主机列表中。” 被陈列。然后它似乎起作用了
Wolfgang Fahl 2014年

13
您可以更新密钥而不是将其删除。使用ssh-keyscan -t ecdsa my.server.domain >> ~/.ssh/known_hosts后,你不需要在第一次连接主机到verificate新的密钥。
Alex

2
对于无法成功实现的用户:我已经注册了多次出现相同IP的情况:1 /所述IP地址(xx.xx.xx.xx),域(tomsihap.fr),提供商的给定vps服务器地址(vpsxxx.ovh.net)。ssh-keygen -R分别完成了这些工作。
tomsihap

为我工作,但困惑可能是应该从哪个主机运行此命令?答案来自出现错误的答案。第二个问题和答案更为明显,但以防万一:将哪个地址传递给ssh-keygen -R?错误语句中指出的地址。
Russ Bateman

62

就我而言ssh-keygen -R ...,没有解决警告。我有这样的额外信息:

Offending key for IP in /home/myuser/.ssh/known_hosts:8
Matching host key in /home/myuser/.ssh/known_hosts:24

我只是手动编辑~/.ssh/known_hosts并删除了第8行(“违规键”)。我尝试重新连接,将主机永久添加,之后一切正常!


2
奇迹般有效。可以使用来解决这一问题sed -e '8d' /home/myuser/.ssh/known_hosts,将行号8和文件名替换为系统上显示的内容。
亚历克斯·米勒

我用这种方法的问题是,如果known_hosts:8引用是否为零索引值,会有些混乱。很高兴知道这是1:1映射...
Daniel F

我注意到如果您使用2022这样的非标准端口,则会发生这种情况。在这种情况下,您需要这样做ssh-keygen -R [hostname]:2022
Alexander Malfait,

19

我在局域网计算机和两个Web托管帐户之间进行了很多切换,因此我用SSH来解决了各种问题,包括ssh -v用于查看问题出在哪里和出现问题的身份验证问题。

我刚刚解决了这个问题,对答案不满意,所以我想真正地知道自己的“为什么” ...

我的情况的触发因素是:在工作中安装了新的服务器操作系统,并且在安装openssh-server软件包后,在工作的服务器上生成了一组新的主机密钥。以前,我所有的服务器操作系统都是Ubuntu,但这次将其更改为Debian(我怀疑权限之间存在细微差别)。

当所有操作系统均为Ubuntu且我重新安装服务器的操作系统时,在第一次使用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 the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
06:ea:f1:f8:db:75:5c:0c:af:15:d7:99:2d:ef:08:2a.
Please contact your system administrator.
Add correct host key in /home/user/.ssh/known_hosts to get rid of this message.
Offending key in /home/user/.ssh/known_hosts:4
RSA host key for domain.com has changed and you have requested strict checking.
Host key verification failed.

然后,我~/.ssh/known_hosts在计算机上打开ssh,删除该行,重新连接,然后发生这种情况:

chris@home ~ $ ssh work
The authenticity of host '[work]:11122 ([99.85.243.208]:11122)' can't be established.
ECDSA key fingerprint is 56:6d:13:be:fe:a0:29:ca:53:da:23:d6:1d:36:dd:c5.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[work]:11122 ([99.85.243.208]:11122)' (ECDSA) to the list of known hosts.
Linux rock 3.2.0-4-amd64 #1 SMP Debian 3.2.51-1 x86_64

大约:11122的那个位是我从防火墙路由SSH的端口号

我检查了以前的Ubuntu服务器上的备份,并与新的Debian安装进行了比较:

Ubuntu:                                            Debian:
# Package generated configuration file             # Package generated configuration file
# See the sshd(8) manpage for details              # See the sshd_config(5) manpage for details

# What ports, IPs and protocols we listen for      # What ports, IPs and protocols we listen for
Port 22                                            Port 22
# Use these options to restrict which interface    # Use these options to restrict which interfaces
#ListenAddress ::                                  #ListenAddress ::
#ListenAddress 0.0.0.0                             #ListenAddress 0.0.0.0
Protocol 2                                         Protocol 2
# HostKeys for protocol version 2                  # HostKeys for protocol version 2
HostKey /etc/ssh/ssh_host_rsa_key                  HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key                  HostKey /etc/ssh/ssh_host_dsa_key
------------------------------------------------   HostKey /etc/ssh/ssh_host_ecdsa_key
#Privilege Separation is turned on for security    #Privilege Separation is turned on for security
UsePrivilegeSeparation yes                         UsePrivilegeSeparation yes

所以是的,很可能,主机最近开始使用ecdsa密钥,基于最近Ubuntu的更改,我将责任归咎于更新。Ubuntu摆脱了我指望的坚如磐石的Linux操作系统,这就是为什么我这次安装Debian的原因。

在ecdsa上阅读了security.SE q / a,并且已经sshd_config从新的Debian服务器上删除了该行。(跑了service ssh restart


2
+1为漂亮的并排比较块。您能否添加一个标有“ Ubuntu从坚如磐石的Linux操作系统转变”的URL?
bgoodr 2014年

@bgoodr是我的观点,并且完全基于过去几年中多次设置自己的RAID文件服务器。:/不好意思回答,但是开始谷歌搜索ubuntu debian server,您就会明白我的意思。
克里斯K

1
@ChrisK先生,您是老板。感谢您提供详细但简洁的答案。
sargas

6

每次都会出现该提示,因为使用动态寻址时IP地址始终会更改。尝试使用静态IP,因此您只需添加一次密钥。


1
好点,我是否想念有人提到动态IP?
克里斯·K

6

ssh-keygen -f“ /root/.ssh/known_hosts” -R 192.168.1.123

这应该替换known_hosts.old下的现有密钥并创建一个新密钥。在相同的情况下,此解决方案对我有用


3

我在〜/ .ssh / config中添加了以下几行,从而禁用了对所有.local地址的严格主机检查。(通过DHCP地址分配,我的本地计算机的ip地址总是在变化)

host *.local
    StrictHostKeyChecking no

不过,您仍然会收到警告,对我来说这很好。


2

您是否使用同一用户进行连接?

如果您以用户John之类的身份登录到本地PC 并以用户Adolf @ B的身份连接到服务器B,并且一切正常,这并不意味着如果您以用户Jane身份登录到本地PC 并连接到服务器,则一切正常。如用户阿道夫@乙

如果要从PC A以用户Beda的身份登录服务器B 而不使用密码,请尝试以下命令,全部从PC A进行

ssh-keygen -t rsa

此命令生成密钥并将密钥存储在文件中。请保留密码短语为空。

ssh Beda@B mkdir -p .ssh

如果目录不存在,则此命令将创建目录。否则,请勿打印错误消息。

cd ~/.ssh

此命令将目录更改为用户的主目录./ssh。

cat id_rsa.pub | ssh Beda@B 'cat >> .ssh/authorized_keys'

此命令将文件id_rsa.pub(您的公共密钥)打印到服务器上的authorized_keys中

重要信息:Beda是您要连接的服务器上的用户名,B是您的服务器IP。

现在,您无需密码或密码即可连接到服务器B:

ssh Beda@B

1
或者只是使用ssh-copy-id来用您的id_rsa.pub密钥填充authorized_keys文件,而不会带来任何额外麻烦。
BlakBat

1

这里的线程可能会有所帮助。

本质上,您想同时删除该主机的RSA和ECDSA密钥,然后使用不会导致此冲突的方式ssh-keyscan将其重新放入known_hosts文件中。当我遇到同样的问题时,它对我有用。


1

问题:是什么原因造成的……?

因此,ssh服务器主机密钥已更改。是什么引起了变化?这很难说。以下是一些猜测:

  • myserver上的sshd是否开始使用ECDSA密钥,因此它是新的密钥类型?
  • 最近重新安装了myserver吗?
  • 最近是否重新安装了myserver上的sshd,以便生成了新的ssh主机密钥?
  • 是否有人重新生成或替换了sshd主机密钥?
  • myserver的IP地址是否已更改,以便其他主机正在应答该IP地址?

问题:...以及如何解决?

正如其他人已经回答的那样,为您的帐户已缓存的myserver删除缓存的ECDSA主机密钥。


2
很好的建议,但实际上并不能回答问题。甚至都不想回答这个问题。
boatcoder 2013年

1

这个错误使我很烦了很长时间。由于某种原因,我是否会做一个改变

ssh host

要么

ssh host.domain

https://askubuntu.com/questions/87449/how-to-disable-strict-host-key-checking-in-ssh

然后为我指出了更改配置文件的选项。请参阅我的脚本https://askubuntu.com/a/949731/129227,以实现流程自动化。


1
使用配置值CanonicalizeHostname,并CanonicalDomains会避免去除严格的检查,并将使ssh考虑主机和host.domain是相同的。
BlakBat

0

我通过卸载并重新安装Secure Shell在Chromebook上解决了此问题。


这太过分了。在这里我的答案中看到一个更简单的解决方案。
亚历克斯·尤沙

0

以下是known_hosts在Chrome操作系统上删除已知主机指纹(从文件中)的方法:

连接失败时,在ssh输出中找到有问题的主机条​​目的索引。例如,在下面的行中,索引为7

Offending ECDSA key in /.ssh/known_hosts:7

打开Secure Shell窗口的JavaScript控制台(CTRL+ Shift+ J)并键入以下内容,并替换INDEX为适当的值(例如7):

term_.command.removeKnownHostByIndex(INDEX);

该解决方案是从Leo Gaggl的Blog中借用

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.