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

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

相关推荐

  • zf框架的session会话周期及次数限制使用示例

    复制代码 代码如下: <?phprequire_once("Zend/Loader.php");Zend_Loader::loadClass("Zend_Session_Namespace");$Session = new Zend_Session_Namespace('Db');$Session ->host     = '127.0.0.1';$Session ->username = 'root';$Session ->password

  • C# winform实现登陆次数限制

    我们在网上登陆的时候有些网站在用户多次输错密码之后会自动把账户冻结,不能在进行登陆,小编这次做的winform程序就是要实现这种功能,具体内容如下 功能一:根据数据库字段判断用户名和密码是否匹配: 功能二:如果输入错误自动记录连续错误次数: 功能三:如果用户登陆成功之后会自动清除错误次数,使用户仍然可以连续登陆3次: 首先在winform窗体上拖入两个label和textbox,textbox分别命名为txbUserName,txbPassWord;然后在拖入一个button按钮:双击butto

  • Java用Cookie限制点赞次数(简版)

    本文简单利用Cookie技术来简单的限制点赞次数,并不能杜绝游客的恶意点赞. 好了,不啰嗦了,先来看看基础知识: ajax+springMVC+cookie 中间框架你随意,楼主这里用了springMVC,只要取得HttpServletRequest和HttpServletResponse你就可以操作cookie啦 什么是Cookie cookie 是存储于访问者的计算机中的变量.每当同一台计算机通过浏览器请求某个页面时,就会发送这个 cookie.你可以使用 JavaScript 来创建和取回

  • Oracle新建用户、角色,授权,建表空间的sql语句

    oracle数据库的权限系统分为系统权限与对象权限.系统权限( database system privilege )可以让用户执行特定的命令集.例如,create table权限允许用户创建表,grant any privilege 权限允许用户授予任何系统权限.对象权限( database object privilege )可以让用户能够对各个对象进行某些操作.例如delete权限允许用户删除表或视图的行,select权限允许用户通过select从表.视图.序列(sequences)或快照

  • javascript Deferred和递归次数限制实例

    你知道Deferred和递归次数限制吗?下面有个不错的实例,大家可以看看 function runAsyncTTS(text,speecher,audiopath) { var def = jQuery.Deferred(); var args = {"SynthText": text, "VoiceSpeecher": speecher, "WordSpeed": "3", "UseCSSML": &qu

  • Oracle用户连续登录失败次数限制如何取消

    当用户连续登录失败次数过多时,Oracle会锁定该用户,"FAILED_LOGIN_ATTEMPTS"用于设置最大次数,超过该值则锁定该帐号. 要取消用户连续登录失败次数的限制可以按照以下方法操作: 1. 输入以下命令,查看"FAILED_LOGIN_ATTEMPTS"的值: SQL> select * from dba_profiles s where s.profile='DEFAULT' and resource_name='FAILED_LOGIN_A

  • [Oracle] 如何使用触发器实现IP限制用户登录

    下面是一个触发器的例子: 复制代码 代码如下: create or replace trigger logon_ip_controlafter logon on databasedeclare  ip STRING(30);  user STRING(30);beginSELECT SYS_CONTEXT('USERENV','SESSION_USER') into user from dual;SELECT SYS_CONTEXT('USERENV','IP_ADDRESS') into ip

  • ORACLE 10G修改字符编码没有超字符集的限制

    ORACLE 10G修改字符编码,不再麻烦,没有超字符集的限制,可以直接修改成自己想要字符串,不过可能之前已经存在数据可能显示的不正确,需要重新再导入 修改方法如下: $sqlplus /nolog SQL>conn / as sysdba; 然后执行以下命令: SQL>STARTUP MOUNT; 如果提示不能共享内存使用命令 ORA-27125: unable to create shared memory segment [oracle@yans1 ~]$ id oracle uid=5

  • Oracle 添加用户并赋权,修改密码,解锁,删除用户的方法

    添加用户(随着用户的创建,自动产生与用户同名的schema) CREATE USER "TESTER" PROFILE "DEFAULT" IDENTIFIED BY "TESTER" DEFAULT TABLESPACE "TESTDATA" TEMPORARY TABLESPACE "TESTTEMP" ACCOUNT UNLOCK; 赋权(说实话,这些权限是开发中使用的权限,如果用户生产环境,请自行对

  • java发送短信系列之限制日发送次数

    在前两篇文章中, 我们实现了同步/异步发送短信以及限制发送短信频率.这一篇, 我们介绍一下限制每日向同一个用户(根据手机号和ip判断)发送短信的次数 1.数据表结构 由于需要记录整天的发送记录, 因此这里我们将数据保存到数据库中. 数据表结构如下: type为验证码的类型, 比如注册, 重置密码等. sendTime的默认值为当前时间. 2.限制日发送次数 我们这里需要用到上一篇中提到的接口和实体类. DailyCountFilter.java public class DailyCountFi

随机推荐