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



我在动态 IP 上有一个 EC2 实例,它没有执行任何类型的 DDNS 来保持公共主机名指向它。我想在ssh_config中为服务器设置一个快捷方式,并要求awsCLI 告诉我 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的内容。但是我无法弄清楚如何让 SSH 将公共 IP 或主机名解析委托给aws命令。

  • 我看到各种各样的人都有从aws生成ssh_config的脚本,但是如果脚本要修改文件,我宁愿不要丢失其他东西。
  • 其他一些人可以使用 shell 别名而不是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

请注意,上面用于指定IdentityFile%i不是ProxyCommand的有效令牌。

相关问题

  • 堆栈溢出:Amazon EC2 主机名

  • 服务器故障:动态生成 SSH 主机条目~/.ssh/config

  • Unix & Linux:配置 SSH 以从文件中读取主机的HostName

    ProxyCommand ssh -p %p "$(aws ec2 describe-instances …)" nc localhost %p
    

    这可能有答案,但我无法让它工作。

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

可以使用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可用于实际代理。

最新更新