连接到 Linux VM

在 Azure 上托管 Linux 虚拟机时,访问虚拟机的最常见方法是通过安全外壳协议 (SSH)。 可以使用 Linux 和 Windows 中常见的任何标准 SSH 客户端进行连接。

本文档介绍如何通过 SSH 连接到具有公共 IP 的 VM。 如果需要在没有公共 IP 的情况下连接到 VM,请参阅 Azure Bastion 服务

先决条件

  • 需要 SSH 密钥对。 如果还没有一个,Azure 将在部署过程中创建密钥对。 如需帮助手动创建密钥对,请参阅在 Azure 中为 Linux VM 创建和使用 SSH 公钥-私钥对

  • 需要现有网络安全组 (NSG)。 默认情况下,大多数 VM 都有一个 NSG,但如果你还没有 NSG,可以创建一个并手动附加它。 有关详细信息,请参阅创建、更改或删除网络安全组

  • 若要连接到 Linux VM,需要打开相应的端口。 SSH 通常使用端口 22。 以下说明假定端口 22,但对于其他端口号,此过程相同。 可以使用故障排除程序或通过在 VM 设置中手动检查来验证是否为 SSH 打开适当的端口。 要检查端口 22 是否打开,请执行以下操作:

    1. 在 VM 页面上,从左侧菜单中选择“网络”。

    2. 在“网络”页上,检查是否存在允许端口 22 上的 TCP 从正在使用的计算机的 IP 地址连接到 VM 的规则。 如果该规则存在,则可以转到下一部分。

      Screenshot showing how to check to see if there's already a rule allowing S S H connections.

    3. 如果没有规则,请通过选择“添加入站端口规则”来添加规则。

    4. 对于“服务”,请从下拉列表中选择“SSH”。

      Screenshot showing where to choose S S H when creating a new N S G rule.

    5. 如有必要,请编辑“优先级”和“源”

    6. 对于“名称”,请键入 SSH。

    7. 完成后,选择“添加”。

    8. 现在,在入站端口规则表中应有一个 SSH 规则。

  • VM 必须使用公共 IP 地址。 要检查 VM 是否具有公共 IP 地址,请从左侧菜单中选择“概述”,然后查看“网络”部分。 如果看到“公共 IP 地址”旁边有一个 IP 地址,则 VM 具有公共 IP

    如果 VM 没有公共 IP 地址,则如下所示:

    Screenshot of how the networking section looks when you don't have a public I P.

    要了解有关将公共 IP 地址添加到现有 VM 的详细信息,请参阅将公共 IP 地址关联到虚拟机

  • 验证 VM 是否正在运行。 在“概述”选项卡上的“概要”部分中,验证 VM 的状态是否为“正在运行”。 若要启动 VM,请在页面顶部,选择“启动”。

    Screenshot showing how to check to make sure your virtual machine is in the running state.

如果连接时遇到问题,也可以使用门户:

  1. 转到 Azure 门户以连接到 VM。 搜索并选择“虚拟机”。
  2. 从列表中选择虚拟机。
  3. 从左侧菜单中选择“连接”。
  4. 选择适合首选连接方式的选项。 门户可帮助你完成连接的先决条件。

连接到 VM

满足上述先决条件后,就可以连接到 VM 了。 打开所选的 SSH 客户端。 SSH 客户端命令通常包含在 Linux、macOS 和 Windows 中。 如果使用 Windows 7 或更早版本(默认情况下不包括 Win32 OpenSSH),请考虑安装 WSL

备注

以下示例假定 SSH 密钥采用 key.pem 格式。 如果使用 CLI 或 Azure PowerShell 来下载密钥,则这些密钥可以采用 id_rsa 格式。

使用新密钥对的 SSH

  1. 确保公钥和私钥位于正确的目录中。 目录通常是 ~/.ssh

    如果手动生成密钥或使用 CLI 生成密钥,则表示密钥已经存在。 但是,如果从 Azure 门户以 pem 格式下载密钥,则可能需要将其移动到正确的位置。 使用以下语法移动密钥:mv PRIVATE_KEY_SOURCE PRIVATE_KEY_DESTINATION

    例如,如果密钥位于 Downloads 文件夹中,并且 myKey.pem 是 SSH 密钥的名称,请键入以下命令:

    mv /Downloads/myKey.pem ~/.ssh
    

    注意

    如果使用 WSL,可在 mnt/c/ 目录中找到本地文件。 因此,下载文件夹和 SSH 密钥的路径将是 /mnt/c/Users/{USERNAME}/Downloads/myKey.pem

  2. 运行以下命令,确保你对私钥具有只读访问权限

    chmod 400 ~/.ssh/myKey.pem
    
  3. 使用以下语法运行 SSH 命令:ssh -i PATH_TO_PRIVATE_KEY USERNAME@EXTERNAL_IP

    例如,如果 azureuser 是创建的用户名,并且 20.51.230.13 是 VM 的公共 IP 地址,请键入以下命令:

    ssh -i ~/.ssh/myKey.pem azureuser@20.51.230.13
    
  4. 验证返回的指纹。

    如果你以前从未连接到此 VM,系统会要求你验证主机指纹。 接受提供的指纹很容易,但该方法会使你遭受潜在的中间人攻击。 你应始终验证主机指纹。 仅在第一次从客户端进行连接时,你才需要执行此操作。 若要通过门户获取主机指纹,请使用“运行命令”功能来执行命令:

    ssh-keygen -lf /etc/ssh/ssh_host_ecdsa_key.pub | awk '{print $2}'
    
  5. 成功! 现在应该已连接到 VM。 如果无法连接,请参阅对 SSH 连接进行故障排除

使用现有公钥的 SSH

  1. 在 SSH 客户端中运行以下命令。 在此示例中,20.51.230.13 是 VM 的公共 IP 地址,azureuser 是你在创建 VM 时创建的用户名。

    ssh azureuser@20.51.230.13
    
  2. 验证返回的指纹。

    如果在系统要求你验证主机指纹之前,你从未从当前的 SSH 客户端连接所需的 VM。 虽然默认选项是接受提供的指纹,但你可能受到“中间人攻击”。 应始终验证主机指纹,只需要在客户端首次连接时完成验证。 若要通过门户获取主机指纹,请使用“运行命令”功能来执行命令:

    ssh-keygen -lf /etc/ssh/ssh_host_ecdsa_key.pub | awk '{print $2}'
    
  3. 成功! 现在应该已连接到 VM。 如果无法连接,请参阅故障排除指南

密码验证

警告

此类身份验证方法并不像 SSH 密钥对那样安全,不建议使用。

  1. 在 SSH 客户端中运行以下命令。 在此示例中,20.51.230.13 是 VM 的公共 IP 地址,azureuser 是你在创建 VM 时创建的用户名。

    ssh azureuser@20.51.230.13
    

    如果忘记了密码或用户名,请参阅重置对 Azure VM 的访问权限

  2. 验证返回的指纹。

    如果在系统要求你验证主机指纹之前,你从未从当前的 SSH 客户端连接所需的 VM。 虽然默认选项是接受提供的指纹,但你可能受到“中间人攻击”。 应始终验证主机指纹,只需要在客户端首次连接时完成验证。 若要通过门户获取主机指纹,请使用“运行命令”功能来执行命令:

    ssh-keygen -lf /etc/ssh/ssh_host_ecdsa_key.pub | awk '{print $2}'
    
  3. 成功! 现在应该已连接到 VM。 如果无法连接,请参阅对 SSH 连接进行故障排除

后续步骤

了解如何将文件传输到现有 VM,请参阅使用 SCP 将文件移入和移出 VM