如何断开 ssh 用户,或限制 ssh 登录次数?

mmr*_*mmr 6 ssh

我有一个使用 ssh 进行身份验证的应用程序。由于各种规定(HIPAA 等),用户只能在一定时间内登录,并且只能登录一次。

如果尝试另一个连接,我希望 sshd 自动断开用户连接。这个想法是:用户 1 已连接。用户 2 使用用户 1 的凭据尝试登录。两者都被踢了(我们不确定用户 1 或用户 2 是否合法)。
如果这种情况在 Y 分钟内发生 X 次以上,则帐户将被冻结,直到管理员将其解冻(很可能是由于密码重置)。

现在,用户被沙盒化在他们自己的scponly目录中;我不确定这是否重要。

试图杀死单个 sshd 连接就像玩 whackamole,我更喜欢这是 sshd 自己做的事情,而不是根级脚本。

编辑:这是在

2.6.31-22-server #73-Ubuntu SMP
Run Code Online (Sandbox Code Playgroud)

我的limits.conf文件包含如下几行:

user1      hard   maxlogins    1
user2      hard   maxlogins    1
Run Code Online (Sandbox Code Playgroud)

我的 sshd_config 文件包含以下行:

UsePAM yes
Run Code Online (Sandbox Code Playgroud)

但是我仍然可以从多台不同的机器以 user1 身份登录。我在这里做错了什么,以便我至少可以阻止 user1 进行多次登录?

小智 5

在这里设置 maxlogins 限制实际上是有效的。只要确保您使用“-”限制类型,而不是“硬”。

user1          -       maxlogins       1
Run Code Online (Sandbox Code Playgroud)

如果你想踢掉使用 scponly 进行双重登录的用户,这里有一个快速而肮脏的脚本,它可以做到这一点。将其放入 crontab,因此它每分钟执行一次。

#!/bin/sh

for user in `grep scponly /etc/passwd | gawk -F: '{print $1}'`; do 

    echo "Checking user: $user"
    instances=`ps -u $user| grep scponly | wc -l`
    echo "scponly instances  $instances"
    if [ $instances -gt 1 ] ; then
        echo "Too many connections detected, slaying scponly for user $user"
        if [ -e /tmp/$user ] ; then
            attempts=`cat /tmp/$user`
            echo "Detected $attempts attempts"

            # increment attempts counter
            echo $(($attempts+1)) > /tmp/$user

            if [ $attempts -gt 3 ] ; then
                echo "Blocking $user"
                /usr/sbin/usermod -L $user
            fi

        else
            echo "1" > /tmp/$user
        fi
        killall -u $user scponly

    fi
done
Run Code Online (Sandbox Code Playgroud)

下载脚本:http : //dl.dropbox.com/u/17194482/kill-scponly.sh