,但是从另一台Ubuntu计算机上,我无法通过SSH连接到PC,但出现此错误:
主机密钥验证失败...
#1 楼
“主机密钥验证失败”表示远程主机的主机密钥已更改。SSH将远程主机的主机密钥存储在
~/.ssh/known_hosts
中。您可以手动编辑文本文件并删除旧键(您可以在错误消息中看到行号),也可以使用ssh-keygen -R hostname
从手册页:
-R主机名从known_hosts文件中删除所有属于主机名的键。此选项对删除散列的主机很有用。
(我从答案中了解到
是否可以从SSH的known_hosts文件中删除特定的主机密钥?)。 br />
评论
这也可能意味着您根本没有远程主机的主机密钥。例如,如果我rm〜/ .ssh / *,则ssh -o BatchMode = yes root @ somewhere,如果没有其他错误,我将获得主机密钥验证失败。如果您始终处于交互状态,则不重要,但与遇到相同错误的脚本相关。
–罗恩·伯克(Ron Burk)
17年4月25日在23:19
毫不奇怪,ssh-keygen -R example.net:7999会生成在known_hosts中找不到的host example.net:7999。
– alex
18年2月12日在18:35
我删除了known_hosts文件,然后再次使用了ssh。有效。
–巴黎
18年6月6日在10:49
〜/ .ssh / known_hosts文件不可读
–JoãoPimentel Ferreira
19年8月5日在17:03
奇迹般有效。主机名也可以是IP地址。谢谢!
– Pieter
20 May 10 '14:26
#2 楼
如果您在某些远程/脚本化情况下运行,而您对交互式提示添加主机键缺乏交互访问权限,请按以下方法解决:$ ssh -o StrictHostKeyChecking=no user@something.example.com uptime
警告:将“ something.example.com,10.11.12.13”(RSA)永久添加到已知主机列表。
评论
+1,这是一个丑陋的解决方案,但是在某些与动态IP连接设备配合使用的自动监视过程中,这是一个简单且可以接受的解决方案。
– Ninsuo
13年11月11日14:34
+1例如,对于Jenkins处决,这是一个很好的解决方案。谢谢
–路宝
2015年2月5日在10:02
@Lobo完全不同意,我将它用于jenkins,这很酷sh“”“ ssh -o StrictHostKeyChecking =否ec2-user @ someIpAddress-e2e sudo服务tomcat重新启动”“”
– prayagupd
17年6月8日在21:40
救了我。救生员解决方案。
–user1735921
17-10-12在6:43
救了我。我遇到了作为系统服务运行的脚本的麻烦。当我查看日志时,我的脚本总是打印此错误。当我使用此选项在脚本内启动ssh时,再也不会出现此错误。
– Mubin Icyer
20年9月1日于13:35
#3 楼
另外有时在串行控制台上工作时会出现这种情况,然后在详细模式下检查以上命令-v
会显示/dev/tty
不存在,而实际上却不存在。在上述情况下,只需删除/dev/tty
并创建/dev/ttyS0
到/dev/tty
的符号链接。ssh -v user@hostname
作为替代方案,将
id_rsa.pub
添加到远程位置,这样就不会提示输入密码,并且您获得登录权限。评论
+1建议使用-v参数;在调试ssh问题时,这可以有很大帮助。
–丹尼尔·库尔曼
2012年7月24日19:10
#4 楼
以我为例,这是由udev问题引起的-没有/dev/tty
设备节点。对我来说,解决方案是:sudo mknod -m 666 /dev/tty c 5 0
#5 楼
在终端上:ssh -o StrictHostKeyChecking=no -i YourPublicKey.pem user@example.com uptime
将出现以下消息或类似消息:
Warning: Permanently added 'example.com, XX.XXX.XXX.XX' (ECDSA) to the list of known hosts.
00:47:37 up 3 min, 0 users, load average: 0.00, 0.00, 0.00
然后连接您的EC2正常运行:
ssh -i YourPublickey.pem user@example.com
评论
我收到了命令行第0行:是/否/询问参数错误。因为您错误地将“ No”而不是“ no”用作StrictHostKeyChecking的参数
– Axel Bregnsbo
18年8月25日在15:30
#6 楼
当ssh确认您要继续连接时,可能只需要输入“是”即可。像下面这样。
The authenticity of host 'xxx' can't be established.
ECDSA key fingerprint is yyy.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'xxx' (ECDSA) to the list of known hosts.
Enter passphrase for key '/Users/ysy/.ssh/id_rsa':
,然后输入密码。
请注意“确定要继续连接(是/否)吗?是”。您必须输入是,而不是输入。
评论
哇。我不敢相信这行得通。大声笑。我一直按Enter键。输入yes的指令应该更明确
– Emmanuel N K
20年6月18日在8:52
#7 楼
好吧,这仅仅是因为第二个ubuntu需要通过密钥而不是密码进行连接。我建议您在PC上使用
sudo dpkg-reconfigure openssh-server
,然后它应该可以正常工作。它将重置openssh的配置,并应返回到默认的密码身份验证。第二种可能性是您的PC中已经存在另一个ubuntu的密钥,并且它已更改,因此不再被识别。在这种情况下,您必须编辑文件.ssh/authorized_keys
,以删除有问题的行来标识您的Ubuntu。#8 楼
这是一个旧线程,我遇到了这个答案,我将添加为解决此问题所做的工作。ssh-keygen -f "/home/USER/.ssh/known_hosts" -R HOSTNAME
我只是看着它的错误消息扔给我,它说要运行该命令以便将其从主机列表中删除。之后,我执行以下操作:
ssh-copy-id HOSTNAME
然后我按照提示从那里进行操作,直到可以SSH进入服务器。
评论
作为此命令,我在ubuntu 12.4中得到了建议。
–MaNKuR
15年5月31日在18:09
#9 楼
您应该以这种方式更改密钥:从给定的错误中查找为
更改的主机密钥示例:在/Users/user-name/.ssh/known_hosts:5
更改了第5个密钥,请执行以下操作:
sed -i '5d' ~/.ssh/known_hosts
注意:您必须是root用户或具有sudo特权。
评论
不,除非您正在为其他人这样做,否则它不需要root或sudo。您正在编辑主目录中的文件。第二:要使该命令起作用,需要GNU sed。
– techraf
16年3月13日在16:00
也许是正确的,但是我尝试从Mac OSX切换到ubuntu-server,我必须这样做。顺便说一句,谢谢您的评论。
– Amir.A.G
16-3-14在16:44
#10 楼
这意味着您的远程主机密钥已更改(可能是主机密码更改),您的终端建议以root用户身份执行此命令
$ ssh-keygen -f "/root/.ssh/known_hosts" -R [www.website.net]:4231
您必须从PC /服务器上的主机列表中删除该主机名。复制建议的命令并以root用户身份执行。
$ sudo su // Login as a root user
$ ssh-keygen -f "/root/.ssh/known_hosts" -R [www.website.net]:4231 // Terminal suggested command execute here
Host [www.website.net]:4231 found: line 16 type ECDSA
/root/.ssh/known_hosts updated.
Original contents retained as /root/.ssh/known_hosts.old
$ exit // Exist from root user
$ sudo ssh root@www.website.net -p 4231 // Try again
希望这项工作有效。
#11 楼
您必须通过在目标上运行目标主机来将目标主机的rsa密钥放入源主机/home/user/.ssh/known_hosts
ssh-keyscan -t rsa @targethost
#12 楼
除了严格禁用主机密钥检查以外,还可以通过键入以下内容进行连接:ssh -o LogLevel=quiet -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no <username@target_machine_ip_or_domain_name>
#13 楼
只需执行“ sudo vi /var/root/.ssh/known_hosts”并删除该行即可,该行为您要连接的主机提供了密钥,然后再次重新连接。我不知道您的特定情况,但是最有可能出现此错误,并显示以下消息:
my_mac:~ oivanche$ sudo ssh pi@192.168.0.45
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ 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 ECDSA key sent by the remote host is
SHA256:sx1Z4xyGY9venBP6dIHAoBj0VhDOo7TUVCE2xWXpzQk.
Please contact your system administrator.
Add correct host key in /var/root/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /var/root/.ssh/known_hosts:74
ECDSA host key for 192.168.0.45 has changed and you have requested strict checking.
Host key verification failed.
如果您仔细阅读日志,将会看到您从主机获得的密钥与您已经拥有的密钥发生冲突-在这种情况下,它位于known_hosts文件的第74行(/var/root/.ssh/known_hosts:74中违反ECDSA密钥)。
从已知主机中删除线路,保存更改并重新连接。
评论
这帮助了我-谢谢
– Karan Desai
19/12/3在14:19
#14 楼
pico ~/.ssh/known_hosts
并删除所有行,只需重新连接后,您将获得一个新密钥。评论
这是一个危险的解决方案,因为您将删除所有主机密钥。可接受的解决方案ssh-keygen -R主机名更好。
–麦桑福德
2014年3月24日20:52
#15 楼
我的解决方案来自此博客文章:SSH安全Shell客户端的算法协商失败您需要按如下所示修改文件:
sudo nano /etc/ssh/sshd_config
然后添加以下内容:
# Ciphers
Ciphers aes128-cbc,aes192-cbc,aes256-cbc,blowfish-cbc,arcfour
KexAlgorithms diffie-hellman-group1-sha1
基本上,您尝试了不同的解决方案,直到找到可以解决问题的解决方案。如果上述解决方案不起作用,请尝试此解决方案。如果此方法无法正常运行,请尝试其他方法。
#16 楼
如果将-v
选项添加到ssh(可能不止一次),它将打印各种内容,这可能有助于识别问题。就我而言,它抱怨/dev/tty
权限,而chmod 666 /dev/tty
解决了该问题。#17 楼
chmod 666 /dev/tty
是另一种tty解决方案-有时,该设备文件具有错误的权限。
评论
您使用主机名还是IP地址?不相似,但由于出现不同的问题,我遇到了相同的错误:serverfault.com/questions/494916/…
这不是Ubuntu特有的问题。可以通过命令行中的任何ssh发生。