如何通过命令行获取阿里云ECS实例的公网IP?

在阿里云 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-cliacs-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)"