SSH 协议如何与 MaxSessions 和 MaxStartups 相关

SSH 协议如何与 MaxSessions 和 MaxStartups 相关

我有一个与和sshd的设置相关的问题。MaxSessionsMaxStartups

假设我有一台主机服务器,其sshd设置如下。

MaxSessions 3, 
MaxStartups 10,
LoginGraceTime 1m

并且,目前在主机上建立了 3 个 SSH 会话,并且会话暂时不会结束。

此时,将建立一个新的(第 4 个)SSH 连接,同时已经有 3 个 ssh 会话正在进行。

第4个SSH连接使用密钥认证,密钥认证没有任何问题。

第 4 个 SSH 连接的密钥认证成功后,第 4 个连接会发生什么? 是否存在如下的正确场景? 如果有,那是什么? 如果答案是 #3,你能告诉我正确的答案吗?

  1. 由于 SSH 会话数量已达到最大值,因此将断开与主机的第 4 个 SSH 连接。不能超过已建立的 SSH 会话总数。

  2. 第 4 个 SSH 连接将进入等待列表,因为即使最多有正在进行的 SSH 会话,MaxStartup也不会超过其最大值。第 4 个 SSH 连接将等待,直到主机正在进行的 SSH 会话断开,并且第 4 个 SSH 连接的等待时间不能超过LoginGraceTime设置的时间 1 分钟。

  3. 以上都不是。

谢谢。

答案1

我认为这两项指令都不会达到你所想的效果。


MaxSessions

指定每个网络连接允许打开的 shell、登录或子系统(例如 sftp)会话的最大数量。支持连接多路复用的客户端可以建立多个会话。设置MaxSessions为 1 将有效禁用会话多路复用,而将其设置为 0 将阻止所有 shell、登录和子系统会话,同时仍允许转发。默认值为 10。

在此上下文中,“会话”不是连接,而是连接内的虚拟通道。在大多数情况下,您永远不会遇到此限制,因为大多数客户端无法使用多个通道。或者,如果可以,那也只是在较少使用/鲜为人知的场景中。


MaxStartups

指定与 SSH 守护进程的最大并发未经身份验证连接数。额外的连接将被丢弃,直到身份验证成功或LoginGraceTime连接过期。默认值为 10:30:100。或者,可以通过指定三个冒号分隔的值 start:rate:full(例如“10:30:60”)来启用随机早期丢弃。sshd如果当前有 start(10)个未经身份验证的连接,将以 rate/100(30%)的概率拒绝连接尝试。如果未经身份验证的连接数达到 full(60),则概率会线性增加,并且所有连接尝试都将被拒绝。

因此,在完成任何身份验证之前就会评估“启动”限制。

相关内容