使用 Bastion 和 Windows 本机客户端连接到 VM

本文有助于在本地 Windows 计算机上使用本机客户端(SSH 或 RDP)连接到 VNet 中的 VM。 借助本机客户端功能,可以使用 Azure CLI 通过 Bastion 连接到目标 VM,并扩展登录选项,以包含本地 SSH 密钥对和 Microsoft Entra ID。 有关为本机客户端连接配置 Bastion 的详细信息和步骤,请参阅为本机客户端连接配置 Bastion。 通过本机客户端进行连接需要 Bastion 标准 SKU。

Diagram shows a connection via native client.

配置 Bastion 以实现本机客户端支持后,可以使用本机 Windows 客户端连接到 VM。 用于连接的方法取决于作为连接来源的客户端和作为连接目的地的 VM。 下表显示了可从 Windows 本机客户端进行连接的一些可用方法。 有关显示可用客户端连接/功能组合的完整列表,请参阅连接到 VM

  • 使用 az network bastion rdp 连接到 Windows VM。
  • 使用 az network bastion ssh 连接到 Linux VM。
  • 使用 az network bastion tunnel 连接到 VM。
  • 通过 RDP 上传和下载文件
  • 使用 az network bastion tunnel 通过 SSH 上传文件。

先决条件

在开始之前,请验证是否满足以下先决条件:

  • 安装了最新版本的 CLI 命令(版本 2.32 或更高版本)。 可使用 az extension update --name bastion 更新 CLI for Bastion。 有关安装 CLI 命令的信息,请参阅安装 Azure CLIAzure CLI 入门
  • 已为虚拟网络部署和配置 Azure Bastion。 有关步骤,请参阅为本机客户端连接配置 Bastion
  • 虚拟网络中的虚拟机。
  • VM 的资源 ID。 可在 Azure 门户中轻松找到资源 ID。 转到 VM 的“概述”页并选择“JSON 视图”链接以打开“资源 JSON”。 将页面顶部的资源 ID 复制到剪贴板,以便稍后在连接到 VM 时使用。
  • 如果你打算使用 Azure AD 凭据登录到虚拟机,请确保使用以下方法之一设置虚拟机:

验证角色和端口

验证是否配置了以下角色和端口,以便连接到 VM。

必需的角色

  • 虚拟机上的读者角色。

  • NIC 上的读者角色(使用虚拟机的专用 IP)。

  • Azure Bastion 资源上的读者角色。

  • 虚拟机管理员登录角色或虚拟机用户登录角色(如果使用的是 Azure AD 登录方法)。 仅当使用以下文章之一中所述的过程启用 Azure AD 登录时,才需要执行此操作:

端口

若要使用本机客户端支持连接到 Linux VM,必须在 Linux VM 上打开以下端口:

  • 入站端口:SSH (22) 或
  • 入站端口:自定义值(然后,你需要在通过 Azure Bastion 连接到 VM 时指定此自定义端口)

若要使用本机客户端支持连接到 Windows VM,必须在 Windows VM 上打开以下端口:

  • 入站端口:RDP (3389) 或
  • 入站端口:自定义值(然后,你需要在通过 Azure Bastion 连接到 VM 时指定此自定义端口)

要了解如何以最好的方式使用 Azure Bastion 配置 NSG,请参阅使用 NSG 访问和 Azure Bastion

连接到 VM

以下部分中的步骤可帮助你使用 az network bastion 命令从 Windows 本机客户端连接到 VM。

RDP 到 Windows VM

