列出EC2实例的公共IP地址

Bas*_*ers 39 bash amazon-ec2 amazon-web-services aws-cli jq

我想使用Bash列出我的EC2实例的公共IP地址,用分隔符(空格或换行符)分隔.

我试图管道输出到JQaws ec2 describe-instances | jq,但似乎不能只是孤立的IP地址.

这可以aws单独完成,指定参数jq或完全不同的东西吗?

fae*_*anj 89

直接来自aws cli:

aws ec2 describe-instances \
  --query "Reservations[*].Instances[*].PublicIpAddress" \
  --output=text
Run Code Online (Sandbox Code Playgroud)

  • 将你的`PublicIpAddress`包装在方括号中以确保每行1个,如下所示:https://github.com/aws/aws-cli/issues/914#issuecomment-56210312.这适用于我`--query'Reservations [] .Instances [].[PublicIpAddress]` (6认同)
  • 如果您希望实例的KeyName与公共IP地址一起使用,则可以通过--query“ Reservations [*]。Instances [*]。[KeyName,PublicIpAddress]”`来获取。 (2认同)

小智 6

  • 筛选正在运行的实例(如果不需要,可以删除该部分)
  • 查询每个PublicIPaddress和Name标记,在未设置Name的情况下进行处理

    AWS EC2 describe-instances --filter“ Name = instance-state-name,Values = running” --query“ Reservations [ ] .Instances [ ]。[PublicIpAddress,Tags [?Key =='Name']。Value | [ 0]]“-输出文本


A N*_*ter 5

以下命令将列出所有正在运行的EC2实例的IP地址

aws ec2 describe-instances | grep PublicIpAddress | grep -o -P "\d+\.\d+\.\d+\.\d+" | grep -v '^10\.'
Run Code Online (Sandbox Code Playgroud)

希望能回答您的疑问.


Sar*_*dra 5

aws ec2 describe-instances --query "Reservations[].Instances[][PublicIpAddress]"
Run Code Online (Sandbox Code Playgroud)

请参阅: http ://docs.aws.amazon.com/cli/latest/userguide/controlling-output.html


Fré*_*nri 5

您可以使用实例元数据,以便从 ec2 实例运行以下命令:

curl http://169.254.169.254/latest/meta-data/public-ipv4
Run Code Online (Sandbox Code Playgroud)

它将为您提供实例的公共 IP。如果你想要私有IP,你将运行

curl http://169.254.169.254/latest/meta-data/local-ipv4
Run Code Online (Sandbox Code Playgroud)

  • 这很棒!但是,我建议使用 `wget -qO -` 而不是 `curl`(即使我在我的脚本中使用 curl 99.9% 或时间。原因是如果服务器没有,`curl` 将输出 404 页面的内容'没有公共 IP,而 `wget` 没有。所以在 bash 中很容易做到 `public_ip="$(wget -qO - http://169.254.169.254/latest/meta-data/public-ipv4)" ` 并获得预期结果。然后您可以使用 `if [[ -n $public_ip ]]; then echo "Public IP: $public_ip"; fi` 进行测试 (2认同)