SSH:无法建立主机<host>的真实性

Ste*_* Lu 110 security encryption ssh

这个消息是什么意思?这是一个潜在的问题吗?渠道不安全?

或者这只是连接到新服务器时始终显示的默认消息?

过去我在使用 SSH 时经常看到这条消息:我总是以正常方式使用密码输入我的登录名,我感觉很好,因为我没有使用私钥/公钥(这更安全而不是短密码)。但是这次我已经为我与 bitbucket 的连接设置了一个带有 ssh 的公钥,但我仍然收到了消息。我知道最后的密码提示是一种不同的补充安全措施,用于解密私钥。

我希望有人可以对“无法确定真实性”消息的含义做出很好的解释。

The authenticity of host 'bitbucket.org (207.223.240.181)' can't be established.

RSA key fingerprint is 97:8c:1b:f2:6f:14:6b:5c:3b:ec:aa:46:46:74:7c:40.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'bitbucket.org,207.223.240.181' (RSA) to the list of
known hosts.
Enter passphrase for key '/c/Users/Steven/.ssh/id_rsa':
Run Code Online (Sandbox Code Playgroud)

Ben*_*igt 94

它告诉您以前从未连接到此服务器。如果你期待,这是完全正常的。如果您有疑虑,请使用备用通道验证密钥的校验和/指纹。(但请注意,可以重定向 ssh 连接的人也可以重定向 Web 浏览器会话。)

如果您之前已通过此 ssh 安装连接到此服务器,则该服务器已使用新密钥重新配置,或者有人在欺骗服务器的身份。由于中间人攻击的严重性,它警告您这种可能性。

无论哪种方式,您都拥有通往某人的安全加密通道。没有指纹对应的私钥,任何人97:8c:1b:f2:6f:14:6b:5c:3b:ec:aa:46:46:74:7c:40都无法解码您发送的内容。

您用来验证自己的密钥是不相关的……您不希望将验证信息发送到可能会窃取它的欺诈服务器,因此您不应该期望根据您是要使用密码还是要使用密码而做出任何更改用于登录的私钥。你只是在这个过程中还没有走那么远。

  • @Steven:你没有把你的公钥发给他,他已经有了。你正在做的是使用你的私钥来验证一个挑战……如果他连接到 *real* bitbucket.org 声称是你,收到了真正的挑战,并在挑战你时使用了这个挑战,那么他就可以愚弄您向他发送有效回复,然后他使用该回复访问您在真实 bitbucket.org 上的帐户。他仍然没有您的私钥,因此他无法在以后的任何时间登录,也无法登录密钥解锁的任何其他资源,但他确实有一个登录会话。 (12认同)
  • “如果您有疑虑,请使用备用通道验证密钥的校验和/指纹。” 对于偏执狂(和记录),github 的指纹在 https://help.github.com/articles/generating-ssh-keys 上,bitbucket 在 https://confluence.atlassian.com/display/BITBUCKET/ 中提到Use+the+SSH+protocol+with+Bitbucket#UsetheSSHprotocolwithBitbucket-KnownhostorBitbucket%27spublickeyfingerprints (3认同)
  • @BenVoigt 是的,我明白,真正的偏执狂当然会通过不同的无关网络访问这些页面,或者可能会飞到 github 总部亲自获取指纹:) (3认同)

小智 37

假设您遇到某人交换一些商业秘密。您的顾问告诉您,您以前从未见过那个人,而且他可能是个冒名顶替者。此外,下次与他会面时,您的顾问将不再警告您。这就是消息的意思。该人是远程服务器,您的顾问是 ssh 客户端。

我不认为在与她分享秘密之前仔细检查这个人的身份是偏执的。例如,您可以打开一个带有她照片的网页,并将其与您面前的面孔进行比较。或者检查她的身份证。

对于 bitbucket 服务器,您可以使用不同的、更受信任的计算机并从中获取其面部图片,然后将其与您在当前使用的计算机中获取的图像进行比较。用:

 ssh-keyscan -t rsa bitbucket.org | ssh-keygen -lv -f -
Run Code Online (Sandbox Code Playgroud)

如果面孔匹配,您可以将密钥添加到文件中,例如~/.ssh/known_hosts(许多 Linux 发行版中的标准位置):

ssh-keyscan -t rsa -H bitbucket.org >> ~/.ssh/known_hosts
Run Code Online (Sandbox Code Playgroud)

并且 ssh 客户端不会警告您,因为它已经知道她的脸。它会您连接时比较人。这是非常重要的。在冒名顶替者(例如中间人攻击)的情况下,ssh 客户端将拒绝连接,因为人已经改变。

  • 这应该是公认的答案:`ssh-keyscan -t rsa -H bitbucket.org >> ~/.ssh/known_hosts` 谢谢 Ivan! (6认同)
  • 这个答案很有帮助 (2认同)
  • @Rod:您将根据命令选择接受的答案,该命令既完全不必要(您可以通过在原始警告中输入“yes”来修改“known_hosts”,如问题中所示)又危险(您的关键是添加到您的文件中的内容不一定与您查看的内容相同,因为您提取了两次!)? (2认同)

小智 6

我只需要known_hosts~/.ssh

sudo vim ~/.ssh/known_hosts
sudo chmod 777 ~/.ssh/known_hosts
Run Code Online (Sandbox Code Playgroud)

这样做后,它添加了主机,我再也没有看到该消息。

  • 请不要这样做。可能会造成严重的安全隐患。您的主机文件应该只能由您写入。第二个命令基本上允许您计算机中的任何人欺骗服务器身份。 (7认同)
  • 第二个命令非常危险,不应使用! (3认同)

小智 6

还有另一种简单的方法只需触摸下面的config文件/root/.ssh并添加参数

StrictHostKeyChecking no
Run Code Online (Sandbox Code Playgroud)

下次当您登录服务器时,他们的 RSA 密钥将被添加到known_hosts并且不会要求“是”以进行真实性确认

  • 不建议这样做。这很容易,但不是处理这种情况的正确方法。 (4认同)