You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 18.04服务器限制SSH隧道账号单设备登录时,解决root无法SSH登录的问题

Ubuntu 18.04服务器限制SSH隧道账号单设备登录时,解决root无法SSH登录的问题

嗨,我完全懂你遇到的糟心事——本来想给那些隧道用户做单设备登录限制,结果把自己的root账号给锁死了,还得重装服务器,这确实挺头疼的。别担心,咱们只需要给原来的脚本加个简单的判断,就能让root账号不受限制,同时保留对普通用户的单设备限制。

解决方案步骤:

  1. 修改连接检查脚本
    打开你之前创建的/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验证通过),不会执行后面的连接数统计和限制逻辑。

  2. 确认脚本权限
    确保脚本有可执行权限,如果之前没设置过,运行下面的命令:

    chmod +x /root/checkConnections
    
  3. 保留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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 12:49:53