有关连接到 Azure 中 Linux VM 时出现的问题的详细 SSH 故障排除步骤

SSH 客户端可能无法访问 VM 上的 SSH 服务的原因有很多。 如果已遵循更 常规的 SSH 故障排除步骤,则需要进一步排查连接问题。 本文将指导你完成详细的故障排除步骤,以确定 SSH 连接失败的位置以及如何解决它。

执行初步步骤

下图显示了所涉及的组件。

显示 SSH 服务的组件的关系图。

以下步骤可帮助你隔离故障源并找出解决方案或解决方法。

  1. 在门户中检查 VM 的状态。 在Azure 门户中,选择“虚拟机>VM 名称”。

    VM 的状态窗格应显示 “正在运行”。 向下滚动以显示计算、存储和网络资源的最新活动。

  2. 选择 “设置” 以检查终结点、IP 地址、网络安全组和其他设置。

    VM 应具有为 SSH 流量定义的终结点,可以在终结点或网络安全组中查看该终结点。 使用 资源管理器 创建的 VM 中的终结点存储在网络安全组中。 验证规则是否已应用于网络安全组并在子网中引用。

若要验证网络连接,检查配置的终结点,并查看是否可以通过其他协议(如 HTTP 或其他服务)连接到 VM。

完成这些步骤后,请再次尝试 SSH 连接。

查找问题的根源

由于以下方面的问题或配置错误,计算机上的 SSH 客户端可能无法连接到 Azure VM 上的 SSH 服务:

源 1:SSH 客户端计算机

若要消除计算机作为故障源,请验证它是否可以与另一台基于 Linux 的本地计算机建立 SSH 连接。

突出显示 SSH 客户端计算机组件的示意图。

如果连接失败,检查计算机上出现以下问题:

  • 阻止入站或出站 SSH 流量的本地防火墙设置 (TCP 22)
  • 本地安装的阻止 SSH 连接的客户端代理软件
  • 本地安装的网络监视软件阻止 SSH 连接
  • 其他类型的安全软件,用于监视流量或允许/禁止特定类型的流量

如果这些条件之一适用,请暂时禁用该软件,并尝试通过 SSH 连接到本地计算机,找出在计算机上阻止连接的原因。 然后与网络管理员协作,更正软件设置以允许 SSH 连接。

如果使用证书身份验证,请验证是否对主目录中的 .ssh 文件夹具有以下权限:

  • Chmod 700 ~/.ssh
  • Chmod 644 ~/.ssh/*.pub
  • Chmod 600 ~/.ssh/id_rsa (或任何其他存储私钥的文件)
  • Chmod 644 ~/.ssh/known_hosts (包含通过 SSH 连接到的主机)

源 2:组织边缘设备

若要消除组织边缘设备作为故障的根源,请验证直接连接到 Internet 的计算机是否可以与 Azure VM 建立 SSH 连接。 如果要通过站点到站点 VPN 或 Azure ExpressRoute 连接访问 VM,请跳到 源 4:网络安全组

突出显示组织边缘设备的示意图。

如果没有直接连接到 Internet 的计算机,请在自己的资源组或云服务中创建新的 Azure VM,并使用该新 VM。 有关详细信息,请参阅 在 Azure 中创建运行 Linux 的虚拟机。 完成测试后,请删除资源组或 VM 和云服务。

如果可与直接连接到 Internet 的计算机创建 SSH 连接,检查组织边缘设备,以便:

  • 阻止通过 Internet 进行 SSH 流量的内部防火墙
  • 阻止 SSH 连接的代理服务器
  • 在阻止 SSH 连接的边缘网络中的设备上运行的入侵检测或网络监视软件

请与网络管理员协作,更正组织边缘设备的设置,以允许与 Internet 的 SSH 流量。

源 3:云服务终结点和 ACL

重要

经典 VM 将于 2023 年 9 月 1 日停用

如果使用 ASM 中的 IaaS 资源,请在 2023 年 9 月 1 日前完成迁移。 我们建议你尽快进行切换,以利用 Azure 资源管理器 中的许多功能增强功能。

有关详细信息,请参阅在 2023 年 9 月 1 日前将 IaaS 资源迁移到 Azure 资源管理器

注意

此源仅适用于使用经典部署模型创建的 VM。 对于使用 资源管理器 创建的 VM,请跳到源 4:网络安全组

若要消除云服务终结点和 ACL 作为故障源,请验证同一虚拟网络中的另一个 Azure VM 是否可以使用 SSH 进行连接。

突出显示云服务终结点和 ACL 的示意图。

如果同一虚拟网络中没有另一个 VM,可以轻松创建一个。 有关详细信息,请参阅 使用 CLI 在 Azure 上创建 Linux VM。 完成测试后,请删除额外的 VM。

如果可以在同一虚拟网络中创建与 VM 的 SSH 连接,检查以下方面:

  • 目标 VM 上 SSH 流量的终结点配置。 终结点的专用 TCP 端口应与 VM 上的 SSH 服务侦听的 TCP 端口匹配。 (默认端口为 22) 。 选择“虚拟机>VM 名称>设置>终结点”,验证Azure 门户中的 SSH TCP 端口号。
  • 目标虚拟机上 SSH 流量终结点的 ACL。 使用 ACL,可以根据 Internet 的源 IP 地址指定允许或拒绝的传入流量。 配置错误的 ACL 可能会阻止传入终结点的 SSH 流量。 检查 ACL,确保允许来自代理或其他边缘服务器的公共 IP 地址的传入流量。 有关详细信息,请参阅 关于网络访问控制列表 (ACL)

若要消除终结点作为问题的根源,请删除当前终结点,创建另一个终结点,并为) 的公共和专用端口号指定 SSH 名称 (TCP 端口 22。 有关详细信息,请参阅 在 Azure 中的虚拟机上设置终结点

源 4:网络安全组

使用网络安全组可以更精细地控制允许的入站和出站流量。 可以在 Azure 虚拟网络中创建跨子网和云服务的规则。 检查网络安全组规则,确保允许传入和传出 Internet 的 SSH 流量。 有关详细信息,请参阅 关于网络安全组

还可以使用 IP 验证来验证 NSG 配置。 有关详细信息,请参阅 Azure 网络监视概述

源 5:基于 Linux 的 Azure 虚拟机

可能问题的最后一个来源是 Azure 虚拟机本身。

突出显示基于 Linux 的 Azure 虚拟机的示意图。

如果尚未执行此操作,请按照说明 重置基于 Linux 的密码虚拟机

再次尝试从计算机进行连接。 如果仍然失败,以下是一些可能的问题:

  • SSH 服务未在目标虚拟机上运行。
  • SSH 服务未侦听 TCP 端口 22。 若要进行测试,请在本地计算机上安装 telnet 客户端,并运行“telnet cloudServiceName.cloudapp.net 22”。 此步骤确定虚拟机是否允许与 SSH 终结点的入站和出站通信。
  • 目标虚拟机上的本地防火墙具有阻止入站或出站 SSH 流量的规则。
  • 在 Azure 虚拟机上运行的入侵检测或网络监视软件正在阻止 SSH 连接。

其他资源

有关排查应用程序访问问题的详细信息,请参阅 排查对 Azure 虚拟机上运行的应用程序的访问问题

联系我们寻求帮助

如果你有任何疑问或需要帮助,请创建支持请求联系 Azure 社区支持。 还可以向 Azure 反馈社区提交产品反馈。