在 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 是否打开,请执行以下操作: - 在 VM 页面上,从左侧菜单中选择“网络”。 
- 在“网络”页上,检查是否存在允许端口 22 上的 TCP 从正在使用的计算机的 IP 地址连接到 VM 的规则。 如果该规则存在,则可以转到下一部分。   
- 如果没有规则,请通过选择“添加入站端口规则”来添加规则。 
- 对于“服务”,请从下拉列表中选择“SSH”。   
- 如有必要,请编辑“优先级”和“源” 
- 对于“名称”,请键入 SSH。 
- 完成后,选择“添加”。 
- 现在,在入站端口规则表中应有一个 SSH 规则。 
 
- VM 必须使用公共 IP 地址。 要检查 VM 是否具有公共 IP 地址,请从左侧菜单中选择“概述”,然后查看“网络”部分。 如果看到“公共 IP 地址”旁边有一个 IP 地址,则 VM 具有公共 IP - 如果 VM 没有公共 IP 地址,则如下所示:   - 要了解有关将公共 IP 地址添加到现有 VM 的详细信息,请参阅将公共 IP 地址关联到虚拟机 
- 验证 VM 是否正在运行。 在“概述”选项卡上的“概要”部分中,验证 VM 的状态是否为“正在运行”。 若要启动 VM,请在页面顶部,选择“启动”。   
如果连接时遇到问题,也可以使用门户:
- 转到 Azure 门户以连接到 VM。 搜索并选择“虚拟机”。
- 从列表中选择虚拟机。
- 从左侧菜单中选择“连接”。
- 选择适合首选连接方式的选项。 门户可帮助你完成连接的先决条件。
连接到 VM
满足上述先决条件后,就可以连接到 VM 了。 打开所选的 SSH 客户端。 SSH 客户端命令通常包含在 Linux、macOS 和 Windows 中。 如果使用 Windows 7 或更早版本(默认情况下不包括 Win32 OpenSSH),请考虑安装 WSL。
备注
以下示例假定 SSH 密钥采用 key.pem 格式。 如果使用 CLI 或 Azure PowerShell 来下载密钥,则这些密钥可以采用 id_rsa 或 ED25519 格式。
使用新密钥对的 SSH
- 确保公钥和私钥位于正确的目录中。 目录通常是 - ~/.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
- 运行以下命令,确保你对私钥具有只读访问权限 - chmod 400 ~/.ssh/myKey.pem
- 使用以下语法运行 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
- 验证返回的指纹。 - 如果你以前从未连接到此 VM,系统会要求你验证主机指纹。 接受提供的指纹很容易,但该方法会使你遭受潜在的中间人攻击。 你应始终验证主机指纹。 仅在第一次从客户端进行连接时,你才需要执行此操作。 若要通过门户获取主机指纹,请使用“运行命令”功能来执行命令: - ssh-keygen -lf /etc/ssh/ssh_host_ecdsa_key.pub | awk '{print $2}'
- 成功! 现在应该已连接到 VM。 如果无法连接,请参阅对 SSH 连接进行故障排除。 
使用现有公钥的 SSH
- 在 SSH 客户端中运行以下命令。 在此示例中,20.51.230.13 是 VM 的公共 IP 地址,azureuser 是你在创建 VM 时创建的用户名。 - ssh azureuser@20.51.230.13
- 验证返回的指纹。 - 如果在系统要求你验证主机指纹之前,你从未从当前的 SSH 客户端连接所需的 VM。 虽然默认选项是接受提供的指纹,但你可能受到“中间人攻击”。 应始终验证主机指纹,只需要在客户端首次连接时完成验证。 若要通过门户获取主机指纹,请使用“运行命令”功能来执行命令: - ssh-keygen -lf /etc/ssh/ssh_host_ecdsa_key.pub | awk '{print $2}'
- 成功! 现在应该已连接到 VM。 如果无法连接,请参阅故障排除指南。 
密码验证
警告
此类身份验证方法并不像 SSH 密钥对那样安全,不建议使用。
- 在 SSH 客户端中运行以下命令。 在此示例中,20.51.230.13 是 VM 的公共 IP 地址,azureuser 是你在创建 VM 时创建的用户名。 - ssh azureuser@20.51.230.13- 如果忘记了密码或用户名,请参阅重置对 Azure VM 的访问权限 
- 验证返回的指纹。 - 如果在系统要求你验证主机指纹之前,你从未从当前的 SSH 客户端连接所需的 VM。 虽然默认选项是接受提供的指纹,但你可能受到“中间人攻击”。 应始终验证主机指纹,只需要在客户端首次连接时完成验证。 若要通过门户获取主机指纹,请使用“运行命令”功能来执行命令: - ssh-keygen -lf /etc/ssh/ssh_host_ecdsa_key.pub | awk '{print $2}'
- 成功! 现在应该已连接到 VM。 如果无法连接,请参阅对 SSH 连接进行故障排除。 
后续步骤
了解如何将文件传输到现有 VM,请参阅使用 SCP 将文件移入和移出 VM。