SSH连接问题“主机密钥validation失败…”错误
我可以通过SSH连接到局域网中的另一台Ubuntu机器。 在那两台PC上我安装了openssh-server,但是从另一台Ubuntu计算机上我无法通过SSH连接到我的PC,我收到了这个错误:
主机密钥validation失败…
“主机密钥validation失败”表示远程主机的主机密钥已更改。
SSH将远程主机的主机密钥存储在~/.ssh/known_hosts
。 您可以手动编辑该文本文件并删除旧密钥(您可以在错误消息中看到行号),或使用
ssh-keygen -R hostname
(我从答案中了解到是否可以从SSH的known_hosts文件中删除特定的主机密钥? )。
如果您在缺少对prompt-to-add-hostkey的交互式访问的某些远程/脚本编写情况下运行,请按以下方式解决此问题:
$ ssh -o StrictHostKeyChecking=no user@something.example.com uptime
警告:永久性地将“something.example.com,10.11.12.13”(RSA)添加到已知主机列表中。
有时也会出现在串行控制台上工作的情况,然后在详细模式下检查上面的命令-v
会显示/dev/tty
不存在,而它确实存在。
ssh -v user@hostname
在上面的例子中,只需删除/dev/tty
并在/dev/tty
创建/dev/ttyS0
的符号链接。
rm /dev/tty ln -s /dev/ttyS0 /dev/tty
作为替代方案,将id_rsa.pub
添加到远程位置,因此不会提示密码,您将获得登录访问权限。
在我的情况下,这是由udev问题引起的 – 没有/dev/tty
设备节点。 我的解决方案只是:
sudo mknod -m 666 /dev/tty c 5 0
在终端上:
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
好吧,这只是因为第二个ubuntu需要通过密钥连接而不是密码。
我建议你在你的电脑上使用sudo dpkg-reconfigure openssh-server
,然后它应该正常工作。 它将重置openssh的配置,并应返回默认密码身份validation。
第二种可能性是,你的PC中已有一个关键用于你的其他ubuntu,并且它已经改变,因此不再被识别。 在这种情况下,您必须编辑文件.ssh/authorized_keys
以删除标识您的ubuntu的有问题的行。
这是一个老线程,我刚刚回答了这个问题,我将添加我所做的解决这个问题。
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权限。
你必须通过在目标上运行它来将目标主机的rsa密钥放入源主机/home/user/.ssh/known_hosts
ssh-keyscan -t rsa @targethost
pico ~/.ssh/known_hosts
并删除所有行,重新连接后,您将获得一个新密钥。
我的解决方案来自这篇博客文章: 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
基本上你尝试了不同的解决方案,直到你找到一个可以解决你的问题。 如果上述解决方案不起作用,请尝试这个。 如果这个不起作用,请尝试其他人。
只需在〜/ .ssh / config中禁用严格的主机密钥检查:
Host * StrictHostKeyChecking no