ssh配置动态IP

Gon*_*dez 3 ssh

我有一个具有动态 IP 的 EC2 实例,我想直接连接到它,而不必.ssh/config每次更改时都进行修改。

我可以查询ip

aws ec2 describe-instances --filters 'Name=tag:Name,Values=MYTAG' --query 'Reservations[0].Instances[0].NetworkInterfaces[0].Association.PublicIp' --output text
Run Code Online (Sandbox Code Playgroud)

现在,我想将此命令添加到ProxyCommand我的.ssh/config文件中的部分,但出现一些错误。

这是该主机的部分

Host ec2-instance
     User ubuntu
     IdentityFile my/pem/file.pem
     ProxyCommand bash -c "host=$(aws ec2 describe-instances --filters 'Name=tag:Name,Values=MYTAG' --query 'Reservations[0].Instances[0].NetworkInterfaces[0].Association.PublicIp' --output text); ssh ${host}"

Run Code Online (Sandbox Code Playgroud)

老实说,我不知道这个ProxyCommand选项是如何工作的,而且man ssh似乎也man ssh_config没有很好地解释它。

这可以实现吗?

use*_*686 5

ProxyCommand 充当原始 TCP 连接的替代方案。它不会取代整个 SSH 连接 \xe2\x80\x93 尽管您经常看到它用于调用ssh -W,但这仍然只是使用另一个 SSH 系统来提供原始 TCP 隧道。

\n

因此,在您的情况下,ProxyCommand 应该运行一些简单的“TCP 管道”应用程序,例如或nc\ xe2\x80\x93 任何将 stdin/stdout 连接到 TCP 连接的应用程序都可以:socatncat

\n
Host ...\n    ProxyCommand bash -c "host=...; nc $host %p"\n\nHost ...\n    ProxyCommand bash -c "host=...; socat STDIO TCP:$host:%p"\n
Run Code Online (Sandbox Code Playgroud)\n

我真的建议将所有复杂的内容从 ~/.ssh/config 移到一个单独的脚本中,以便您的配置看起来像这样:

\n
Host ...\n    ProxyCommand ~/bin/ec2-connect %h %p\n
Run Code Online (Sandbox Code Playgroud)\n