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

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

Diagram shows a connection via native client.

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

  • 使用 az network bastion ssh 连接到 Linux VM。
  • 使用 az network bastion tunnel 连接到 Windows VM。
  • 使用 az network bastion tunnel 连接到任何 VM。
  • 使用 az network bastion tunnel 通过 SSH 上传文件到目标 VM。 此命令目前不支持将文件从目标 VM 下载到本地客户端。

先决条件

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

  • 安装了最新版本的 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

连接到 Linux VM

以下部分中的步骤会可帮助你使用 az network bastion 命令从 Linux 本机客户端连接到 Linux VM。 可以运行 az extension add --name bastion 安装该扩展。

使用此命令连接时,不支持文件传输。 如果要上传文件,请改为使用 az network bastion tunnel 命令进行连接。

此命令允许执行以下操作:

  • 使用 SSH 连接到 Linux VM。
  • 通过 Microsoft Entra ID 进行身份验证
  • 连接到虚拟网络中的并发 VM 会话。

要登录,使用以下示例之一。 登录到目标 VM 后,计算机上的本机客户端将与 VM 会话一起打开。

SSH 密钥对

若要使用 SSH 密钥对登录到 VM,请使用以下示例。

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

Microsoft Entra 身份验证

如果要登录到已启用 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"

用户名/密码

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

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

SSH 到 Linux VM IP 地址

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

使用 az network bastion 命令将 --target-resource-id 替换为 --target-ip-address 并指定用于连接到 VM 的 IP 地址。 以下示例使用 --ssh-key 进行身份验证。

az network bastion ssh --name "<BastionName>" --resource-group "<ResourceGroupName>" --target-ip-addres "<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 连接到隧道连接。

后续步骤

上传或下载文件