You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取EC2实例IPv4?解决Bash脚本错误及SSM实现方案

问题修复与SSM获取IPv4方法

你的脚本核心问题是变量赋值时未做命令替换——Bash中要将命令输出赋值给变量,必须用$(命令)或反引号`命令`包裹,否则Shell会把命令参数当成独立命令执行,这就是你遇到-s: command not found这类报错的原因。

修正后的EC2元数据获取脚本

用$()包裹命令完成变量赋值,同时补充sudo权限(写入/etc/hosts需要管理员权限):

# 获取元数据令牌
TOKEN=$(curl -s -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600")

# 获取实例本地IPv4(用curl更统一,Amazon Linux 2默认预装)
INSTANCE_IP=$(curl -s --header="X-aws-ec2-metadata-token:$TOKEN" http://169.254.169.254/latest/meta-data/local-ipv4)

# 追加到/etc/hosts
echo "$INSTANCE_IP whatever.hostname.com" | sudo tee -a /etc/hosts

如果坚持用wget,同样要做命令替换:

INSTANCE_IP=$(wget --header="X-aws-ec2-metadata-token:$TOKEN" -qO- http://169.254.169.254/latest/meta-data/local-ipv4)

用SSM获取实例IPv4的两种场景

1. 在EC2实例内部通过SSM Agent获取

Amazon Linux 2默认预装SSM Agent,只需实例绑定的IAM角色拥有ssm:GetParameter权限,即可通过SSM参数存储获取自身元数据:

# 自动获取当前实例ID并查询本地IPv4
INSTANCE_IP=$(aws ssm get-parameter --name "/aws/ec2/instance/${AWS_INSTANCE_ID}/meta-data/local-ipv4" --query "Parameter.Value" --output text)

2. 在本地/管理机器上通过AWS CLI获取远程实例IPv4

先拿到目标实例ID,执行以下命令(本地CLI需配置拥有ec2:DescribeInstances权限的凭证):

# 替换为目标实例ID
INSTANCE_ID="i-xxxxxxxxx"
# 获取私有IPv4,如需公网IP则把PrivateIpAddress换成PublicIpAddress
INSTANCE_IP=$(aws ec2 describe-instances --instance-ids $INSTANCE_ID --query "Reservations[0].Instances[0].PrivateIpAddress" --output text)

内容的提问来源于stack exchange,提问作者Legion_of_boom__

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 11:40:48