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

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 白名单、linux ssh 白名单、linux ssh加白名单、ssh配置白名单、脚本 360白名单,以便于您获取更多的相关知识。

时间: 2024-09-18 17:00:08

perl脚本实现限制ssh最大登录次数(支持白名单)_perl的相关文章

linux查看ssh用户登录日志与操作日志

ssh用户登录日志 linux下登录日志在下面的目录里:  代码如下 复制代码 cd /var/log 查看ssh用户的登录日志:  代码如下 复制代码 less secure 1. 日志简介 日志对于安全来说,非常重要,他记录了系统每天发生的各种各样的事情,你可以通过他来检查错误发生的原因,或者受到攻击时攻击者留下的痕迹.日志主要的功能有:审计和监测.他还可以实时的监测系统状态,监测和追踪侵入者等等. 在Linux系统中,有三个主要的日志子系统: 连接时间日志–由多个程序执行,把纪录写入到/v

ssh由于登录失败而无法启动服务的问题

ssh 由于登录失败而无法启动服务 [分析与解决] $ net start sshd 发生系统错误 1069. 由于登录失败而无法启动服务. 分析:这是由于用户密码输入错误导致的,以后更改用户后sshd也可能发生这个问题,在 services.msc 里的登录标签里更改用户设置即可! 如果修改密码后,还是无法启动sshd服务,建议卸载该服务,删出cyg_server,sshd用户,并重新安装,同时执行/bin/sh.sh脚本,所需要的命令如下: cygwin下sshd服务 开启    net  

linux ssh 别名登录小技巧_Linux

为了方便登录服务器,我们一般使用putty.SecureCRT等等工具.在终端如何通过服务器别名来进行登录呢? 可以创建~/.ssh/config 文件并为每台服务器指定登录信息和验证方法,如下所示: $ vim ~/.ssh/config Host www HostName www.ttlsa.com Port 22 User root IdentityFile ~/.ssh/id_rsa.pub IdentitiesOnly yes Host bbs HostName 115.28.45.1

ssh自动登录的4种实现方法_linux shell

1. 自动ssh/scp方法 A为本地主机(即用于控制其他主机的机器) ;B为远程主机(即被控制的机器Server), 假如ip为192.168.60.110;A和B的系统都是Linux 在A上运行命令:# ssh-keygen -t rsa (连续三次回车,即在本地生成了公钥和私钥,不设置密码)# ssh root@192.168.60.110 "mkdir .ssh" (需要输入密码)# scp ~/.ssh/id_rsa.pub root@192.168.60.110:.ssh/

Perl脚本实现检测主机心跳信号功能_perl

使用串口通信,在备机端使用如下脚本检测来自主机的心跳信号,一旦未接受次数超过指定记数,备机认为主机DOWN机,自动设置为主机的网络参数,顶替主机提供服务. # ! perl -w use strict; use Win32 :: SerialPort; my $port = ' COM2 ' ; # serail port name registried in OS my $count = 0 ; # count number of heartbeat-receiving failture my

Perl 脚本的特点

        本章介绍如何使用Perl DBI 与MySQL接口.我们不讨论DBI 的基本原理或体系结构.有关DBI 这些方面的信息(特别是与C 和PHP API 的比较),请参阅第5 章.    本章的举例动用了样例数据库samp_db,使用了学分保存方案和历史同盟需要的表.想要从本章中取得最大收获,最好了解一些有关Perl 的知识.如果不想这样,那么通过拷贝这里看到的样例代码,也能有所帮助,并可以编写自己的脚本,不过找一本好的Perl 书,可能仍是一件非常有价值的投资.有这样一本书,名为<

CISCO路由器TELNET和SSH远程登录的配置实例

一.TELNET远程登录配置 1.配置CISCO路由器上登录账号.口令.账号级别,如下所示,账号名abc.口令为abc123.账号级别为15(最高级别) R1#configure terminal R1(config)#username abc privilege 15 secret abc123 R1(config)#end R1# 2.配置CISCO路由器远程登录认证机制,如下所示,配置路由器本地认证 R1#configure terminal R1(config)#line vty 0 4

如何不输入密码ssh直接登录阿里云Linux主机

服务器环境:阿里云云服务器,Linux版本 - CentOS 客户端环境:Mac OSX Terminal 在Terminal中用ssh命令登录服务器每次都要输入密码,虽然可以复制/粘贴密码,但登录后一段时间不操作,服务器会自动断开连接,连接时又要复制/粘贴密码,还是有些不方便. 有没有办法实现登录时不用输入密码呢?有办法,这篇博文分享的就是解决方法. 不输入密码,服务器如何验证客户端呢?通过证书,证书就像你进办公室门时的门卡.客户端登录时,拿门卡(证书)在服务器上刷一下(证书验证),服务器会检

perl脚本备份还原sql server

写了一个perl脚本灵活来备份或还原. 1.将config.txt保存到c盘根目录 username:sa password:passwd123! 根据实际情况修改该文件内容 2.执 行bcp.pl #!C:\Perl64\bin #通过BCP备份和还原SQLSERVER指定的表 use 5.014; #加载用户和密码配置文 件 my $username ; my $passwd; ##获取用户名 my $dir="c:"; $dir=$dir."/"; my $f