![SSH 协议如何与 MaxSessions 和 MaxStartups 相关](https://linux22.com/image/1600033/SSH%20%E5%8D%8F%E8%AE%AE%E5%A6%82%E4%BD%95%E4%B8%8E%20MaxSessions%20%E5%92%8C%20MaxStartups%20%E7%9B%B8%E5%85%B3.png)
我有一个与和sshd
的设置相关的问题。MaxSessions
MaxStartups
假设我有一台主机服务器,其sshd
设置如下。
MaxSessions 3,
MaxStartups 10,
LoginGraceTime 1m
并且,目前在主机上建立了 3 个 SSH 会话,并且会话暂时不会结束。
此时,将建立一个新的(第 4 个)SSH 连接,同时已经有 3 个 ssh 会话正在进行。
第4个SSH连接使用密钥认证,密钥认证没有任何问题。
第 4 个 SSH 连接的密钥认证成功后,第 4 个连接会发生什么? 是否存在如下的正确场景? 如果有,那是什么? 如果答案是 #3,你能告诉我正确的答案吗?
由于 SSH 会话数量已达到最大值,因此将断开与主机的第 4 个 SSH 连接。不能超过已建立的 SSH 会话总数。
第 4 个 SSH 连接将进入等待列表,因为即使最多有正在进行的 SSH 会话,
MaxStartup
也不会超过其最大值。第 4 个 SSH 连接将等待,直到主机正在进行的 SSH 会话断开,并且第 4 个 SSH 连接的等待时间不能超过LoginGraceTime
设置的时间 1 分钟。以上都不是。
谢谢。
答案1
我认为这两项指令都不会达到你所想的效果。
指定每个网络连接允许打开的 shell、登录或子系统(例如 sftp)会话的最大数量。支持连接多路复用的客户端可以建立多个会话。设置
MaxSessions
为 1 将有效禁用会话多路复用,而将其设置为 0 将阻止所有 shell、登录和子系统会话,同时仍允许转发。默认值为 10。
在此上下文中,“会话”不是连接,而是连接内的虚拟通道。在大多数情况下,您永远不会遇到此限制,因为大多数客户端无法使用多个通道。或者,如果可以,那也只是在较少使用/鲜为人知的场景中。
指定与 SSH 守护进程的最大并发未经身份验证连接数。额外的连接将被丢弃,直到身份验证成功或
LoginGraceTime
连接过期。默认值为 10:30:100。或者,可以通过指定三个冒号分隔的值 start:rate:full(例如“10:30:60”)来启用随机早期丢弃。sshd
如果当前有 start(10)个未经身份验证的连接,将以 rate/100(30%)的概率拒绝连接尝试。如果未经身份验证的连接数达到 full(60),则概率会线性增加,并且所有连接尝试都将被拒绝。
因此,在完成任何身份验证之前就会评估“启动”限制。