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


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


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

评论

就我而言,我更改了与域的server(ip)绑定,然后服务器的ECDSA主机密钥已更改。我的方法是删除〜/ .ssh / known_hosts中有关domain的相关缓存字符串。然后ssh起作用。

#1 楼

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

ssh-keygen -R 192.168.1.123


评论


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

–克里斯K
2014年1月16日在7:29

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

– Wolfgang Fahl
2014年7月25日在6:55



您可以更新密钥而不是将其删除。使用ssh-keyscan -t ecdsa my.server.domain >>〜/ .ssh / known_hosts之后,您无需在首次连接主机时验证新密钥。

– Alex
16年7月13日在10:01

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

–今晚
16 Dec 17 '23:02

如果这不能解决问题,并且ssh 192.168.1.123显示警告但未在known_hosts中显示有问题的行号,则可以执行ssh -v 192.168.1.123 2>&1 | grep已知,那么您可以例如sed -i.orig 42d〜/ .ssh / known_hosts删除第42行(或其他任何行)

–锤子
18 Mar 11 '18 at 13:19



#2 楼

就我而言,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行(“违规键”)。我尝试重新连接,将主机永久添加,之后一切正常!

评论


奇迹般有效。可以使用sed -e'8d'/home/myuser/.ssh/known_hosts一行解决此问题,用系统上显示的内容替换行号8和文件名。

– Alex P. Miller
17年6月22日在14:57



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

–丹尼尔F
19年2月18日在16:14

我注意到如果使用非标准端口(例如2022),则会发生这种情况。在这种情况下,您需要执行ssh-keygen -R [hostname]:2022

–亚历山大·马尔菲(Alexander Malfait)
19年7月10日在14:55



如果删除〜/ .ssh / known_hosts,则会收到消息,提示无法建立真实性,并且显示“确定要继续连接”。回答“是”尝试连接失败。如果我尝试第二次连接,则会收到与开始时相同的ECDSA主机密钥错误。

–亚伦·弗兰克(Aaron Franke)
19-10-10在20:12

我更改了路由器上ssh的端口以减少负载...这可以修复消息。

–雷·福斯(Ray Foss)
8月28日19:46

#3 楼

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

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

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

当所有操作系统都是Ubuntu时,我重新安装了服务器的OS第一次使用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

评论


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

–更好
2014年2月9日在16:43

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

–克里斯K
2014年2月10日7:00

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

– Sargas
16年8月12日在15:46

#4 楼

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

评论


好点,我是否想念有人提到动态IP?

–克里斯K
2014年1月16日20:13

当您无法控制IP地址时,如何处理该问题有什么建议吗?

–迈克尔
4月1日19:16

@Michael,我们在这里做什么?您可以访问路由器页面吗?是否有您可以控制的服务器(充当集合点)?您还可以考虑有关多播DNS(mdns:Apple Bonjour / Avahi)。创建一个脚本,以更改known_hosts文件中的IP地址。

–加拉夫·约瑟夫(Gaurav Joseph)
4月2日9:15

在使用DHCP的公司环境中,通常没有权限摆弄IP地址分配。脚本的想法很有趣,但是我认为您需要在另一台机器上更改known_hosts文件,对吗?有时,信任只向一个方向流动(即B信任A可以登录,反之则不然),这可能会使这个过程更加棘手。

–迈克尔
4月2日22:46

不会,因为密钥保持不变,因此只有您的计算机需要更改本地known_hosts文件中的主机(ssh服务器)的IP。如果需要在两台计算机上都完成此操作,只需在两台计算机上安装脚本即可。如果您需要更多帮助以创建解决方案,请与我联系。

–加拉夫·约瑟夫(Gaurav Joseph)
4月2日23:26

#5 楼

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

host *.local
    StrictHostKeyChecking no


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

评论


请注意,仅在您可以密切监视的事情上执行此操作,因为这很重要,它说:“我不在乎他们是谁,所以只需要断开cr-p并连接我即可。”不要在连接到Internet的生产服务器或计算机上执行此操作。

–克里斯·强(Chris Qiang)
12月3日4:20



对于此用例,无需禁用StrictHostKeyChecking。您可以禁用CheckHostIP,这将验证主机的密钥,但不验证其解析的IP地址。

– Esme Povirk
12月23日17:20

#6 楼

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

这将替换known_hosts.old下的现有密钥并创建一个新密钥。
此解决方案有效在相同的情况下对我来说

评论


-1,因为它与接受的答案重复

–彼得·多布罗格斯特(Piotr Dobrogost)
8月28日9:14

#7 楼

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

如果您登录到本地计算机(例如John用户)并连接到服务器B(例如Adolf @ B用户)并且一切正常,这并不意味着一切都正确如果您以Jane用户身份登录到本地PC并以Adolf @ B用户身份连接到服务器B,就可以了。

如果要从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


评论


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

–blakbat
18年8月27日在11:03

#8 楼



本质上,您想要删除该主机的RSA和ECDSA密钥,然后使用ssh-keyscan将它们放回known_hosts文件中,而不会导致这种情况。冲突。当我遇到相同的问题时,它对我有用。

#9 楼

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

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


myserver上的sshd是否开始使用ECDSA密钥,因此它是新的密钥类型?
最近是否重新安装了myserver?
最近是否重新安装了myserver上的sshd,从而生成了新的ssh主机密钥?
有人重新生成或替换了sshd主机密钥吗?
myserver的IP地址是否已更改,因此

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

