ssh单点登录限制脚本(支持白名单 可自定义最大登录数)

post by rocdk890 / 2015-3-19 10:36 Thursday linux技术
网上搜出来3个文章,有2个都设置密码,我就想不通,就这么一个脚本设置密码有什么意思?现共享出来给大家
ssh limit perl脚本主要作用:
1.限制一个ssh用户的最大登录数为n,n可自定义.
2.支持白名单,如root、test登录不受限制.

如果一个ssh用户的最大登录数超过指定数字,则后登录的会把先前登录的踢掉,以此达到控制登录数的目的.该脚本需要主机支持perl,如果没有,需要yum安装.
脚本内容:
cat /root/soft_shell/limit.pl
#!/usr/bin/perl -w
use strict;
#white list
my @ALLOW_USERS = qw{
  test
  root
  rocdk890
};
#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;
}


加入开机启动:
echo "nohup /root/soft_shell/limit.pl > /dev/null 2>&1" >> /etc/rc.local

后台运行:
nohup /root/soft_shell/limit.pl > /dev/null 2>&1
夜空- 本站版权
1、本站所有主题由该文章作者发表,该文章作者与夜空享有文章相关版权
2、其他单位或个人使用、转载或引用本文时必须同时征得该文章作者和夜空的同意
3、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
4、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
5、原文链接:blog.slogra.com/post-580.html

标签: ssh linux 限制 登录 脚本 perl 单点

评论: