在阿里云 ECS 实例内部,可以通过以下几种命令行方式获取公网 IP:
方法一:使用 curl 访问元数据服务(推荐)
# 获取公网 IPv4 地址
curl http://100.100.100.200/latest/meta-data/public-ipv4
# 如果实例有公网 IPv6,也可获取:
curl http://100.100.100.200/latest/meta-data/public-ipv6
说明:这是阿里云实例元数据服务(IMDS),无需额外权限,适用于大多数 Linux 发行版。需确保系统已安装
curl。
方法二:通过 wget 替代(若无 curl)
wget -qO- http://100.100.100.200/latest/meta-data/public-ipv4
方法三:查看网络接口配置(辅助验证)
# 查看 eth0 等网卡信息(部分场景可能不直接显示公网 IP)
ip addr show | grep inet
# 或
ifconfig eth0 | grep "inet"
注意:此方法获取的是内网 IP或绑定弹性公网 IP 后的虚拟 IP,不一定等于公网出口 IP,尤其在多网卡或 NAT 场景下。
方法四:调用阿里云 CLI(需提前配置)
若已在实例内安装并配置好 aliyun-cli 或 acs-cli:
# 使用 aliyun-cli(需授权和配置)
aliyun ecs DescribeInstances --InstanceIds i-bp1xxxxxxxxxxxxx | jq '.Instances.Instance[0].PublicIpAddress.IpAddress'
# 或使用 acs-cli(旧版,逐渐弃用)
acs-cli ecs.DescribeInstances --InstanceId i-bp1xxxxxxxxxxxxx | grep PublicIpAddress
注意:此方法需要实例拥有对应 RAM 权限,且通常用于脚本自动化,不如元数据服务便捷。
✅ 最佳实践建议:
优先使用 方法一(curl 访问元数据),它轻量、可靠、无需额外依赖,是阿里云官方推荐的获取实例元数据的方式。
如需批量获取或写入脚本,可封装为函数:
get_public_ip() {
curl -s http://100.100.100.200/latest/meta-data/public-ipv4
}
echo "$(get_public_ip)"
PHPWP博客