如何修复“警告:远程主机标识已更改!”

已发表: 2024-10-16
目录
  • 了解警告
  • 验证服务器的身份
  • 解决方案 1:手动删除旧主机密钥(Windows、Mac、Ubuntu)
  • 解决方案 2:清除整个known_hosts 文件(Windows、Mac、Ubuntu)
  • 解决方案 3:暂时忽略主机密钥检查(Windows、Mac、Ubuntu)
  • 解决方案 4:手动添加新的主机密钥(Windows、Mac、Ubuntu)
  • 解决方案 5:检查 DNS 或 IP 地址更改(Windows、Mac、Ubuntu)
  • 未来避免此问题的最佳实践(Windows、Mac、Ubuntu)
  • 结论

当您尝试使用 SSH 连接到远程服务器时,您可能会遇到错误消息: “警告:远程主机标识已更改!” 。此消息是 SSH 用来保护您免受中间人攻击的安全功能,第三方可能会拦截您与服务器的通信。

简单来说,此警告告诉您服务器的指纹(存储在本地计算机上的唯一标识符)与 SSH 之前记录的不匹配。这可能是合法的更改,例如重新安装服务器或其 IP 地址更改,但也可能表示潜在的安全威胁。 SSH 会阻​​止连接以保护您的系统,直到您验证服务器的真实性。

在本文中,我们将介绍如何在MacUbuntu (Linux)Windows系统上安全地解决此问题,确保您可以继续安全连接,而不会忽略潜在风险。

您可能有兴趣阅读:如何修复错误权限被拒绝(Publickey)

了解警告

为什么会出现警告?

SSH 将远程服务器密钥的指纹存储在本地计算机上名为known_hosts的文件中。此指纹用于验证您每次使用 SSH 时是否连接到同一服务器。如果服务器的指纹发生变化,SSH 会向您显示警告,因为它无法确定服务器的身份是否已合法更改,或者是否有人试图拦截您的连接。

警告的常见场景:

  • 服务器重新安装或升级:如果服务器已重新安装、重置或升级,它可能会生成一个新的 SSH 密钥,该密钥与您的known_hosts文件中存储的密钥不匹配。
  • IP 地址更改:如果服务器的 IP 地址已更改(例如,由于转移到新的托管提供商或网络),SSH 可能会将其标记为可疑更改。
  • DNS 更改:如果服务器的 DNS 记录中有更新或配置错误,SSH 可能会将其解释为不同的服务器。
  • 服务器配置更改:有时,服务器管理员会更改其 SSH 密钥配置,从而导致新密钥与前一个密钥不匹配。
  • 潜在的安全威胁(中间人攻击):该警告可能是有人试图拦截您与服务器的连接的信号。如果您不确定所做的更改,则必须在继续之前验证服务器的身份。

known_hosts文件的作用:

known_hosts文件是 SSH 存储有关您之前连接到的远程主机的信息的位置。该文件通常位于 Mac 和 Ubuntu 上的~/.ssh/目录中,对于 Windows 上的PuTTY用户,它将主机密钥存储在 Windows 注册表中。

验证服务器的身份

在进行任何更改之前,请先解决“远程主机标识已更改!”的问题。 ” 警告,验证服务器的身份是否已合法更改至关重要。此步骤可确保您不会成为中间人攻击的受害者。

为什么应该首先验证服务器的身份

忽略此步骤可能会导致连接到受损或恶意的服务器,这可能会使您的数据或凭据面临风险。请务必认真对待此警告,尤其是当您不确定服务器最近的更改时。

验证服务器身份的步骤:

  • 联系服务器管理员:如果您不是维护服务器的人,请联系管理员或托管提供商,询问最近是否进行了任何更改,例如 IP 地址更改、服务器重新安装或密钥重新生成。
  • 比较主机密钥指纹:使用以下命令手动检查服务器的主机密钥:
     ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub

    输出将显示主机密钥指纹,您可以将其与known_hosts文件中的指纹或服务器管理员请求的指纹进行比较。

解决方案 1:手动删除旧主机密钥(Windows、Mac、Ubuntu)

对于 Mac 和 Ubuntu (Linux):

  1. 打开终端。
  2. 使用文本编辑器打开~/.ssh/known_hosts文件:
     nano ~/.ssh/known_hosts
  3. 搜索与远程服务器的主机名或 IP 地址对应的行。
  4. 删除包含旧主机密钥的行。
  5. 保存文件并关闭文本编辑器。
  6. 使用 SSH 重新连接到服务器:
     ssh <username>@<hostname>

自动删除(Mac 和 Ubuntu):

您可以使用以下命令自动删除旧主机密钥,而不是手动编辑known_hosts文件:

 ssh-keygen -R <hostname or IP>