用户在通过 RDP 连接到 Windows VM 时,必须对目标 VM 拥有权限。 如果用户不是本地管理员,请将其添加到目标 VM 上的远程桌面用户组。

  1. 使用 az login 登录 Azure 帐户。 如果有多个订阅,可以使用 az account list 查看这些订阅,使用 az account set --subscription "<subscription ID>" 选择包含 Bastion 资源的订阅。

    注意

    在可以在由世纪互联运营的 Microsoft Azure 中使用 Azure CLI 之前,请先运行 az cloud set -n AzureChinaCloud 来更改云环境。 若要切换回 Azure 公有云,请再次运行 az cloud set -n AzureCloud

  2. 若要通过 RDP 进行连接,请使用以下示例。

    az network bastion rdp --name "<BastionName>" --resource-group "<ResourceGroupName>" --target-resource-id "<VMResourceId>"
    
  3. 运行命令后,系统会提示你输入凭据。 你可以使用本地用户名和密码,也可以使用 Microsoft Entra 凭据。 登录到目标 VM 后,计算机上的本机客户端将通过 MSTSC 与 VM 会话一起打开。

    重要

    仅允许从 Windows 10 或更高版本的电脑远程连接到已联接 Microsoft Entra ID 的 VM,而这些电脑需已注册到 Microsoft Entra(从 Windows 10 20H1 开始)、已联接到 Microsoft Entra 或向 VM 所联接到的同一目录进行了混合 Microsoft Entra 联接。

指定身份验证方法

(可选)还可以将身份验证方法指定为命令的一部分。

  • Microsoft Entra 身份验证:对于 Windows 10 版本 20H2+、Windows 11 21H2+ 和 Windows Server 2022,请使用 --enable-mfa。 有关详细信息,请参阅 az network bastion rdp - 可选参数

指定自定义端口

通过 RDP 连接到 Windows VM 时,可以指定自定义端口。

一种特别有用的方案是通过端口 22 连接到 Windows VM。 这是针对 az network bastion ssh 命令限制的可能解决方法,Windows 本机客户端无法使用该命令连接到 Windows VM。

若要指定自定义端口,请在登录命令中包含字段 --resource-port,如以下示例所示。

az network bastion rdp --name "<BastionName>" --resource-group "<ResourceGroupName>" --target-resource-id "<VMResourceId>" --resource-port "22"

RDP 到 Windows VM IP 地址

还可以连接到 VM 专用 IP 地址,而不是资源 ID。 使用这种类型的连接时,不支持Microsoft Entra 身份验证,也不支持自定义端口和协议。 有关基于 IP 的连接的详细信息,请参阅连接到 VM - IP 地址

使用 az network bastion 命令将 --target-resource-id 替换为 --target-ip-address 并指定用于连接到 VM 的 IP 地址。

az network bastion rdp --name "<BastionName>" --resource-group "<ResourceGroupName>" --target-ip-address "<VMIPAddress>"

通过 SSH 连接到 Linux VM

  1. 使用 az login 登录到 Azure 帐户。 如果有多个订阅,可以使用 az account list 查看,并使用 az account set --subscription "<subscription ID>" 选择包含 Bastion 资源的订阅。

  2. 使用以下示例选项之一登录到目标 Linux VM。 如果要指定自定义端口值,请在登录命令中包含字段 --resource-port

    Microsoft Entra ID:

    如果要登录到已启用 Microsoft Entra 登录的 VM,请使用以下命令。 有关详细信息,请参阅 Azure Linux VM 和 Microsoft Entra ID

    az network bastion ssh --name "<BastionName>" --resource-group "<ResourceGroupName>" --target-resource-id "<VMResourceId or VMSSInstanceResourceId>" --auth-type "AAD"
    

    SSH 密钥对:

    可以运行 az extension add --name ssh 安装该扩展。 若要使用 SSH 密钥对登录,请使用以下示例。

    az network bastion ssh --name "<BastionName>" --resource-group "<ResourceGroupName>" --target-resource-id "<VMResourceId or VMSSInstanceResourceId>" --auth-type "ssh-key" --username "<Username>" --ssh-key "<Filepath>"
    

    用户名/密码:

    如果使用本地用户名和密码登录,请使用以下命令。 然后,系统将提示输入目标 VM 的密码。

    az network bastion ssh --name "<BastionName>" --resource-group "<ResourceGroupName>" --target-resource-id "<VMResourceId or VMSSInstanceResourceId>" --auth-type "password" --username "<Username>"
    
  3. 登录到目标 VM 后,计算机上的本机客户端将通过 SSH CLI 扩展 (az ssh) 与 VM 会话一起打开。

