ssh:无法建立主机“主机名”的真实性

时间:2010-09-08 01:04:28

标签: ssh ssh-keys fingerprint rsa-key-fingerprint

当我ssh到一台机器时,有时我会收到此错误警告,并提示说“是”或“否”。从自动ssh到其他计算机的脚本运行时会出现问题。

警告讯息:

The authenticity of host '<host>' can't be established.
ECDSA key fingerprint is    SHA256:TER0dEslggzS/BROmiE/s70WqcYy6bk52fs+MLTIptM.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'pc' (ECDSA) to the list of known hosts.

有没有办法自动说“是”或忽略这个?

18 个答案:

答案 0 :(得分:115)

根据您的ssh客户端,您可以在命令行上将StrictHostKeyChecking选项设置为no,和/或将密钥发送到null known_hosts文件。您还可以在配置文件中为所有主机或给定的IP地址或主机名设置这些选项。

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no

修改

正如@IanDunn所说,这样做存在安全隐患。如果您连接的资源已被攻击者欺骗,他们可能会将目标服务器的挑战重播给您,这让您误以为您正在连接到远程资源,而实际上他们正在连接到该资源你的凭据。在更改连接机制以跳过HostKeyChecking之前,您应该仔细考虑是否存在适当的风险。

Reference

答案 1 :(得分:67)

值得更好回答的老问题。

您可以在不禁用StrictHostKeyChecking(这是不安全的)的情况下阻止交互式提示。

将以下逻辑合并到您的脚本中:

if [ -z `ssh-keygen -F $IP` ]; then
  ssh-keyscan -H $IP >> ~/.ssh/known_hosts
fi

它检查服务器的公钥是否在known_hosts中。如果没有,它会从服务器请求公钥并将其添加到known_hosts

通过这种方式,您只会遭受一次中间人攻击,这可以通过以下方式减轻:

  • 确保脚本首次通过安全通道连接
  • 检查日志或known_hosts以手动检查指纹(仅执行一次)

答案 2 :(得分:33)

要禁用(或控制停用),请将以下行添加到/etc/ssh/ssh_config的开头......

Host 192.168.0.*
   StrictHostKeyChecking=no
   UserKnownHostsFile=/dev/null

选项:

  • 主机子网可以是*,以允许不受限制地访问所有IP。
  • 编辑/etc/ssh/ssh_config进行全局配置,或~/.ssh/config进行用户特定配置。

请参阅http://linuxcommando.blogspot.com/2008/10/how-to-disable-ssh-host-key-checking.html

在superuser.com上的类似问题 - 请参阅https://superuser.com/a/628801/55163

答案 3 :(得分:15)

确保~/.ssh/known_hosts可写。这为我解决了。

答案 4 :(得分:11)

最好的方法是使用&#39; BatchMode&#39;除了'StrictHostKeyChecking&#39;。这样,您的脚本将接受新的主机名并将其写入known_hosts文件,但不会要求是/否干预。

ssh -o BatchMode=yes -o StrictHostKeyChecking=no user@server.example.com "uptime"

答案 5 :(得分:10)

编辑通常位于&#39;〜/ .ssh / config&#39;的配置文件,并在文件的开头添加以下行

Host *
    User                   your_login_user
    StrictHostKeyChecking  no
    IdentityFile          ~/my_path/id_rsa.pub

用户设置为your_login_user表示此设置属于your_login_user
StrictHostKeyChecking设置为no将避免提示
IdentityFile是RSA密钥的路径

这适用于我和我的剧本,祝你好运。

答案 6 :(得分:6)

由于安全功能而发出此警告,请勿停用此功能。

它只显示一次。

如果在第二次连接后仍然出现,则问题可能是写入known_hosts文件。 在这种情况下,您还会收到以下消息:

Failed to add the host to the list of known hosts 

您可以通过更改用户可以更改文件权限的所有者来修复此问题。

sudo chown -v $USER ~/.ssh/known_hosts

答案 7 :(得分:4)

参考Cori的回答,我修改了它并使用了下面的命令,这是有效的。没有exit,剩下的命令实际上是登录到远程机器,我在脚本中并不想要

