【问题标题】:SSH to Amazon EC2 using instance ID only仅使用实例 ID SSH 到 Amazon EC2
【发布时间】:2016-12-08 17:08:07
【问题描述】:

我想打开/关闭我的一些 Amazon EC2 实例,但这会导致 IP 和所有 DNS 名称发生变化。因此,当我再次启动我的机器时,我所有的 SSH 配置都丢失了,因为我使用以前的 DNS 名称进行连接。

有没有一种简单的方法来解析目标机器的 dns(没有或尽可能低的成本),只使用它的实例 ID(或任何其他不会在关机重启时改变的参数)?我必须使用 AWS-CLI 吗?如果我想向没有 AWS 凭证的人提供对 EC2 机器的访问权限怎么办?

不确定“service-discovery”、“broker”或“proxy”之类的标签在这里是否真的有意义,但为了参考,我将它们添加到我的帖子中。

我不想为弹性 IP 付费。

【问题讨论】:

  • 也许您可以使用 awscli 或等效项动态查询给定实例 ID 的 IP 和 DNS 名称。您需要一组非常基本的凭据来允许 DescribeInstances。

标签: amazon-web-services ssh amazon-ec2 dns service-discovery


【解决方案1】:

已经有 Utils 可以做到这一点,无需自己动手:ec2ssh 是一个 python 脚本,但ec2ssh 的谷歌将提供多种语言的许多类似工具来完成这项工作。

就个人而言,我使用 EIP 设置了一个堡垒,然后从那里跳转到所有其他主机。这样,您无需为您的实例提供公共 IP 来进行管理员访问。如果您不传输大文件,您可以使用 t2.nano 作为堡垒实例,如果您预订的话,您会花费一个月的时间。

Ec2ssh 支持堡垒,因此配置开销最小。

【讨论】:

  • 令人惊讶的是,我为这颗找到的红宝石都已过时,并且不适用于最近的红宝石......
  • 我在通过 pip 安装 python 时也遇到了奇怪的错误...AttributeError: 'function' object has no attribute 'main'
【解决方案2】:

根据@jarmod 的评论,如果您知道实例 ID,那么您可以使用 awscli 来获取 IP,如下所示:

aws ec2 describe-addresses --filters Name=instance-id,Values=i-xxxxxxxxxxxxxxxxx | grep PublicIp | awk -F\" '{print $4}'

话虽如此,我不确定您为什么认为弹性 IP 价格昂贵。根据the Pricing page,弹性 IP 在与正在运行的实例关联时是免费的,在与实例不关联时是 0.005 美元/小时。

【讨论】:

  • 是的,我完全有能力做数学。我想这取决于您是否认为 43.80 美元/年是“昂贵的”,以及为什么 IP 会在任何重要时期内关联。如果您确实需要临时弹性 IP,我想您可以编写分配、关联、解除关联和释放过程的脚本 - 但为什么不为每个实例分配一个免费的弹性 IP 并收工?
【解决方案3】:

EC2 弹性 IP 正是您想要的。实例将在重新启动和启动/停止周期期间保留其弹性 IP(和关联的 DNS 名称)。 https://aws.amazon.com/ec2/pricing/on-demand/#Elastic_IP_Addresses

请记住:它仅适用于 VPC EC2 实例。旧的“经典”实例将失去其弹性 IP,您将不得不再次手动关联它。

【讨论】:

  • 但是弹性 IP 很贵,你需要在它们不使用的时候付费(参见我的最后一行)
  • 那么最好的解决方案是创建 Route53 区域,创建一个可以管理该区域的角色并将该角色分配给您的实例。这样您就可以运行一个启动脚本,该脚本将使用 Route53 API 来使用当前 EC2 实例 ID 更新 DNS 名称。
【解决方案4】:

这个工具应该能满足你的要求:https://github.com/wagoodman/bridgy

bridgy ssh <some-instance-id>

如果您像使用 aws-cli 以及 ~/.bridgy/config.yml 中的以下内容一样定义了 ~/.aws creds/config:

inventory:
    source: aws
    update_at_start: true
ssh:
    user: <your ssh user>
...

那么它应该可以工作了!

披露:我是作者。

【讨论】:

    猜你喜欢
    • 2012-05-04
    • 2015-06-22
    • 2018-08-23
    • 2015-10-25
    • 1970-01-01
    • 2013-03-28
    • 2018-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多