SSH 多路复用的限制

Ame*_*ina 30 ssh openssh

我的.ssh/config文件中有以下条目

Host AAA
    User BBB
    HostName CCC
    ControlMaster auto
    ControlPath ~/.ssh/%r@%h:%p
Run Code Online (Sandbox Code Playgroud)

以上允许我通过相同的 ssh 连接多路复用多个 ssh 会话,而无需每次需要新会话时都输入密码(只要主连接保持打开状态)。

但是,我注意到,一旦我拥有相对较高的多路连接数(~7),就无法向同一个多路连接添加更多会话,并且开始出现以下错误:

> ssh -X AAA

mux_client_request_session: session request failed: Session open refused by peer
Password: 
Run Code Online (Sandbox Code Playgroud)

我的问题:

为什么我收到这个错误?我可以在同一连接中复用的 ssh 会话数量是否有限制?我可以更改该限制吗?那会是个坏主意吗?

roz*_*acz 31

sshd服务器上的后台程序限制每个网络连接的会话数量。这由 中的MaxSessions选项控制/etc/ssh/sshd_config。此外,MaxStartups如果您使用大量会话,则可能需要增加该选项。(有关man sshd_config更多详细信息,请参阅。)修改MaxSessions限制的选项已在 OpenSSH 5.1 中引入,看起来该数字以前被硬固定为 10。如果您MaxSessions在服务器上超过了,您将sshd[####]: error: no more sessions在服务器的日志中看到。


joe*_*joe 5

我在使用较早版本的 OpenSSH 的服务器上遇到了这个问题。我控制了服务器,并通过在我的命名配置中创建两个 CNAME 来解决问题:

realhost.myexample.com.      IN  A       XXX.XXX.XXX.XXX
realhost2.myexample.com.     IN  CNAME   realhost.myexample.com.
realhost3.myexample.com.     IN  CNAME   realhost.myexample.com.
Run Code Online (Sandbox Code Playgroud)

然后,在我的本地 ssh 客户端配置中:

ControlMaster auto
ControlPath ~/.ssh/%r_%p_%h

host realhost
hostname realhost.myexample.com

host realhost2
hostname realhost2.myexample.com

host realhost3
hostname realhost3.myexample.com
Run Code Online (Sandbox Code Playgroud)

ControlPath 语句使控制套接字名称不会相互干扰。

就是这样,但为了便于管理,我在客户端为“ssh”编写了一个包装脚本。它理解有主机的“组”(在这种情况下,realhost、realhost1、realhost2 构成一组)。发出'sshwrapper realhost' 时,如果没有打开的通道,则所有三个通道都打开,并开始一个会话。下次运行时,它会计算每个通道的打开连接数,并在连接数最少的通道中打开新会话。

使用一个真实主机和两个“假”主机,我可以在收到错误之前连接 30 次。登录非常快,除了初始时间需要一两秒钟,因为那时所有三个控制通道都已打开。