仅使用实例ID SSH连接Amazon EC2

3
我想开启/关闭我的Amazon EC2实例,但这会导致IP和所有DNS名称发生更改。因此,当我再次启动我的机器时,由于我是使用先前的DNS名称进行连接,所以所有SSH配置都会丢失。
是否有一种简单的方法来解决目标机器的DNS(成本尽可能低)仅使用其实例ID(或任何其他在关闭-重新启动期间不会更改的参数)? 我必须使用AWS-CLI吗?如果我想为没有AWS凭据的人提供对EC2机器的访问权限怎么办?
不确定像“服务发现”,“代理”之类的标签是否真的有意义,但为了参考,我在我的帖子中添加了它们。
我不想付弹性IP的费用。

1
也许您可以使用awscli或等效工具动态查询给定实例ID的IP和DNS名称。您需要一组非常基本的凭据,允许DescribeInstances操作。 - jarmod
4个回答

4
已经有了这样的工具,不需要自己造轮子:ec2ssh是一个Python脚本,但在Google搜索 ec2ssh 将会找到许多用多种语言编写的类似工具来完成任务。
个人建议,使用一个带有EIP的堡垒机,在那里跳转到其他所有主机。这样,您无需为管理员访问而为实例分配公共IP。如果您不传输大文件,可以使用t2.nano作为堡垒实例,这样预留成本每个月只需要花费很少。Ec2ssh支持堡垒机,因此配置开销很小。

令人惊讶的是,我找到的这个 Ruby 宝石都已经过时了,无法在最新的 Ruby 上运行... - Cyril Duchon-Doris
1
我在使用pip安装Python时也遇到了奇怪的错误... AttributeError: 'function' object has no attribute 'main' - Cyril Duchon-Doris

2

基于 @jarmod 的评论,如果您知道实例ID,则可以使用awscli获取IP地址,如下所示:

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

话虽如此,我不确定为什么您认为弹性IP很贵。根据定价页面,与运行中的实例相关联的弹性IP是免费的,未与实例关联的弹性IP每小时收费$0.005。


1
是的,我完全有能力做数学。我想这取决于您是否认为每年43.80美元是“昂贵的”,以及为什么IP会与任何重要时间相关联。如果您真的需要短暂的弹性IP,我想您可以编写脚本来分配、关联、取消关联和释放过程-但为什么不为每个实例分配一个免费的弹性IP呢? - Brian

0

但是弹性IP地址很昂贵,而且即使它们没有被使用,你也需要支付费用(参见我的最后一行)。 - Cyril Duchon-Doris
3
最好的解决方案是创建一个Route53区域,创建一个可以管理该区域的角色并将此角色分配给你的实例。这样,你就可以运行一个启动脚本,使用Route53 API来更新DNS名称与当前EC2实例ID相匹配。 - Sergey Kovalev

0
这个工具应该可以满足你的需求:https://github.com/wagoodman/bridgy 使用以下命令:bridgy ssh <some-instance-id> 如果你已经像使用aws-cli一样定义了~/.aws凭证/配置,并且在~/.bridgy/config.yml中添加了以下内容:
inventory:
    source: aws
    update_at_start: true
ssh:
    user: <your ssh user>
...

那么它应该可以工作!

声明:我是作者。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接