如何在 Azure 上将 SSH 密钥与 Windows 配合使用

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

本文适用于希望创建并使用安全外壳 (SSH) 密钥以连接到 Azure 中的 Linux 虚拟机 (VM) 的 Windows 用户。 你还可以在 Azure 门户中生成并存储 SSH 密钥,以便在门户中创建 VM 时使用。

若要从 Linux 或 macOS 客户端使用 SSH 密钥,请参阅快速步骤。 有关 SSH 的更详细概述,请参阅详细步骤:创建和管理用于在 Azure 中对 Linux VM 进行身份验证的 SSH 密钥

SSH 和密钥概述

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

公钥-私钥对类似于你前门的锁。 锁是向外界公开的,任何拥有正确钥匙的人都可以打开门。 钥匙是专用的,且仅提供给你信任的人,因为可以用它打开门锁。

  • 创建 VM 时,会将公钥放置在 Linux VM 上。

  • 私钥仍保留在本地系统上。 请保护好私钥, 请勿共享它。

连接到 Linux VM 时,VM 会测试 SSH 客户端,以确保其具有正确的私钥。 如果客户端具有私钥,则授予其访问 VM 的权限。

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

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

受支持的 SSH 密钥格式

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

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

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

SSH 客户端

最新版本的 Windows 10 包括 OpenSSH 客户端命令用于创建和使用 SSH 密钥,以及通过 PowerShell 或命令提示符建立 SSH 连接。

你还可以安装适用于 Linux 的 Windows 子系统,以通过 SSH 连接到 VM,并在 Bash shell 中使用其他本机 Linux 工具。

创建 SSH 密钥对

创建和管理 SSH 密钥的最简单方法是使用门户创建和存储它们以供重复使用。

还可使用 Azure CLI 通过 az sshkey create 命令创建密钥对,如生成和存储 SSH 密钥所述。

要从 PowerShell 或命令提示符使用 ssh-keygen 命令在本地计算机上创建 SSH 密钥对,请使用以下命令:

ssh-keygen -m PEM -t rsa -b 2048

输入文件名,或使用括号中显示的默认值(例如 C:\Users\username/.ssh/id_rsa)。 输入文件的密码,如果不想使用密码,请将密码留空。

使用密钥创建 VM

若要创建使用 SSH 密钥进行身份验证的 Linux VM,请在创建 VM 时提供 SSH 公钥。

使用 Azure CLI,可以使用 az vm create--ssh-key-value 参数指定公钥的路径和文件名。

az vm create \
   --resource-group myResourceGroup \
   --name myVM \
   --image Ubuntu2204\
   --admin-username azureuser \
   --ssh-key-value ~/.ssh/id_rsa.pub

通过 PowerShell,使用 New-AzVM 并使用 ` 将 SSH 密钥添加到 VM 配置。 有关示例,请参阅快速入门:使用 PowerShell 在 Azure 中创建 Linux 虚拟机

如果你使用门户进行许多部署,则最好将公钥上传到 Azure,以便在从门户创建 VM 时可以轻松选择公钥。 有关详细信息,请参阅上传 SSH 密钥

连接到 VM

凭借部署在 Azure VM 上的公钥和本地系统上的私钥,使用 VM 的 IP 地址或 DNS 名称通过 SSH 连接到 VM。 将以下命令中的 azureuser 和 10.111.12.123 替换为管理员用户名、IP 地址(或完全限定的域名)以及指向私钥的路径 :

ssh -i ~/.ssh/id_rsa azureuser@10.111.12.123

如果你以前从未连接到此 VM,系统会要求你验证主机指纹。 接受所提供的指纹很诱人,但这种方法会使你暴露于可能正在进行攻击的人。 你应始终验证主机指纹。 仅在第一次从客户端进行连接时,你才需要执行此操作。 若要通过门户获取主机指纹,请使用以下命令“运行命令”:ssh-keygen -lf /etc/ssh/ssh_host_ecdsa_key.pub | awk '{print $2}'

显示使用“运行命令”功能验证主机指纹的屏幕截图。

若要使用 CLI 运行命令,请使用 az vm run-command invoke 命令

如果创建密钥对时配置了密码,请在出现提示时输入该密码。

如果 VM 使用的是实时访问策略,则需要先请求访问权限,然后才能连接到 VM。 有关实时策略的详细信息,请参阅使用实时策略管理虚拟机访问

后续步骤