我可以设置 ~/.ssh/config 来查找动态 EC2 主机名吗?

Posted

技术标签:

【中文标题】我可以设置 ~/.ssh/config 来查找动态 EC2 主机名吗?【英文标题】:Can I set ~/.ssh/config to look up dynamic EC2 hostnames? 【发布时间】:2019-08-29 23:11:21 【问题描述】:

我有一个动态 IP 上的 EC2 实例,它没有执行任何类型的 DDNS 来保持指向它的公共主机名。我想在我的ssh_config 中为服务器设置一个快捷方式,并让aws CLI 告诉我IP 或主机名是什么。

$ aws ec2 describe-instances \
    --filters Name=key-name,Values=FOO \
    --query 'Reservations[*].Instances[*].PublicDnsName' \
    --output 'text'
ec2-XXX-XXX-XXX-XXX.compute-X.amazonaws.com

但我不知道如何将公共 IP 或主机名解析委派给 aws

我看到很多人都有scripts for generating an ssh_config from aws,但是如果脚本要修改文件,我不想丢失其他东西。其他一些人有shell aliases to use instead of ssh,但这会使其他专门依赖 SSH 的服务变得复杂。

如果可能,我也宁愿不要使用外部脚本。

Host FOO ec2-FOO
    User ec2-user
    IdentityFile ~/.ssh/creds/some.pem

    # Irrelevant?
    Hostname example.com

    # Neither alternative below works (assume full `aws` command)
    ProxyCommand bash -c 'ssh -i %i %u@$(aws ec2 describe-instances …)'
    ProxyCommand nc $(aws ec2 describe-instances …) %p

注意%i(上面用于指定IdentityFile)是not a valid token for ProxyCommand

相关问题

堆栈溢出:Amazon EC2 hostnames 服务器故障:Dynamically generate SSH Host entries in ~/.ssh/config

【问题讨论】:

【参考方案1】:

这违反了问题中的一些要求,将不被接受:

您可以使用Include 关键字添加一个单独的ssh_config 文件,您可以使用脚本更新该文件。它可以防止您的主要配置因脚本运行不良而受到破坏。

# Primary ~/.ssh/config
Include config-ec2
# Periodically regenerated ssh_config at ~/.ssh/config-ec2
Host FOO ec2-FOO
    User ec2-user
    HostName ec2-XXX-XXX-XXX-XXX.compute-X.amazonaws.com

    # Figuring out how to specify a different pem for
    # each connection is still troublesome.
    IdentityFile ~/.ssh/creds/some.pem

从好的方面来说,这可以让您保持ProxyCommand 可用于实际代理。

【讨论】:

以上是关于我可以设置 ~/.ssh/config 来查找动态 EC2 主机名吗?的主要内容,如果未能解决你的问题,请参考以下文章

centos7 ssh 设置key认证

~/.ssh/config 文件可以使用变量吗?

解决ssh登陆很慢的问题

Ubuntu下开启ssh并允许root用户登录

重定向和文件查找

find命令文件后缀名