同事在使用 sftp 连接服务器的时候出现错误信息:session is down,已经自行检查了服务器地址,端口,用户名,密码等种种可能出现低级失误的地方,结果找不到原因。
同事找到我时,开始我觉得仅凭直觉并不好下手,不过但凡遇到此类问题多半都是先找是不是有日志可看,好消息是系统日志都在 /var/log 目录里,坏消息是文件有点多,不容易立刻看出哪个是相关文件,不过这个问题好解决,我们只要再触发一次错误,然后查看 /var/log 目录下哪个文件在最近修改过即可,利用此方法找到了 /var/log/secure:
pam_unix(sshd:session): session opened for user … fatal: setresuid …: Resource temporarily unavailable pam_unix(sshd:session): session closed for user …
问题变得清晰了,原来会话是因为「Resource temporarily unavailable」被关闭,此类错误很常见,用过 ulimit 之类命令的朋友们应该都有印象,和它相关的配置文件主要有两个:
通过比对测试,最终确认是 90-nproc.conf 配置文件里的 nproc 导致的问题,它表示的用户可以启动多少个进程,缺省是 1024,当超过这个阈值后,进程无法启动成功,表现在 sftp 上,就是 session is down。
至此,我们完全搞清楚了问题的原因,至于解决方法,可以先检查一下为什么用户启动的进程数达到了 1024,有没有问题,如果没有,可以考虑酌情增加阈值的上限。