ssh -o StrictHostKeyChecking=no user@ip_of_remote_machine "exit"

答案 8 :(得分:2)

通常,在经常修改密钥时会出现此问题。基于服务器,可能需要一些时间来更新您在服务器中生成并粘贴的新密钥。因此,在生成密钥并粘贴到服务器后,等待3到4个小时然后尝试。问题应该解决。它发生在我身上。

答案 9 :(得分:2)

这样做 - &gt; ~/.ssh/known_hosts。这会在known_hosts处为文件添加写入权限。之后,当您下次连接到远程主机时,它将被添加到{{1}}文件中。

答案 10 :(得分:1)

理想情况下,您应该创建自我管理的证书颁发机构。从生成密钥对开始: ssh-keygen -f cert_signer

然后签署每个服务器的公共主机密钥: ssh-keygen -s cert_signer -I cert_signer -h -n www.example.com -V +52w /etc/ssh/ssh_host_rsa_key.pub

这会生成签名的公共主机密钥: /etc/ssh/ssh_host_rsa_key-cert.pub

/etc/ssh/sshd_config中,将HostCertificate指向此文件: HostCertificate /etc/ssh/ssh_host_rsa_key-cert.pub

重启sshd服务: service sshd restart

然后在SSH客户端上,将以下内容添加到~/.ssh/known_hosts @cert-authority *.example.com ssh-rsa AAAAB3Nz...cYwy+1Y2u/

以上内容包含:

  • @cert-authority
  • *.example.com
  • 公钥cert_signer.pub
  • 的完整内容

cert_signer公钥将信任其公共主机密钥由cert_signer私钥签名的任何服务器。

虽然这需要在客户端进行一次性配置,但您可以信任多个服务器,包括那些尚未配置的服务器(只要您签署每个服务器,就是这样)。

有关详细信息,请参阅this wiki page

答案 11 :(得分:0)

将它们添加到您的/ etc / ssh / ssh_config

Host *
UserKnownHostsFile=/dev/null
StrictHostKeyChecking=no

答案 12 :(得分:0)

我遇到了同样的错误,并想提请您注意-就像我刚发生的那样-您可能拥有错误的权限。
您已经将.ssh目录设置为常规用户或root用户,因此您需要成为正确的用户。出现此错误时,我是root,但我将.ssh配置为普通用户。退出root可以解决此问题。

答案 13 :(得分:0)

以下步骤用于向主机进行身份验证

  1. 生成一个ssh密钥。系统将要求您为密钥创建密码
ssh-keygen -f ~/.ssh/id_ecdsa -t ecdsa -b 521

(以上使用推荐的加密技术)

  1. 将密钥复制到远程主机
ssh-copy-id -i ~/.ssh/id_ecdsa user@host

N.B用户@主机将与您不同。您需要输入此服务器的密码,而不是密钥密码。

  1. 您现在可以安全地登录服务器,而不会收到错误消息。
ssh user@host

所有源信息都位于此处: ssh-keygen

答案 14 :(得分:0)

在我的情况下,主持人是未知的,而不是在问题yes中输入are you sure you want to continue connecting(yes/no/[fingerprint])?,而我只是打enter

答案 15 :(得分:0)

这是尝试建立无密码身份验证。因此,如果您尝试手动运行该命令一次,它会要求在那里提供密码。输入密码后,它会永久保存该密码,并且不再要求输入“是”或“否”。

答案 16 :(得分:-1)

在主机服务器上运行它是先发问题

chmod -R 700 ~/.ssh

答案 17 :(得分:-2)

我解决了下面写错误的问题:
错误:
无法建立主机'XXX.XXX.XXX'的真实性 RSA密钥指纹是09:6c:ef:cd:55:c4:4f:ss:5a:88:46:0a:a9:27:83:89。

解决方案:
1.安装任何openSSH工具。
2.运行命令ssh
3.它会要求你添加这个主机。    接受是。
4.此主机将添加已知的主机列表 5.现在您可以与此主机联系。

此解决方案现在正在运作......