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

4
我有一个动态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的内容。但我不知道如何让SSH委托公共IP或主机名解析到aws命令。

如果可能的话,我也更喜欢不使用外部脚本。

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 不是 代理命令 的有效标记。

相关问题

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


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