我有一个动态 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
命令。
- 我看到不同的人有用于生成的脚本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(使用前将#替换为@)