我有时会在 auth.log 中发现以下消息:
sshd[8888]: error: no more sessions
在 sshd_config 中,我设置了“MaxStartups 300”,并且我不应该同时连接这么多客户端。在繁忙时段,我猜我可能有大约 50-60 个并发连接,这些连接在通过 sftp 上传/下载小文件时只会持续几秒钟。
我怀疑可能有些客户端没有按应有的方式关闭连接,而且由于连接重复发生且非常频繁(每个客户端每分钟连接几次),因此连接数可能会随着时间的推移而增加。为了解决这个问题,我希望能够计算 SSH 会话数,但我想不出比使用 netstat 计算连接数更好的方法:
netstat -an | grep 123.456.789.abc:22 | wc -l
因为这将计算连接而不是会话,并且我不确定是否存在会话存在但连接已关闭的情况?
有没有更好的方法来计算当前的连接数,或者甚至更好地打印所有会话的当前状态?
提前致谢!
答案1
MaxStartups 控制 sshd 的“并发未经身份验证的连接”数量,而不是会话数量。(如果违反限制,它会开始丢弃较旧的连接)
如果您尚未为 MaxSessions 提供明确的值,它将默认为 10。(也许这就是您实际想要设置的?)
您可以查看 sshd_config 的手册页了解更多详细信息: http://www.openbsd.org/cgi-bin/man.cgi?query=sshd_config&sektion=5
我没有看到 sshd 本身具有报告您所询问的类型的统计信息的功能(尽管我也没有对此进行深入研究。)
问候,Sapp3r。
答案2
[我意识到这是一个非常老的问题,但我还是为了后人着想添加了这个问题。]
“没有更多会话”消息适用于多路复用连接,而不是单独的连接。
对于 5.1 之前的版本,它似乎是#define
在编译时进行的,当时MAX_SESSIONS
最大会话数设置介绍:http://www.openssh.com/txt/release-5.1
至少在 RHEL5 上似乎MAX_SESSIONS
已经增加到 20。