我最初的理解是Azure 堡垒充当轻量级 SSH(和 RDP)网关,用于访问同一虚拟网络上的资源(特别是虚拟机),而不是将整个虚拟机配置为跳转箱。也就是说,我希望能够从公共互联网上的任何地方通过 SSH 访问同一网络上的虚拟机:
ssh -i /path/to/private.key -J BASTION_IP user@VM_IP
其中,BASTION_IP
是与 Bastion 资源关联的公共 IP,VM_IP
是 Bastion 子网的同级子网中 VM 的内部 IP 地址。
我已经在 Terraform 中使用“Basic”Bastion SKU 进行了设置,但当我尝试连接时,它超时了。在 Azure Poral 中,有一个名为“Native Client Support”(需要“Standard”SKU)的选项,作为tunneling_enabled
相应 Terraform 资源中的参数公开。进行这些更改后,我的连接仍然超时。
继文档的兔子洞建议你有使用 Azure CLI。事实上,我可以使用 Azure CLI 使隧道工作——SSH 扩展显然仅适用于 Windows——但这有点麻烦:
az login # I assume there's a way to login unattended
az account set --subscription SUBSCRIPTION_ID
az network bastion tunnel --name BASTION_NAME --resource-group RG_NAME --target-resource-id REALLY_LONG_VM_RESOURCE_ID --resource-port 22 --port 2222 &
ssh -i /path/to/private.key -p 2222 user@localhost
是否有一种非专有方式可以通过 Azure Bastion 通过 SSH 连接到 Azure VM?或者我对其用例的假设是否正确?
答案1
实际上,使用本地客户端通过 SSH 连接到 Bastion 只有两种方法,并且都涉及 Azure CLI:
- 使用 Az Network Bastion Tunnel,正如你提到的那样,创建隧道,然后根据需要进行连接
- 使用 Az Network Bastion SSH 直接使用本机客户端Using Az Network Bastion SSH to use the native client directly
如果您想使用服务主体进行连接,您可以自动化此连接,但假设您想以用户身份连接,那么存储用户凭据并处理 MFA 等会有点麻烦。