How can I disconnect ssh users, or limit the number of ssh logins?
Setting up maxlogins limit actually works here. Just make sure you use '-' limit type, not 'hard'.
user1 - maxlogins 1
If you want to kick users who made double login using scponly, here's quick and dirty script, which does that. Put it into crontab, so it executes every minute.
#!/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
Download script: http://dl.dropbox.com/u/17194482/kill-scponly.sh
The PAM limits won't catch scp or sftp connections because they are not allocated a pty or written to utmp.
You might look at /etc/security/limits.conf for these sort of limits. http://linux.die.net/man/5/limits.conf
There is a 'maxlogins' limit that can be configured on a per user or per usergroup basis. This won't disconnect previous sessions but will restricted concurrent sessions.