连接到 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 的规则。 如果该规则存在,则可以转到下一部分。

      显示如何检查是否已经存在允许 SSH 连接的规则的屏幕截图。

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

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

      显示在创建新 NSG 规则时选择 SSH 的位置的屏幕截图。

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

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

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

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

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

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

    没有公共 IP 时,网络部分的外观的屏幕截图。

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

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

    显示如何进行检查以确保虚拟机处于运行状态的屏幕截图。

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

  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 或 ED25519 格式。

使用新密钥对的 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