如何在 AWS 中获取我的 Ubuntu 实例的 IP

如何在 AWS 中获取我的 Ubuntu 实例的 IP

如何在 EC2 实例内部(即连接后)查看分配给该 EC2 实例的公有 IP 地址?只需在管理控制台中查看,即可看到分配给该实例的公有 IP 地址。

AWS 文档,我们可以使用以下curl命令获取公共ip地址。

$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` && curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data

但看起来它不起作用。

$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` && curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    56  100    56    0     0  28000      0 --:--:-- --:--:-- --:--:-- 56000
*   Trying 169.254.169.254:80...
* TCP_NODELAY set
* Connected to 169.254.169.254 (169.254.169.254) port 80 (#0)
> GET /latest/meta-data HTTP/1.1
> Host: 169.254.169.254
> User-Agent: curl/7.68.0
> Accept: */*
> X-aws-ec2-metadata-token: AQAAAEKVNCUB3KPoodSB0SFUkkn1aSah2MRUxAVQQx_3SeVBllVoFA==
> 
* Mark bundle as not supporting multiuse
* HTTP 1.0, assume close after body
< HTTP/1.0 200 OK
< Accept-Ranges: bytes
< Content-Length: 324
< Content-Type: text/plain
< Date: Tue, 29 Nov 2022 11:29:43 GMT
< Last-Modified: Wed, 23 Nov 2022 18:36:36 GMT
< X-Aws-Ec2-Metadata-Token-Ttl-Seconds: 21600
< Connection: close
< Server: EC2ws
< 
ami-id
ami-launch-index
ami-manifest-path
auth-identity-credentials/
block-device-mapping/
events/
hostname
iam/
identity-credentials/
instance-action
instance-id
instance-life-cycle
instance-type
local-hostname
local-ipv4
mac
metrics/
network/
placement/
profile
public-keys/
reservation-id
security-groups
services/

知道如何在 EC2 实例中获取公共 IP 吗?

答案1

更简单的curl命令是:

$ curl -s http://169.254.169.254/latest/meta-data

并将返回以下输出:

ami-id
ami-launch-index
ami-manifest-path
block-device-mapping/
events/
hostname
identity-credentials/
instance-action
instance-id
instance-life-cycle
instance-type
ipv6
local-hostname
local-ipv4
mac
metrics/
network/
placement/
profile
public-hostname
public-ipv4
public-keys/
reservation-id
security-groups
services/

正如您在此处看到的,获取“公共 IPv4”的 URL 将是:

$ curl -s http://169.254.169.254/latest/meta-data/public-ipv4

其他一些(shell脚本)示例:

localIP=$(curl -s http://169.254.169.254/latest/meta-data/local-ipv4)
publicIP=$(curl -s http://169.254.169.254/latest/meta-data/public-ipv4)
inst_type=$(curl -s http://169.254.169.254/latest/meta-data/instance-type)
av_zone=$(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone)

另一方面,要获取本地 IPv4 地址和 IPv6 地址(AWS 不会不是提供了一个通过系统命令查询IPv6地址的API,你可以使用:

$ hostname -I

http://169.254.169.254/请注意,除非您在外部服务器(如“AWS 服务器”( )或 Internet 上的服务器(如其他答案中所述))上请求,否则无法获取公共 IPv4。

答案2

我通常使用外部服务来实现这一点。如果您希望将服务器的 IPv4 地址记录在名为的文件中ip_v4.txt,您可以执行以下操作:

wget -q -nv https://api.ipify.org -O ip_v4.txt

如果您想要将 IPv6 地址存储在名为 的文件中ip_v6.txt,您可以执行以下操作:

wget -q -nv https://api64.ipify.org -O ip_v6.txt

当然,您可能需要对其进行自定义,以便按照您喜欢的方式输出地址。

这解决了使用亚马逊各种 API 的问题,并提供了更通用的功能,可以在任何基于 Linux 的服务器上运行,无论它托管在何处。

相关内容