Ssh: 无法确定主机“ hostname”的真实性

当我 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.

有没有一种方法可以自动说“是”或忽略这一点?

383143 次浏览

根据 ssh 客户机的不同,可以在命令行上将 StrictHostKeyChecking 选项设置为 no,或者将密钥发送到 null known _ hosts 文件。还可以在配置文件中为所有主机或给定的一组 IP 地址或主机名设置这些选项。

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

剪辑

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

参考

通常,当您经常修改键时会出现这个问题。根据服务器,可能需要一些时间来更新您在服务器中生成并粘贴的新密钥。因此,在生成密钥并粘贴到服务器之后,等待3到4个小时,然后尝试。这个问题应该得到解决。我也经历过。

若要禁用(或控件禁用) ,请在 /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

我解决了以下书面错误的问题:
错误:
主持人“ XXX. XXX. XXX”的真实性无法确定。
RSA 密钥指纹是09:6 c: ef: cd: 55: c4:4f: ss: 5a: 88:46:0 a: a9:27:83:89。 < br/>

解决方案:
1. 安装任何 openSSH 工具。
运行命令 ssh
3. 它会询问你是否添加这个主机,如。 接受。
4. 此主机将添加已知主机列表。
现在你可以连接到这个主机了

这个解决方案现在起作用了... ..。

确保 ~/.ssh/known_hosts是可写的,这就解决了我的问题。

实现这一点的最佳方法是除了使用“ StrictHostKeyChecking”之外,还使用“ BatchMode”。这样,您的脚本将接受一个新的主机名并将其写入 known _ hosts 文件,但不需要是/否干预。

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

这个老问题值得更好的回答。

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

在你的剧本中融入以下逻辑:

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

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

这样,你只会接触到一次中间人攻击,可以通过以下方法减轻:

  • 确保脚本第一次通过安全通道连接
  • 检查日志或 known _ hosts 手动检查指纹(只做一次)

编辑通常位于“ ~/. ssh/config”的配置文件,并在文件的开头添加以下几行

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

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

这对我和我的剧本都有效,祝你好运。

此警告是由于安全特性而发出的,不要禁用此特性。

只展示一次。

如果它在第二次连接之后仍然出现,那么问题可能是写入到 known_hosts文件中。 在这种情况下,你还会得到以下信息:

Failed to add the host to the list of known hosts

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

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

这样做-> chmod +w ~/.ssh/known_hosts。这将向位于 ~/.ssh/known_hosts的文件添加写权限。在此之后,当您下次连接到远程主机时,它将被添加到 known_hosts文件中。

根据 Cori 的回答,我修改了它,并使用了以下命令,它正在工作。在没有 exit的情况下,剩下的命令实际上是将日志记录到远程计算机,这在脚本中是不需要的

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

理想情况下,您应该创建一个自我管理的证书颁发机构: Ssh-keygen-f cert _ signer

然后签署每个服务器的公共主机密钥: Ssh-keygen-s cert _ signer-I cert _ signer-h-n www.example.com-V + 52 w/etc/ssh/ssh _ host _ rsa _ key. pub

这将生成一个已签名的公共主机密钥: /etc/ssh/ssh _ host _ rsa _ key-cert. pub

/etc/ssh/sshd_config中,将 HostCertificate指向这个文件: 主机证书/etc/ssh/ssh _ host _ rsa _ key-cert. pub

重新启动 sshd 服务: 服务重新启动

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

以上内容包括:

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

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

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

有关详细信息,请参阅 这个维基页面

在主机服务器上运行这个是预感问题

chmod -R 700 ~/.ssh

将它们添加到/etc/ssh/ssh _ config 中

Host *
UserKnownHostsFile=/dev/null
StrictHostKeyChecking=no

我也犯了同样的错误,希望提醒大家注意这样一个事实: 就像刚刚发生在我身上的那样,你可能只是拥有了错误的特权。< br > 您已经将 .ssh目录设置为常规用户或 root用户,因此您需要成为正确的用户。出现这个错误时,我是 root,但是我将 .ssh配置为常规用户。从 root出口修好了。

下面的步骤用于向主机验证您自己

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

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

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

注意,user@host 对你来说是不同的。您需要输入此服务器的密码,而不是密钥密码。

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

所有信息来源请点击这里: Ssh-keygen

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

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

对我来说,原因是我有 错误的许可~/.ssh/known_hosts

我对 known_hosts文件没有写权限,所以它一次又一次地问我。

如果有人发现了这个问题,只是想在第一次连接时阻止提示符的出现,但是仍然希望 ssh在后续连接中严格检查键(信任第一次使用时) ,那么可以在 ~/.ssh/config中将 StrictHostKeyChecking设置为 accept-new,这将完成您所需要的工作。你可以在 man ssh_config阅读更多关于它的内容。我强烈反对完全禁用密钥检查。