Azure Bastion SSH连接Linux VM报Unexpected internal error排查
报错根因
该错误触发于Bastion SSH隧道建立的认证令牌获取阶段(对应堆栈里的_get_auth_token方法),属于隧道前置流程失败,和后续输入的SSH用户名、密码正确性无关,常见触发原因如下:
- 本地安装的Azure CLI版本过旧,2.40及更早版本的Windows端Azure CLI network模块存在已知的Bastion隧道令牌获取逻辑bug,是该错误最高发的诱因
- Bastion主机配置不满足原生客户端连接要求:使用基础SKU的Bastion不支持CLI原生连接,或Bastion未开启「原生客户端支持」功能开关
- 当前登录Azure CLI的账号权限不足,缺少Bastion连接操作所需的
Microsoft.Network/bastionHosts/connect/action权限,或目标资源配置了只读锁阻止连接操作 - 本地网络拦截了Azure CLI与Azure ARM服务端点的通信,比如代理、防火墙、安全软件截断了令牌请求,导致返回通用内部错误
- Bastion实例本身处于异常状态,比如实例健康度异常、后台升级部署中、关联公网IP配置错误
排查解决步骤
按优先级从高到低依次操作:
- 升级本地Azure CLI到最新版本,终端执行以下命令:
az upgrade
升级完成后关闭当前终端重新打开,执行az login重新登录账号后重试连接,该步骤可解决绝大多数Windows环境下触发的该报错。
2. 校验Bastion配置合规性
- 确认Bastion实例为标准SKU,基础SKU无原生客户端连接能力,需先升级SKU
- 进入Bastion资源的配置页面,确认「原生客户端支持」选项已勾选保存,配置更新后等待10分钟左右待实例生效再重试
- 校验账号与资源锁配置
- 确认当前登录账号至少拥有目标虚拟机、Bastion实例的读取权限,以及Bastion的连接操作权限
- 检查Bastion、目标虚拟机、关联虚拟网络所在的资源组和订阅是否配置了只读锁,若存在需先移除锁再尝试连接
- 排查本地网络拦截问题
- 临时关闭本地运行的代理、VPN、第三方防火墙/安全软件后重试
- 单独执行
az account get-access-token验证令牌获取能力,如果该命令同样执行失败,说明本地到Azure ARM端点的网络连通性存在问题,需先修复本地网络
- 校验Bastion实例运行状态
- 在Azure门户查看Bastion的资源健康状态,确认实例运行正常,无正在进行的升级、部署任务
- 尝试通过Azure门户的Bastion网页端直接连接目标虚拟机,如果网页端也无法连接,说明Bastion服务本身异常,可等待服务自动恢复或重新部署Bastion实例
内容的提问来源于stack exchange,提问作者Mahmud Hasan Khan
相关产品推荐
相关产品推荐

