我有一个具有动态 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没有很好地解释它。
这可以实现吗?
ProxyCommand 充当原始 TCP 连接的替代方案。它不会取代整个 SSH 连接 \xe2\x80\x93 尽管您经常看到它用于调用ssh -W,但这仍然只是使用另一个 SSH 系统来提供原始 TCP 隧道。
因此,在您的情况下,ProxyCommand 应该运行一些简单的“TCP 管道”应用程序,例如或nc\ xe2\x80\x93 任何将 stdin/stdout 连接到 TCP 连接的应用程序都可以:socatncat
Host ...\n ProxyCommand bash -c "host=...; nc $host %p"\n\nHost ...\n ProxyCommand bash -c "host=...; socat STDIO TCP:$host:%p"\nRun Code Online (Sandbox Code Playgroud)\n我真的建议将所有复杂的内容从 ~/.ssh/config 移到一个单独的脚本中,以便您的配置看起来像这样:
\nHost ...\n ProxyCommand ~/bin/ec2-connect %h %p\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
1842 次 |
| 最近记录: |