perl脚本实现限制ssh最大登录次数(支持白名单)(perl脚本调试方法)学会了吗

随心笔谈9个月前发布 admin
205 00
🌐 经济型:买域名、轻量云服务器、用途:游戏 网站等 《腾讯云》特点:特价机便宜 适合初学者用 点我优惠购买
🚀 拓展型:买域名、轻量云服务器、用途:游戏 网站等 《阿里云》特点:中档服务器便宜 域名备案事多 点我优惠购买
🛡️ 稳定型:买域名、轻量云服务器、用途:游戏 网站等 《西部数码》 特点:比上两家略贵但是稳定性超好事也少 点我优惠购买

文章摘要

这篇文章介绍了一种使用 Perl 编写的脚本,用于限制 SSH 登录次数。脚本首先定义了一个允许的用户白名单(包括 "test"、"root" 和 "lulu1"),并设置了一个最大登录次数。通过捕获所有 SSHD 进程,脚本统计了每个用户的历史登录信息。当某个用户的登录次数达到限制时,脚本会终止该进程,从而限制 SSH 连接次数。


#!/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;
}

© 版权声明

相关文章