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

2024-01-09

我有一个动态 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命令。

  • 我看到不同的人有用于生成的脚本ssh_config from aws https://github.com/gianlucaborello/aws-ssh-config,但是如果脚本要修改该文件,我还有其他东西我不想丢失。
  • 其他一些人有要使用的 shell 别名来代替ssh https://stackoverflow.com/a/21427877/241211,但这会让其他专门依赖 SSH 的服务变得复杂。

我也愿意prefer如果可能的话不要使用外部脚本。

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 is 不是有效的令牌ProxyCommand https://man7.org/linux/man-pages/man5/ssh_config.5.html#TOKENS.

相关问题

  • 堆栈溢出:Amazon EC2 主机名 https://stackoverflow.com/q/18836503/241211

  • 服务器故障:动态生成 SSH 主机条目~/.ssh/config https://serverfault.com/a/536934/115583

  • Unix 和 Linux:配置SSH读取HostName对于来自文件的主机 https://unix.stackexchange.com/q/625121/143088

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