其他人已经回答了,请删除缓存的ECDSA主机密钥您的帐户已缓存的myserver。

评论


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

–boatcoder
13年4月3日在14:18

#10 楼

这个错误使我很烦了很长时间。由于某些原因,我是否要执行
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,以实现流程自动化。

评论


使用配置值CanonicalizeHostname和CanonicalDomains将避免删除严格的检查,并使ssh认为host和host.domain相同。

–blakbat
18年3月3日在15:02

#11 楼

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

评论


这太过分了。在这里我的答案中看到一个更简单的解决方案。

– Alex Yursha
17年7月24日在7:57

另一个类似的核选项是在Linux下rm -f〜/ .ssh / known_hosts

– Tino
2月23日在1:59



#12 楼

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

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

Offending ECDSA key in /.ssh/known_hosts:7


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

term_.command.removeKnownHostByIndex(INDEX);


此解决方案是从Leo Gaggl的博客中借用的。

#13 楼

在我这方面,发生这种情况的原因是我认为是较新的ssh和更高版本客户端的OpenSSH_7.9p1错误,当它尝试学习更安全的ecdsa服务器密钥时,已经知道较旧的rsa类型密钥。然后,它会显示此误导性消息!
对此我不知道有什么好的解决办法,我发现的唯一解决方法是删除所有“好的但旧的rsa密钥”,以便客户端可以重新学习“新的更安全” ecdsa键”。因此:


第一步是删除所有旧的RSA密钥(警告!这会失去针对MitM的保护):
$ sed -i '/ ssh-rsa /d' ~/.ssh/known_hosts



然后,第二步是重新学习所有主机密钥,必须通过使用ssh再次连接到每个IP手动完成。


为Windows编辑:


在Windows上没有sed,因此最好的解决方法可能是使用
del %USERPROFILE%\.ssh\known_hosts`
删除known_hosts文件。警告!在重新学习所有密钥之前,这将失去针对MitM的保护。



这里是我观察到的内容:该相同的已知优质服务器的新引入的别名:
$ sftp test@136.243.197.100
Connected to test@136.243.197.100
sftp> 

$ sftp test@valentin.hilbig.de
Connected to test@valentin.hilbig.de.
sftp> 

请查看IP地址。与上面相同的IP!因此,看起来(已知)IP的(好)密钥突然冒犯了自己(不是,因为ssh客户端混合了两个不兼容的密钥,请参见下文)。
现在我们尝试修复它:
$ sftp test@gcopy.net
Warning: the ECDSA host key for 'gcopy.net' differs from the key for the IP address '136.243.197.100'
Offending key for IP in /home/test/.ssh/known_hosts:45
Matching host key in /home/test/.ssh/known_hosts:44
Are you sure you want to continue connecting (yes/no)? 

让我们再试一次:
$ ssh-keygen -R 136.243.197.100
# Host 136.243.197.100 found: line 45
/home/test/.ssh/known_hosts updated.
Original contents retained as /home/test/.ssh/known_hosts.old


WTF?发生了什么事?
从服务器学到的新的新密钥再次失败了?
问题甚至切换了?!?

不是,不是密钥,也不是服务器。一切都正确!
ssh客户端无法验证正确的密钥!
现在,45中的条目known_hosts带有ecdsa-sha2-nistp256类型的密钥,而从客户端从服务器拉出的密钥是rsa-sha2-512类型(因此无法与其他密钥匹配!)。
$ sftp test@gcopy.net
Warning: Permanently added the ECDSA host key for IP address '136.243.197.100' to the list of known hosts.
Connected to test@gcopy.net.

$ sftp test@valentin.hilbig.de
Warning: the RSA host key for 'valentin.hilbig.de' differs from the key for the IP address '136.243.197.100'
Offending key for IP in /home/test/.ssh/known_hosts:45
Matching host key in /home/test/.ssh/known_hosts:10
Are you sure you want to continue connecting (yes/no)? 

显示:
$ sftp -v test@valentin.hilbig.de


debug1: kex: host key algorithm: rsa-sha2-512

显示:应对存在多个变体的主机密钥!
或者落入陷阱以请求过时的密钥变体。

如何解决?
我真的有不知道。这可能只能在上游修复。
但是有一个手动但笨拙的解决方法:
您必须手动删除ssh类型的旧密钥的所有痕迹。有问题的密钥显示在输出中,但没有直接标记为问题:
$ sftp -v test@gcopy.net

检查:
debug1: kex: host key algorithm: ecdsa-sha2-nistp256

给出了
Warning: the RSA host key for 'valentin.hilbig.de' differs from the key for the IP address '136.243.197.100'
Offending key for IP in /home/test/.ssh/known_hosts:45
Matching host key in /home/test/.ssh/known_hosts:10

因此,这里匹配的主机密钥是有问题的密钥,而有问题的密钥是必须保留的正确密钥!因此,让我们消除错误的(匹配项)之一:
awk 'NR==45 { print  }' /home/test/.ssh/known_hosts
awk 'NR==10 { print  }' /home/test/.ssh/known_hosts

现在再次检查:
ecdsa-sha2-nistp256
ssh-rsa

是的!问题终于消失了。但是在rsa中有几百个条目,此“解决方案”实际上成为了主要的PITA(以及Elm街上容易出错的安全梦Night。)。

评论


WINDOWS 10:-只需删除文件“ C:\ Users \ svkvi \ .ssh \ known_hosts”的内容。

– Vikram S
10月15日16:03

@VikramS谢谢,编辑

– Tino
10月18日上午11:08