使用bash中的ec2命令行工具获取ec2实例的公共DNS名称

use*_*294 13 dns amazon-ec2 amazon-web-services

我有一个ec2实例的名称,并希望对它进行ssh.如何使用ec2实例名称找出ec2实例的"公共DNS".

我想用bash来做.

mat*_*rns 14

aws ec2 describe-instances --instance-ids i-12abc34 --query 'Reservations[].Instances[].PublicDnsName'
Run Code Online (Sandbox Code Playgroud)

其中i-12abc34是您的实例ID


Ger*_*erg 10

您可以查询实例元数据服务。

使用卷曲:

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

使用 wget:

wget -qO - http://169.254.169.254/latest/meta-data/public-hostname
Run Code Online (Sandbox Code Playgroud)

如果勇敢的话,真正的bash

exec 3<> /dev/tcp/169.254.169.254/80
echo -e "GET /latest/meta-data/public-hostname HTTP/1.0\r\n\r\n" >&3
cat <&3
Run Code Online (Sandbox Code Playgroud)

(最后一个为我打开了连接,因此cat卡住了。标头也出现在输出中)

(这是来自实例本身,需要访问实例 - 它不是与实例名称相关的版本。这里有足够的答案)


Ben*_*ley 7

使用EC2 API工具:

# Region is only needed if not in us-east-1
$ ec2-describe-instances --region <region> <instance id> 
Run Code Online (Sandbox Code Playgroud)

使用统一的AWS CLI工具:

$ aws --region <region> ec2 describe-instances --instance-ids <instance id?
Run Code Online (Sandbox Code Playgroud)

我更喜欢统一工具,因为它提供了全面和一致的数据.

  • 您可以使用```--query```参数进一步限制输出到公共DNS名称,例如```--query"Reservations [].Instances [].PublicDnsName"``` (3认同)