Ubuntu 18.04服务器限制SSH隧道账号单设备登录时,解决root无法SSH登录的问题
Ubuntu 18.04服务器限制SSH隧道账号单设备登录时,解决root无法SSH登录的问题
嗨,我完全懂你遇到的糟心事——本来想给那些隧道用户做单设备登录限制,结果把自己的root账号给锁死了,还得重装服务器,这确实挺头疼的。别担心,咱们只需要给原来的脚本加个简单的判断,就能让root账号不受限制,同时保留对普通用户的单设备限制。
解决方案步骤:
修改连接检查脚本
打开你之前创建的/root/checkConnections脚本,在最开头加上一段对root用户的判断,让root直接跳过连接数检查。修改后的脚本内容如下:#! /bin/bash # 对root用户直接放行,不做连接数限制 if [ "$PAM_USER" = "root" ]; then exit 0 fi limit=$1 c=$(pgrep -xcu $PAM_USER sshd) if [[ $c -ge "$limit" ]]; then echo "Max $limit ssh connections allowed, but you have $c." exit 1 fi这段新增的代码意思是:如果当前登录的用户是root,直接返回
0(告诉PAM验证通过),不会执行后面的连接数统计和限制逻辑。确认脚本权限
确保脚本有可执行权限,如果之前没设置过,运行下面的命令:chmod +x /root/checkConnections保留PAM配置不变
你之前在/etc/pam.d/sshd里添加的那一行配置不需要修改,依然保留:session required pam_exec.so stdout /root/checkConnections 1
为什么原来的脚本会锁死root?
当你用PuTTY退出root登录时,有时候SSH连接可能没有彻底关闭(比如网络突然断开导致的僵尸进程),这时候pgrep会统计到root已经有1个sshd进程在运行。而你的脚本对所有用户都限制最多1个连接,所以当你再次尝试登录root时,脚本会判定连接数已经达到上限,直接拒绝登录。现在让root跳过检查,就不会出现这个问题了。
额外小提示
如果你以后想让其他特定用户也不受这个连接数限制,只需要在脚本的判断里加上该用户名就行,比如:
if [ "$PAM_USER" = "root" ] || [ "$PAM_USER" = "my_special_user" ]; then exit 0 fi
备注:内容来源于stack exchange,提问作者Vahid Damanafshan
相关产品推荐
相关产品推荐

