能否查询MSI本地端点运行端口?含VM内脚本实现方法
查询MSI本地端点运行端口及脚本实现方法
当然可以查询MSI(Managed Service Identity)本地端点的运行端口!不管是Windows还是Linux虚拟机,都能通过简单的脚本快速获取端口信息,下面是具体的实现方法:
Windows虚拟机(PowerShell脚本)
MSI的本地端点信息通常会通过环境变量暴露,也可以通过网络连接监听信息来查询:
方法1:从环境变量提取端口
IDENTITY_ENDPOINT环境变量直接包含了MSI端点的完整URL,我们可以从中解析出端口:
# 获取并解析IDENTITY_ENDPOINT环境变量 $identityEndpoint = $env:IDENTITY_ENDPOINT if ($identityEndpoint) { $port = [Uri]$identityEndpoint | Select-Object -ExpandProperty Port Write-Host "MSI本地端点运行端口: $port" } else { Write-Host "未检测到MSI本地端点环境变量,请确认虚拟机已启用MSI功能" }
方法2:通过网络连接查询监听端口
如果环境变量未生效,也可以直接查找监听169.254.169.254(MSI元数据服务默认IP)的TCP端口:
# 筛选本地地址为169.254.169.254的TCP连接 Get-NetTCPConnection -LocalAddress 169.254.169.254 | Select-Object LocalPort, State
Linux虚拟机(Shell脚本)
Linux环境下同样可以通过环境变量或网络工具查询:
方法1:从环境变量提取端口
利用字符串处理工具从IDENTITY_ENDPOINT中提取端口:
# 检查环境变量并解析端口 if [ -n "$IDENTITY_ENDPOINT" ]; then port=$(echo "$IDENTITY_ENDPOINT" | awk -F ':' '{print $3}' | awk -F '/' '{print $1}') echo "MSI本地端点运行端口: $port" else echo "未检测到MSI本地端点环境变量,请确认虚拟机已启用MSI功能" fi
方法2:通过ss命令查询监听端口
使用ss工具(替代netstat的现代工具)查找监听指定IP的端口:
# 查找监听169.254.169.254的TCP/UDP端口 ss -tuln | grep 169.254.169.254
小提示:如果以上方法没有返回结果,大概率是虚拟机尚未启用MSI功能,需要先在Azure门户中为虚拟机开启Managed Service Identity。
内容的提问来源于stack exchange,提问作者Roopesh Nair
相关产品推荐
相关产品推荐