对于 Windows(使用 PuTTY):

  1. 打开腻子
  2. Windows + R ,输入regedit ,然后按 Enter。
  3. 导航到注册表路径:
     HKEY_CURRENT_USER\Software\Myusername\PuTTY\SshHostKeys
  4. 找到与远程服务器的主机名或 IP 地址关联的条目。
  5. 右键单击该条目并选择删除
  6. 在 PuTTY 中重新连接到服务器,它会提示您接受新密钥。

对于 Windows(使用 Git Bash):

  1. 打开Git Bash
  2. 运行以下命令:
     ssh-keygen -R <hostname>
  3. 下次连接时,SSH 将提示您接受新密钥。

解决方案 2:清除整个known_hosts文件(Windows、Mac、Ubuntu)

对于 Mac 和 Ubuntu (Linux):

  1. 打开终端。
  2. 运行以下命令删除整个known_hosts文件:
     rm ~/.ssh/known_hosts
  3. 使用 SSH 重新连接到远程服务器:
     ssh <username>@<hostname>

对于 Windows(使用 PuTTY):

  1. 打开腻子
  2. Windows + R ,键入regedit ,然后按 Enter 键打开注册表编辑器
  3. 导航至:
     HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\SshHostKeys
  4. 右键单击SshHostKeys文件夹并选择“删除” 。这将删除所有存储的主机密钥。
  5. 使用 PuTTY 重新连接到服务器,系统将提示您接受新的主机密钥。

对于 Windows(使用 Git Bash):

  1. 打开Git Bash
  2. 通过运行以下命令删除known_hosts文件:
     rm ~/.ssh/known_hosts
  3. 当您使用 SSH 重新连接到服务器时,系统将提示您接受新的主机密钥。

解决方案 3:暂时忽略主机密钥检查(Windows、Mac、Ubuntu)

如果您需要快速连接到服务器并且没有时间手动删除旧的主机密钥,您可以暂时绕过主机密钥验证。虽然此方法在紧急情况下有效,但不建议经常使用,因为它可能会让您面临潜在的安全风险。

对于 Mac 和 Ubuntu (Linux):

 ssh -o StrictHostKeyChecking=no <username>@<hostname>

对于 Windows(使用 Git Bash):

 ssh -o StrictHostKeyChecking=no <username>@<hostname>

对于 Windows(使用 PuTTY):

  1. 打开腻子
  2. 导航到连接 > SSH > 主机密钥
  3. 通过选择始终接受禁用主机密钥检查。
  4. 重新连接到服务器而不验证主机密钥。

解决方案 4:手动添加新的主机密钥(Windows、Mac、Ubuntu)

对于 Mac 和 Ubuntu (Linux):

 ssh-keyscan -H <hostname> >> ~/.ssh/known_hosts

对于 Windows(使用 Git Bash):

 ssh-keyscan -H <hostname> >> ~/.ssh/known_hosts

对于 Windows(使用 PuTTY):

不幸的是,PuTTY 没有ssh-keyscan的直接等效项。要手动添加主机密钥,您需要连接到服务器并允许 PuTTY 提示您输入新的主机密钥。

解决方案 5:检查 DNS 或 IP 地址更改(Windows、Mac、Ubuntu)

对于 Mac 和 Ubuntu (Linux):

 nslookup <hostname>
 dig <hostname>

对于 Windows(使用 Git Bash):

 nslookup <hostname>
 dig <hostname>

对于 Windows(使用 PuTTY):

  1. 打开命令提示符PowerShell
  2. 使用以下命令检查 DNS 或 IP 地址:
     nslookup <hostname>
  3. 将输出中的 IP 地址与 PuTTY 在注册表中显示的 IP 地址进行比较。
  4. 如果 IP 地址已更改,请导航至以下位置,从 PuTTY 注册表中删除旧主机密钥:
     HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\SshHostKeys
  5. 通过 PuTTY 重新连接,它会提示您接受新密钥。

未来避免此问题的最佳实践(Windows、Mac、Ubuntu)

  • 使用静态 IP 地址:使用静态 IP 地址配置服务器,以防止可能触发警告的意外更改。
  • 定期清理或更新known_hosts定期检查和清理旧的或过时的主机密钥。
  • 考虑使用 SSH 证书:使用 SSH 证书进行可扩展的主机密钥管理,减少出现此警告的可能性。
  • 监视 DNS 或 IP 更改:密切关注 DNS 记录或 IP 地址的更改,并相应地更新known_hosts

结论

“远程主机标识已更改!”警告是 SSH 中的一项重要安全功能,它通过验证远程服务器的身份来防止未经授权的访问。虽然这可能令人担忧,但在进行任何更改之前采取必要的步骤来验证服务器的身份非常重要。

通过使用本文中概述的解决方案,无论您使用的是WindowsMac还是Ubuntu ,您都可以安全地解决该警告。请始终记住首先验证服务器的真实性,然后选择最适合您情况的解决方案,无论是删除旧主机密钥、清除known_hosts文件还是暂时绕过检查。

此外,遵循使用静态 IP 地址、定期更新known_hosts和考虑 SSH 证书等最佳实践有助于最大限度地减少将来出现此问题的可能性。