你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

如何在 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 连接。

你还可以在 Azure Cloud Shell 中使用 Bash 来连接到 VM。 你可以在 Web 浏览器中通过 Azure 门户使用 Cloud Shell,或者使用 Azure 帐户扩展在 Visual Studio Code 中将 Cloud Shell 作为终端使用。

你还可以安装适用于 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。 有关实时策略的详细信息,请参阅使用实时策略管理虚拟机访问

后续步骤