ssh limit perl指令碼主要作用:
1.限制一個ssh使用者的最大登入數為n,n可自訂。
2.支援白名單,如root、test登入不受限制。
如果一個ssh使用者的最大登入數超過指定數字,則後登入的會把先前登入的踢掉,以此達到控制登入數的目的。
該指令碼需要主機支援perl,如果沒有,可yum安裝。
指令碼源碼:
#!/usr/bin/perl -wuse strict;#white listmy @ALLOW_USERS = qw{ test root lulu1};#the maximum number of ssh loginmy $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 & (運行指令碼)