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

作者:junjie 时间:2022-04-09 02:56:56 

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,ssh,最大登录次数
0
投稿

猜你喜欢

  • 简单实现Standby SQL Server 数据库的方法

    2009-10-23 09:26:00
  • JavaScript的目的及历史

    2007-10-17 18:53:00
  • python处理大数字的方法

    2022-06-09 02:19:03
  • 将python运行结果保存至本地文件中的示例讲解

    2024-01-03 04:01:52
  • 一百行python代码将图片转成字符画

    2023-05-06 05:49:15
  • Python中使用tkFileDialog实现文件选择、保存和路径选择

    2022-02-17 09:35:32
  • 微信小程序技巧之show内容展示,上传文件编码问题

    2023-09-23 07:25:30
  • ASP实现网页打开任何类型文件都保存的方法

    2007-12-21 13:10:00
  • 基于PyQt5实现一个无线网连接器

    2023-01-14 19:15:19
  • Python中dataclass库实例详解

    2023-11-30 02:14:35
  • Python Web框架Flask下网站开发入门实例

    2023-10-01 16:31:50
  • SQL Server实现分布式数据库系统的终极目标

    2010-08-05 14:57:00
  • django+js+ajax实现刷新页面的方法

    2021-04-19 05:22:20
  • 写给喜欢用DW编写CSS人的一些建议

    2008-05-19 12:09:00
  • django+tornado实现实时查看远程日志的方法

    2021-09-16 07:16:45
  • Python删除windows垃圾文件的方法

    2023-08-24 15:38:23
  • 详解AJAX核心 —— XMLHttpRequest 对象

    2010-03-31 14:49:00
  • 对Python3 * 和 ** 运算符详解

    2023-08-05 10:15:27
  • 不支持RSS,如何跟踪网站的内容更新?

    2008-09-08 12:38:00
  • asp如何让我的网页自动适应客户端的屏幕分辨率?

    2010-05-13 16:38:00
  • asp之家 网络编程 m.aspxhome.com