Linux单独普通账号ssh无法登录
问题现象:
我是在生产环境中遇到的这个问题,当时使用的系统为SUSE12系统
使用人发现问题第一时间反馈给我排查,经过测试登录发现系统中存在的超管以及普通账号只有使用人使用的账号无法ssh登录但也不是一直无法登录,起初认为是使用人自己对帐号进行了相关设置导致,通过排查排除自行设置导致无法登录现象,继续通过系统日志定位相关问题发现存在报错”kernel: cgroup: fork rejected by pids controller in /user.slice/user-1000.slice”和“unable to create new native thread”
现在这个问题原因就很清晰了,对系统线程数限制进行排查
问题原因:
发现cgroup通过/sys/fs/cgroup/pids/user.slice/user-1000.slice/pids.max控制当前登录用户(uid为1000)启动的线程总数
排查:
查看系统支持最大线程数(一般会很大,相当于理论值)
cat /proc/sys/kernel/pid_max
查看当前问题账号的pid.max线程数限制(发现单独账号对线程数限制默认为12288)
cat /sys/fs/cgroup/pids/user.slice/user-1001.slice/pids.max
12288
处理:
对账号的/sys/fs/cgroup/pids/user.slice/user-1000.slice/pids.max进行调整,从12288调整为65535
至此,问题解决
为了避免之后出再现相关问题,对内核级线程的限制与systemd对线程的限制进行更改如下:
# SLE 12 修改内核级对线程的限制
vi /etc/sysctl.conf
kernel.pid_max = 65535
kernel.threads-max = 65535
执行sysctl –p 生效
# SLE 12 修改systemd 对线程的限制
cat /etc/systemd/system/user.slice.d/override.conf
[Slice]
TasksMax=65535
cat /etc/systemd/logind.conf.d/override.conf
[Login]
UserTasksMax=65535
cgroup限制:
有个重要的限制就是最大任务数TasksMax,通过设置cgroup的pids.max来限制。
对于登录会话,有个默认的限制UserTasksMax,配置在/etc/systemd/logind.conf,限制了某个用户的默认的总任务数
查看SP4的发行说明:https://www.suse.com/releasenotes/x86_64/SUSE-SLES/12-SP4/index.html,并没有发现相关限制反而发现这句“Starting with SLE 12 SP4, libcgroup1 has been removed. Migrate to the equivalent functionality in systemd.”
cgroup处理可能与systemd的处理相冲突从 SLE12SP4开始,libcgroup1已被删除。迁移到 systemd 中的等效功能
所以我们只需要对systemd相关限制进行更改就可以