脚本专栏 
首页 > 脚本专栏 > 浏览文章

perl脚本实现限制ssh最大登录次数(支持白名单)

(编辑:jimmy 日期: 2026/4/28 浏览:3 次 )

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 & (运行脚本)

上一篇:Perl AnyEvent中的watcher实例
下一篇:perl AnyEvent简单介绍和入门知识
一句话新闻
一文看懂荣耀MagicBook Pro 16
荣耀猎人回归!七大亮点看懂不只是轻薄本,更是游戏本的MagicBook Pro 16.
人们对于笔记本电脑有一个固有印象:要么轻薄但性能一般,要么性能强劲但笨重臃肿。然而,今年荣耀新推出的MagicBook Pro 16刷新了人们的认知——发布会上,荣耀宣布猎人游戏本正式回归,称其继承了荣耀 HUNTER 基因,并自信地为其打出“轻薄本,更是游戏本”的口号。
众所周知,寻求轻薄本的用户普遍更看重便携性、外观造型、静谧性和打字办公等用机体验,而寻求游戏本的用户则普遍更看重硬件配置、性能释放等硬核指标。把两个看似难以相干的产品融合到一起,我们不禁对它产生了强烈的好奇:作为代表荣耀猎人游戏本的跨界新物种,它究竟做了哪些平衡以兼顾不同人群的各类需求呢?