如何从 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 吗?
一个更简单的
curl
命令是:并将返回以下输出:
正如您在此处看到的,获取“公共 IPv4”的 URL 将是:
其他一些(shell 脚本)示例:
另一方面,要使用系统命令获取本地 IPv4 地址和 IPv6 地址(AWS 不提供查询 IPv6 地址的 API),您可以使用:
请注意,除非您在外部服务器上请求它,否则无法获得公共 IPv4,例如“AWS 服务器”(
http://169.254.169.254/
) 或 Internet 上的服务器(如其他答案中提供的)。对于私有 ip 地址,您可以使用 ifconfig 或 ip addr 命令等 Ubuntu 命令来获取它。您还可以使用 获取一个特定接口的 IP 地址
ip addr show dev <interface name>
。更多信息在这篇文章中解释。这是一个例子:
对于公共 ip 地址,您可以使用aws ec2 命令。此命令将列出有关您的实例的详细信息,如磁盘信息、网络接口、aws 实例类型等。获取有关您的 ec2 实例的更多信息非常有帮助。 在运行此命令之前,您可能需要安装 awscli 。以下示例将根据私有 ip 地址过滤器列出实例详细信息。
我通常为此使用外部服务。如果您希望将服务器的 IPv4 地址记录在名为 的文件中
ip_v4.txt
,您可以这样做:如果您想要一个名为 的文件中的 IPv6 地址
ip_v6.txt
,您可以这样做:当然,您可能需要自定义它以按照您喜欢的方式输出地址。
这解决了使用 Amazon 的各种 API 的问题,并提供了一些更通用的东西,可以在任何基于 Linux 的服务器上运行,无论它托管在何处。