SSH 主机密钥无法识别

SSH 主机密钥无法识别

在我的新托管提供商处,他们允许我的帐户使用 SSH,但他们只向我发送端口、服务器地址、用户名、密码,但没有密钥。

当我尝试使用 PuTTY 登录时,它会登录,但我收到屏幕截图上显示的警告。我可以跳过该消息并继续,然后 PuTTY 会登录并且我可以完成我的工作。我想使用 SSH 上传我的数据库。以这种方式使用它是否安全,或者我应该跳过此托管并选择另一个托管?

在此输入图像描述

答案1

当您第一次通过 SSH 连接到服务器时,此警告是正常的。 SSH还不知道服务器的公钥,因此它会提示您是否应该认为它有效。除非您有理由怀疑您的连接被拦截或者您连接到了错误的服务器,否则您可以安全地接受它。您还可以要求您的托管提供商确认服务器的公钥,但这对我来说似乎有点过分了。

接下来,当您连接到同一台服务器时,SSH 将检查其公钥以确保其身份,并在密钥发生更改时向您发出警告,因为这可能意味着 MITM 攻击。 (实际上,更多情况下,这仅意味着系统管理员已为服务器生成了新的密钥对。)

另请注意,您的 ISP 没有给您密钥是正常的;如果您想设置 pubkey 身份验证(并删除基于密码的身份验证,这是一个好主意),您应该通过生成密钥对自己完成此操作。这样您将成为私钥的唯一所有者。

答案2

SSH 使用主机密钥来验证特定计算机为了确保您不是受害者中间人攻击。主机密钥通常是在计算机上安装 SSH 时自动生成的,因此如果重新安装计算机(或者由于某种原因管理员通过更改它ssh-keygen),主机密钥可能会更改。

SSH 客户端将创建“已知”远程主机的本地数据库,其中存储属于哪台计算机的 SSH 主机密钥,其中计算机通过其 FQDN 或 IP 地址进行标识。在 Linux 中,这通常是.ssh/known_hosts用户主目录中的文件;在 Windows 下,PuTTY将其存储在注册表项中。如果在联系时,远程主机提供的主机密钥与本地数据库中的条目不匹配,SSH 客户端将发出警告,以便您可以决定是否要继续联系该计算机(例如,因为您怀疑中间人攻击)。

现在,在第一次联系时,远程主机的主机密钥尚未存储在您的本地数据库中。因此,客户端无法知道该计算机是否实际上是“正确的计算机”。很可能是这样,因此它为您提供了一个选项来信任所提供的密钥并将其存储为该计算机的所有进一步连接的权威身份验证(如果您信任该主机...)。如果您知道由指纹识别的主机密钥,对应您要连接的计算机,您可以单击“是”并将主机密钥存储在本地数据库中。对于所有进一步的连接,SSH 客户端将检查主机密钥是否仍然相同,如果是,则不会再发出警告。

真正“确定”主机密钥是否正确的唯一方法是联系托管提供商并要求他们告诉您计算机主机密钥的指纹。

正如 @Ginnungagap 在评论中指出的,有多种方法可以“发布”SSH 主机密钥,例如SSHFP 记录或者SSH 主机证书,但 PuTTY 最近才添加了对证书的支持,但对于 SSHFP 来说还没有。

相关内容