最新消息:找几个友情链接呗,稍微跟本博客相关的都OK,百度Google均有收录(50+)即可,添加后邮件至:admin(at} 61zyw.com,随后我就添加

ssh limit perl脚本|ssh limit perl白名单设置及自定义最大登录数

VPS文档 dadi666.com 2588浏览 0评论

ssh limit perl脚本主要作用:
1.限制一个ssh用户的最大登录数为n,n可自定义。
2.支持白名单,如root、test登录不受限制。

如果一个ssh用户的最大登录数超过指定数字,则后登录的会把先前登录的踢掉,以此达到控制登录数的目的。

该脚本需要主机支持perl,如果没有,可yum安装。

#!/usr/bin/perl -w

use strict;
#white list
my @ALLOW_USERS = qw{
    test
    root
    lulu1
};
#the maximum number of ssh login
my $LOGIN_TIMES = 1;
sub main
{
    my @lines = `ps -eo user,pid,etime,cmd | grep sshd`;
    my $users;
    for my $line (@lines) {
        if(my ($user, $pid, $etime, $cmd) = $line =~ /^([^\s]+)\s+(\d+)\s+([^\s]+)\s+(sshd:.+)$/) {
            next if grep {$user eq $_} @ALLOW_USERS;
            my $proc = {'pid', $pid, 'etime', $etime, 'cmd', $cmd};
            push @{$users->{$user}}, $proc;
        }
    }
    for my $key(keys(%$users)) {
         my @sshs = sort {
            my ($lb, $la) = (length($b->{'etime'}), length($a->{'etime'}));
            if($lb == $la) {
                $b->{'etime'} cmp $a->{'etime'};
            } else {
                $lb <=> $la;
            }
        } @{$users->{$key}};
        $LOGIN_TIMES = 1 if $LOGIN_TIMES < 1;
        for (1 .. $LOGIN_TIMES) { pop @sshs; };
        for my $ssh (@sshs) {
            kill 9, $ssh->{'pid'};
        }
    }
}
while(1) {
    main;
    sleep 3;
}

【使用方法】

另存脚本存到root目录,命名为limit.pl,然后执行:

echo "/root/limit.pl &" >> /etc/rc.d/rc.local (加入开机启动)
/root/limit.pl & (运行脚本)

转载请注明:大地博客 » ssh limit perl脚本|ssh limit perl白名单设置及自定义最大登录数

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址