我目前需要远程访问大约 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
。
例如,如果您使用ControlMaster
和ControlPath
,则两个命令将提供相同级别的性能。
此外,如果您正在编写脚本并且关心可读性,请尝试以下操作:
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 连接。