4

我在动态 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

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

我看到很多人都有用于生成ssh_configfromaws的脚本,但是如果脚本要修改文件,我不想丢失其他东西。其他一些人使用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

请注意,%i(上面用于指定IdentityFile不是 的有效标记ProxyCommand

相关问题

4

1 回答 1

3

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

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

于 2019-04-17T16:28:13.823 回答