通过一个主 OpenSSH 连接建立多个 SSH 隧道(本地和远程转发)?好主意?

通过一个主 OpenSSH 连接建立多个 SSH 隧道(本地和远程转发)?好主意?

问题使用已建立的 SSH 通道一个答案这引起了我的兴趣。它表明我可以重用现有的 SSH 连接。然而,经过进一步阅读,我发现这个解决方案可能不适用于我的情况(同时多个隧道)。

我正在使用 OpenSSH_5.9p1 Debian-5ubuntu1.1、OpenSSL 1.0.1 2012 年 3 月 14 日(在 Kubuntu 12.04 上)。

这是我目前在 bash 脚本中所做的事情:

echo "establishing SSH tunnel for SFTP && opening Dolpin with SFTP connection to remote computer..."
ssh -i "$ID_RSA" "$MIDDLEMAN_USER@$MIDDLEMAN_SERVER" -fL $PORT_NUMBER:localhost:$PORT_NUMBER sleep 20; dolphin sftp://HostSftp:$PORT_NUMBER &

echo "establishing SSH tunnel for VNC && connecting to VNC server for remote desktop support..."
sudo ssh -fL 5901:localhost:$VNC_PORT_NUMBER -i "$ID_RSA" "$MIDDLEMAN_USER@$MIDDLEMAN_SERVER" sleep 20; vncviewer localhost:5901

我的担忧(为什么我认为这可能对我不起作用)包括以下内容:

这样做的缺点是 ssh 的某些用途可能无法与您的多路复用连接一起使用。最值得注意的是使用 git、svn 或 rsync 等隧道或转发端口的命令。来源

和这个:

如果您在配置文件中使用 LocalForward 或 RemoteForward,您可能会遇到一个微妙的问题。 ...SSH1(但不是 OpenSSH)提供了一个解决方案。来源

我正在寻求澄清和说明:

  1. 我可以用一个主连接建立上述两条隧道吗?
  2. 这与建立单独的连接一样可靠吗?
  3. 如果以上两点都是,我该怎么办?

谢谢

答案1

使用主连接不会改变您调用 ssh 的方式,除了与连接共享相关的选项(-S-M-o ControlXXX)。主连接的所有变化是,当主连接已经建立时,新的从连接将通过该连接,而不是再次进行身份验证。这样就无需提供密码或密钥,并且可以显着加快新连接的建立速度。

多路复用对应用程序没有任何影响。它对防火墙来说是不同的:只有一个连接而不是多个连接。

我不知道为什么辛卡特声称“ssh 可能无法与您的多路连接一起工作。最值得注意的是使用 git、svn 或 rsync 等隧道或转发端口的命令。”如果它在没有多路复用的情况下工作,它也可以在多路复用的情况下工作,因为应用程序无法区分差异。

SSH 权威指南不是指连接多路复用,而是指“在配置文件中使用 LocalForward 或 RemoteForward”。 (那本书可以追溯到连接复用存在之前。)这意味着您只能在给定端口上建立一次侦听隧道。这是关于转发,而不是关于复用。

要开始使用多路复用,请将以下行添加到您的~/.ssh/config

ControlMaster auto
ControlPath ~/.ssh/%l_%h_%p_%r.multiplex

就这样。如果您想建立与主机的连接并保持它直到被显式终止,请运行ssh -N destination &。当您不再需要该主连接时,请终止该客户端。您仍然需要像以前一样设置隧道。

如果您使用主机作为许多事情的中继,您可能需要设置一个袜子代理人。运行ssh -D 1234 destination并告诉您的 SOCKS 感知应用程序使用位于 的 SOCKS 代理localhost:1234。当然,这只适用于理解 SOCKS 的应用程序;您可以使用tsocks大多数非 SOCKS 感知应用程序的网络连接都通过 SOCKS 代理(tsocks 通过将库调用重定向到包装函数来工作)。

相关内容