多个 ssh 隧道的最有效设置?

多个 ssh 隧道的最有效设置?

我目前需要远程访问大约 10-20 台机器,其中一些需要通过多个 SSH 跳转进行访问。但是我注意到一些 SSH 连接有点慢。最有效的设置是什么?更具体地说,向同一个 ssh 命令添加更多端口绑定是否会降低性能/IO 成本?

例如,这之间有什么区别:

ssh -f user0@host0 -i "/certs/key.pem" -L 2001:host1:22 -L 2002:host2:22 -L 2003:host3:22 -N

和这个:

ssh -f user0@host0 -i "/certs/key.pem" -L 2001:host1:22 -N
ssh -f user0@host0 -i "/certs/key.pem" -L 2002:host2:22 -N
ssh -f user0@host0 -i "/certs/key.pem" -L 2003:host3:22 -N

我注意到,在第一种情况下,只有一个 SSH 实例在运行,但在第二种情况下,会有三个。哪种设置对于通过隧道建立的任何 SSH 连接都能产生最佳性能?或者,性能差异是否仅仅因网络速度而显得微不足道?

答案1

一个使用带有 3 条隧道的单个连接,另一个使用带有 3 条隧道的 3 个独立连接。假设没有通过~/.ssh/config或使用替代设置,则使用第一个命令更有效/etc/ssh/ssh_config

例如,如果您使用ControlMasterControlPath,则两个命令将提供相同级别的性能。

此外,如果您正在编写脚本并且关心可读性,请尝试以下操作:

ssh \
    -f \
    -i "/certs/key.pem" \
    -L 2001:host1:22 \
    -L 2002:host2:22 \
    -L 2003:host3:22

我认为如果你在你的项目中使用这个,你将更容易实现你的目标~/.ssh/config

Host host1
    ProxyCommand ssh host0 -W %h:%p

如果您这样做,您首先就不需要使用隧道,因为看起来您正在尝试转发 ssh 连接。

相关内容