我可以通过SSH连接到局域网中的另一台Ubuntu计算机。在当时的两台PC上,我都安装了openssh-server, 但是从另一台Ubuntu计算机上,我无法通过SSH连接到PC,但出现此错误:
主机密钥验证失败...
ssh
通过命令行执行任何操作。
我可以通过SSH连接到局域网中的另一台Ubuntu计算机。在当时的两台PC上,我都安装了openssh-server, 但是从另一台Ubuntu计算机上,我无法通过SSH连接到PC,但出现此错误:
主机密钥验证失败...
ssh
通过命令行执行任何操作。
Answers:
“主机密钥验证失败”表示远程主机的主机密钥已更改。
SSH将远程主机的主机密钥存储在中~/.ssh/known_hosts
。您可以手动编辑该文本文件并删除旧键(您可以在错误消息中看到行号),也可以使用
ssh-keygen -R hostname
从手册页:
-R主机
名从known_hosts文件中删除所有属于主机名的键。此选项对于删除散列主机很有用。
(这是我从“ 是否可以从SSH的known_hosts文件中删除特定主机密钥?”的答案中学到的 。)
rm ~/.ssh/*
,则ssh -o BatchMode=yes root@somewhere
,如果没有其他问题,我将得到Host key verification failed.
不重要信息,如果您始终处于交互状态,但与遇到相同错误的脚本相关。
ssh-keygen -R example.net:7999
产量Host example.net:7999 not found in known_hosts
。
known_hosts
文件并再次ssh。有效。
~/.ssh/known_hosts
不可读
如果您在某些远程/脚本化情况下运行,而您对交互式提示添加主机键缺乏交互访问,请按照以下方法解决:
$ ssh -o StrictHostKeyChecking=no user@something.example.com uptime
警告:将“ something.example.com,10.11.12.13”(RSA)永久添加到已知主机列表中。
sh """ssh -o StrictHostKeyChecking=No ec2-user@someIpAddress-e2e sudo service tomcat restart"""
在终端上:
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
command-line line 0: Bad yes/no/ask argument.
因为您错误地将“否”而不是“否”用作论点StrictHostKeyChecking
这是一个旧线程,我只是碰到了这个答案,所以我将添加为解决这个问题所做的事情。
ssh-keygen -f "/home/USER/.ssh/known_hosts" -R HOSTNAME
我只是看了一下它扔给我的错误消息,并说要运行该命令以便将其从主机列表中删除。之后,我执行了以下操作:
ssh-copy-id HOSTNAME
然后,我从那里按照提示进行操作,直到能够进入服务器。
这意味着您的远程主机密钥已更改(可能是主机密码更改),
您的终端建议以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
希望这行得通。
您应该以这种方式更改密钥:例如,从给定的错误中查找哪个主机密钥已更改:在/Users/user-name/.ssh/known_hosts:5中,违反ECDSA密钥的表示,第5个密钥已更改,因此请执行以下操作:
sed -i '5d' ~/.ssh/known_hosts
注意:您必须是root或具有sudo的特权。
当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':
然后输入您的密码。
请注意“确定要继续连接(是/否)吗?是 ”。您必须输入是,而不是输入。
pico ~/.ssh/known_hosts
并在重新连接后删除所有行,您将获得一个新密钥。
ssh-keygen -R hostname
更好。
我的解决方案来自此博客文章:SSH Secure Shell Client的算法协商失败
您需要修改文件,如下所示:
sudo nano /etc/ssh/sshd_config
然后添加以下内容:
# Ciphers
Ciphers aes128-cbc,aes192-cbc,aes256-cbc,blowfish-cbc,arcfour
KexAlgorithms diffie-hellman-group1-sha1
基本上,您尝试了不同的解决方案,直到找到可以解决问题的解决方案。如果上述解决方案不起作用,请尝试此解决方案。如果此方法无法正常运行,请尝试其他方法。
只需执行“ 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 /中违反ECDSA密钥root / .ssh / known_hosts:74)。从known_hosts删除该行,保存更改并重新连接。