【问题标题】:Get Public IP Address on current EC2 Instance获取当前 EC2 实例上的公共 IP 地址
【发布时间】:2016-12-05 09:11:12
【问题描述】:

使用 Amazon CLI,有没有办法获取当前 EC2 的公共 IP 地址?我只是在寻找单个字符串值,所以不是 json 响应 describe-addresses 返回。

【问题讨论】:

    标签: amazon-web-services amazon-ec2


    【解决方案1】:

    AWS Command-Line Interface (CLI) 可用于返回任何/所有 Amazon EC2 实例的信息,例如:

    $ aws ec2 describe-instances --instance-ids i-0c9c9b44b --query 'Reservations[*].Instances[*].PublicIpAddress' --output text
    
    54.232.200.77
    

    如果您正在查找有关执行命令的 EC2 实例的信息,则可以通过 instance metadata service 获取当前 IP 地址:

    $ curl http://169.254.169.254/latest/meta-data/
    
    ami-id
    ami-launch-index
    ami-manifest-path
    block-device-mapping/
    hostname
    iam/
    instance-action
    instance-id
    instance-type
    local-hostname
    local-ipv4
    mac
    metrics/
    network/
    placement/
    profile
    public-hostname
    public-ipv4
    public-keys/
    reservation-id
    security-groups
    services/
    

    因此,私有 IP 地址可通过以下方式获得:

    $ curl http://169.254.169.254/latest/meta-data/local-ipv4
    
    172.31.10.221
    

    公共 IP 地址可通过以下方式获得:

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

    【讨论】:

    • 我添加了两个公共 IP 地址,并且我使用了 curl 169.254.169.254/latest/meta-data/public-ipv4 命令,但它显示了我最近添加的 IP 地址。有没有办法列出实例中的所有公共 IP 地址?
    • @Techiescorner 你可以运行类似curl http://169.254.169.254/latest/meta-data/network/interfaces/macs/09:34:54:0a:9b:4a/public-ipv4s 的东西来使用每个接口的mac 地址获取每个接口的公共IP(你可以从ifconfig-a 获取)
    • Duke 在下面点击 checkip.amazonaws.com 的建议更简单,不需要访问实例配置文件或 IAM 凭证,这在某些环境中可能会受到限制。(例如在 CI 提供商上运行)
    • 在 Windows 上,我必须使用双引号才能在命令提示符下工作
    【解决方案2】:
    curl http://checkip.amazonaws.com
    

    这将返回公共 IP 地址。

    【讨论】:

    • AWS 是否有关于此 Web 服务的官方文档?或者是那些 hacky 的?顺便说一下,https 也适用于该网络服务。那里的答案很好!
    • 这真的很有趣。 Https 比 http 慢很多,当然,两者都比 curling 169.254.169.254 慢得多(不允许使用 https)。
    • 他们在docs.aws.amazon.com/cli/latest/userguide/…987654322@ 的小笔记中记录了它
    【解决方案3】:

    如果你在实例内 -

    $ curl icanhazip.com
    162.202.17.123
    

    还有一种方法

    $ curl -s ifconfig.me
    162.202.17.123
    

    这些方法不仅限于 AWS。

    【讨论】:

    • 就个人而言,我尽量避免使用这些网站,因为我无法控制它们在公共地址上捕获和登录的内容。根据其他答案,最好在您自己的基础架构、aws cli 或 curl 上使用 169.254.169.254 下的受控端点。
    • 他们也会厌倦支付域名和托管的一天,你的服务会突然停止工作,因为它无法解析随机陌生人的域名和你建立的免费服务依赖。
    • 他们确实开始阻止来自 AWS 的调用。
    • 我又增加了一种获取ip的方法。
    【解决方案4】:

    使用 PublicIP 获取附加的 InstanceID。

    aws ec2 describe-network-interfaces --query NetworkInterfaces[*].[Attachment.[InstanceId],Association.[PublicIp]] --output=json
    

    【讨论】:

      【解决方案5】:

      从内部实例输入以下命令:

        curl -s v4.ident.me
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-10-22
        • 2014-10-24
        • 1970-01-01
        • 2015-06-07
        • 1970-01-01
        • 2018-01-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多