通过 SSH 连接到 Linux VM IP 地址

还可以连接到 VM 专用 IP 地址,而不是资源 ID。 使用这种类型的连接时,不支持Microsoft Entra 身份验证,也不支持自定义端口和协议。 有关基于 IP 的连接的详细信息,请参阅连接到 VM - IP 地址

使用 az network bastion 命令将 --target-resource-id 替换为 --target-ip-address 并指定用于连接到 VM 的 IP 地址。

az network bastion ssh --name "<BastionName>" --resource-group "<ResourceGroupName>" --target-ip-address "<VMIPAddress>" --auth-type "ssh-key" --username "<Username>" --ssh-key "<Filepath>"

连接到 VM - tunnel 命令

az network bastion tunnel 命令是可用于连接到 VM 的另一种方法。 使用此命令时,可以执行以下操作:

  • 从 非 Windows 本地计算机上的本机客户端进行连接。 (例如,Linux 计算机。)
  • 使用 SSH 或 RDP 连接到 VM。 (堡垒隧道不中继 Web 服务器或主机。)
  • 使用你选择的本机客户端。
  • 从本地计算机将文件上传到目标 VM。 此命令目前不支持将文件从目标 VM 下载到本地客户端。

的限制:

  • 此功能不支持使用存储在 Azure Key Vault 中的 SSH 私钥进行登录。 在使用 SSH 密钥对登录到 Linux VM 之前,请先将私钥下载到本地计算机上的文件。

步骤:

  1. 使用 az login 登录 Azure 帐户。 如果有多个订阅,可以使用 az account list 查看这些订阅,使用 az account set --subscription "<subscription ID>" 选择包含 Bastion 资源的订阅。

  2. 打开通向目标 VM 的隧道。

    az network bastion tunnel --name "<BastionName>" --resource-group "<ResourceGroupName>" --target-resource-id "<VMResourceId or VMSSInstanceResourceId>" --resource-port "<TargetVMPort>" --port "<LocalMachinePort>"
    
  3. 使用 SSH 或 RDP、选择的本机客户端以及在上一步中指定的本地计算机端口连接到目标 VM。

    例如,如果你在本地计算机上安装了 OpenSSH 客户端,则可以使用以下命令:

    ssh <username>@127.0.0.1 -p <LocalMachinePort>
    

到 VM IP 地址的隧道

还可以连接到 VM 专用 IP 地址,而不是资源 ID。 使用这种类型的连接时,不支持 Azure AD 身份验证,也不支持自定义端口和协议。 有关基于 IP 的连接的详细信息,请参阅连接到 VM - IP 地址

使用 az network bastion tunnel 命令将 --target-resource-id 替换为 --target-ip-address 并指定用于连接到 VM 的 IP 地址。

az network bastion tunnel --name "<BastionName>" --resource-group "<ResourceGroupName>" --target-ip-address "<VMIPAddress>" --resource-port "<TargetVMPort>" --port "<LocalMachinePort>"

多连接隧道

  1. 将以下内容添加到 $HOME.ssh\config。

    Host tunneltunnel
      HostName 127.0.0.1
      Port 2222
      User mylogin
      StrictHostKeyChecking=No
      UserKnownHostsFile=\\.\NUL
    
  2. 将隧道连接添加到已建立的隧道连接。

    az network bastion tunnel --name mybastion --resource-group myrg --target-resource-id /subscriptions/<mysubscription>/resourceGroups/myrg/providers/Microsoft.Compute/virtualMachines/myvm --resource-port 22 --port 22
    
  3. 在堡垒隧道中创建 ssh 隧道。

    ssh -L 2222:127.0.0.1:22 mylogin@127.0.0.1
    
  4. 使用 VS Code 连接到隧道连接。

后续步骤

上传或下载文件