SSH 多路复用的限制

SSH 多路复用的限制

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

Host AAA
    User BBB
    HostName CCC
    ControlMaster auto
    ControlPath ~/.ssh/%r@%h:%p

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

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

> ssh -X AAA

mux_client_request_session: session request failed: Session open refused by peer
Password: 

我的问题:

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

答案1

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

答案2

我在使用早期版本 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.

然后,在我的本地 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

ControlPath 语句是为了使控制套接字名称不会相互冲突。

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

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

相关内容