是否可以将多个 ssh 连接与指定为 ssh 主机的每个连接链接在一起?
我知道可以使用该-W
标志或nc
进行第二跳到另一个主机名或 IP 地址(参见,例如,通过多个主机进行 ssh)。由于几个原因,我无法让它按照我想要的方式工作。首先,对于第二跳,我想使用存储在中间主机上的密钥文件,但我没有找到使用 或 来指定它的-W
方法nc
。其次,最终目的地有一个可变的IP地址。为了解决这个问题,我在目标上运行一个脚本,将其 IP 地址写入存储在中间主机上的文件,然后look_up_ip.sh
在中间主机上运行一个脚本 ( ) 打印出该 IP 地址。在中间主机上,我有以下条目~/.ssh/config
:
Host destination
HostName destination
User dest_user
IdentityFile ~/.ssh/destination
PreferredAuthentications publickey
ProxyCommand nc $(look_up_ip.sh %h) %p
这使我能够从中间连接到目的地ssh destination
。
我想做的是~/.ssh/config
在第一台机器上放置一些内容来定义目标主机(例如hopped_destination
),以便 ssh 首先连接到中间主机,然后ssh destination
从那里执行操作,这样我就可以ssh hopped_destination
从第一台机器执行操作并让中间~/.ssh/config
处理身份文件和目标 IP 查找。我想要这个的部分原因是我最终希望能够使用 VNC 连接到目的地vncviewer -via destination localhost:0
,并且我希望中间主机上的其他用户无法访问该连接(如已接受答案的部分内容所暗示的那样)对于这个问题:https://superuser.com/questions/96489/an-ssh-tunnel-via-multiple-hops)。我希望可以在第一台机器上安装ssh
如下ProxyCommand
内容:
Host destination
ProxyCommand ssh -t intermediate_user@intermediate_host ssh destination
但我还没有找到允许这样的事情工作的选项。
我也欢迎任何关于如何更好地做到这一点的建议(有没有办法摆脱我nc
ProxyCommand
现在正在使用的?)。我可能可以编写一个脚本来更直接地执行 VNC 命令,但这可能更复杂(直接处理端口转发并确保在退出时关闭,并确保不为所有用户打开端口)。
答案1
我的 ssh 配置文件中的示例;
Host vmike2-squid-cache
User mike
ProxyCommand ssh -q -A -x ???.???.???.??? -W %h:22
(我唯一改变的是ip)