正文

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

文章摘要

这篇文章介绍了一种使用 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; }