Linux/Unix:OpenSSH多路复用器可加速OpenSSH连接

时间:2020-01-09 10:42:19  来源:igfitidea点击:

如何通过设置主会话,然后让后续会话通过主会话来加快SSH链接的速度,从而在Linux或者类似Unix的操作系统上加快SSH连接?复用不过是通过单个连接发送多个ssh连接而已。

OpenSSH可以将现有的TCP连接重用于多个并发的SSH会话。这导致减少了创建新的TCP连接的开销。首先,您需要设置一个ControlMaster以便在本地打开Unix域套接字。 所有ssh命令中的其余命令都通过Unix域套接字连接到ControlMaster。

ControlMaster为我们提供以下好处:

  • 使用现有的unix套接字
  • 没有新的TCP/IP连接
  • 无需密钥交换
  • 无需身份验证等

如何设置多路复用

编辑$HOME/.ssh/config,执行:

vi ~/.ssh/config

追加以下配置:

Host *
    ControlMaster auto
    ControlPath ~/.ssh/master-%r@%h:%p.socket
    ControlPersist 30m

这是另一个示例:

Host server1
  HostName server1.theitroad.local
  Port 2222
  ControlPath ~/.ssh/ssh-mux-%r@%h:%p
  ControlMaster auto
  ControlPersist yes

保存并关闭文件。
其中:

  • Host *或者Host server1:开始ssh配置。
  • HostName server1.theitroad.local:真实的主机名
  • ControlPath ~/.ssh/ssh-mux-%r@%h:%p:如上所述,指定用于连接共享的控制unix套接字的路径。变量%r,%h,%p分别引用远程ssh用户名,远程ssh主机和远程ssh端口。您需要设置所有这三个变量。
  • ControlMaster auto:允许通过单个网络连接共享多个会话。设置为yes时,ssh将侦听使用ControlPath参数指定的控制套接字上的连接。设置为auto时,ssh将尝试使用主连接,但如果尚不存在,则退回到创建新连接。
  • ControlPersist 10m:指定主连接应在后台保持打开状态10分钟。没有客户端连接时,后台的主连接在闲置10分钟后将自动终止。如果设置为"是",则主连接将无限期地保留在后台(直到终止或者关闭)

如何使用?

只需开始运行ssh命令:

$ ssh user@host
$ ssh [email protected]
$ ssh [email protected]

如何验证Multiplexer是否正常工作?

使用以下任一命令来验证Multiplexer是否正常运行:

$ lsof -U | grep master

或者

$ ssh -O check [email protected]

如何告诉主连接不接受进一步的多路复用请求?

请使用以下语法:

$ ssh -O stop host
$ ssh -O stop [email protected]

传递退出选项而不是停止以取消所有现有连接,包括主连接:

$ ssh -O exit host
$ ssh -O exit [email protected]

如何进行端口转发?

语法如下,使用-L将本地主机上的端口3128转发到远程主机上的端口3128:

ssh -O forward -L 3128:localhost:3128 v.server1

您还可以指定用于共享连接的控制套接字的位置:

ssh -O forward -L 3128:localhost:3128 -S $HOME/.ssh/[email protected]:22 v.server1

SSH多路复用的主要优点是,消除了创建新TCP连接的开销。
使用多路复用可以大大加快重复打开新连接的SSH客户端活动。