![如何在 AWS 中获取我的 Ubuntu 实例的 IP](https://linux22.com/image/950282/%E5%A6%82%E4%BD%95%E5%9C%A8%20AWS%20%E4%B8%AD%E8%8E%B7%E5%8F%96%E6%88%91%E7%9A%84%20Ubuntu%20%E5%AE%9E%E4%BE%8B%E7%9A%84%20IP.png)
如何在 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 的服务器上运行,无论它托管在何处。