如何使用 Secure Shell (SSH) 连接并登录到运行 Windows 的 Azure 虚拟机

适用于:✔️ Windows VM ✔️ 灵活规模集

Win32 OpenSSH 项目通过在 Windows 中提供原生支持,实现使用 Secure Shell 进行远程连接。 该功能在 Windows Server 2019 及更高版本中提供,并且可以使用虚拟机 (VM) 扩展添加到旧版 Windows。

以下示例使用变量。 可以在环境中设置变量,如下所示。

Shell 示例
Bash/ZSH myResourceGroup='resGroup10'
PowerShell $myResourceGroup='resGroup10'

启用 SSH

首先,你需要在 Windows 计算机中启用 SSH。

部署适用于 Windows 的 SSH 扩展: 该扩展提供了 Win32 OpenSSH 解决方案的自动安装,类似于在较新版本的 Windows 中启用该功能。 使用以下示例部署扩展。

az vm extension set --resource-group $myResourceGroup --vm-name $myVM --name WindowsOpenSSH --publisher Microsoft.Azure.OpenSSH --version 3.0

打开 TCP 端口

确保打开适当的端口(默认为 TCP 22)以允许连接到 VM。

az network nsg rule create -g $myResourceGroup --nsg-name $myNSG -n allow-SSH --priority 1000 --source-address-prefixes 208.130.28.4/32 --destination-port-ranges 22 --protocol TCP
  • VM 必须使用公共 IP 地址。 要检查 VM 是否具有公共 IP 地址,请从左侧菜单中选择“概述”,然后查看“网络”部分。 如果看到“公共 IP 地址”旁边有一个 IP 地址,则 VM 具有公共 IP。 要了解有关将公共 IP 地址添加到现有 VM 的详细信息,请参阅将公共 IP 地址关联到虚拟机

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

身份验证

可以使用用户名和密码或 SSH 密钥向 Windows 计算机进行身份验证。 Azure 不支持自动向 Windows 计算机预配公钥,但可以使用 RunCommand 扩展复制密钥。

SSH 和密钥概述

SSH 是一种加密的连接协议,利用该协议可以通过未受保护的连接进行安全登录。 虽然 SSH 提供加密连接,但是将密码用于 SSH 连接仍会使 VM 易受到暴力攻击。 建议使用公钥-私钥对(也称为“SSH 密钥”)通过 SSH 连接到 VM。

  • 公钥放置在 VM 上。

  • 私钥仍保留在本地系统上。 请保护好私钥, 不要透露给其他人。

当你使用 SSH 客户端连接到 VM(具有公钥)时,远程 VM 会测试客户端以确保其具有正确的私钥。 如果客户端具有私钥,则授予其访问 VM 的权限。

根据组织的安全策略,可重复使用单个公钥-私钥对来访问多个 Azure VM 和服务。 无需对要访问的每个 VM 或服务使用单独的密钥对。

可与任何人共享公钥;但只有你(或本地安全基础结构)才应具有对私钥的访问权限。

受支持的 SSH 密钥格式

Azure 目前支持以下密钥类型:

  • SSH 协议 2 (SSH-2) RSA(Rivest、Shamir、Adleman),最小长度为 2048 位
  • ED25519 密钥,固定长度为 256 位

目前不支持其他密钥格式,例如椭圆曲线 Diffie-Hellman (ECDH) 和椭圆曲线数字签名算法 (ECDSA)。

使用 RunCommand 扩展复制公钥。

RunCommand 扩展提供了一种简单的解决方案,用于将公钥复制到 Windows 计算机,并确保文件具有正确的权限。

az vm run-command invoke -g $myResourceGroup -n $myVM --command-id RunPowerShellScript --scripts "MYPUBLICKEY | Add-Content 'C:\ProgramData\ssh\administrators_authorized_keys' -Encoding UTF8;icacls.exe 'C:\ProgramData\ssh\administrators_authorized_keys' /inheritance:r /grant 'Administrators:F' /grant 'SYSTEM:F'"

使用 Az CLI 进行连接

使用 Az SSH 命令连接到 Windows 计算机。

az ssh vm  -g $myResourceGroup -n $myVM --local-user $myUsername

还可以通过 SSH 连接为特定 TCP 端口创建网络隧道。 一个很好的用例是远程桌面,默认为端口 3389。

az ssh vm  -g $myResourceGroup -n $myVM --local-user $myUsername -- -L 3389:localhost:3389

从 Azure 门户进行连接

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

后续步骤

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