1. 程式人生 > 其它 >Linux單獨普通賬號ssh無法登入

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相關限制進行更改就可以