perl腳本實(shí)現(xiàn)限制ssh最大登錄次數(shù)(支持白名單)
ssh limit perl腳本主要作用:
1.限制一個(gè)ssh用戶(hù)的最大登錄數(shù)為n,n可自定義。
2.支持白名單,如root、test登錄不受限制。
如果一個(gè)ssh用戶(hù)的最大登錄數(shù)超過(guò)指定數(shù)字,則后登錄的會(huì)把先前登錄的踢掉,以此達(dá)到控制登錄數(shù)的目的。
該腳本需要主機(jī)支持perl,如果沒(méi)有,可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,然后執(zhí)行:
echo "/root/limit.pl &" >> /etc/rc.d/rc.local (加入開(kāi)機(jī)啟動(dòng)) /root/limit.pl & (運(yùn)行腳本)
- Oracle 添加用戶(hù)并賦權(quán),修改密碼,解鎖,刪除用戶(hù)的方法
- Oracle新建用戶(hù)、角色,授權(quán),建表空間的sql語(yǔ)句
- [Oracle] 如何使用觸發(fā)器實(shí)現(xiàn)IP限制用戶(hù)登錄
- Zend Framework框架的session會(huì)話(huà)周期及次數(shù)限制使用示例
- ORACLE 10G修改字符編碼沒(méi)有超字符集的限制
- javascript Deferred和遞歸次數(shù)限制實(shí)例
- Java用Cookie限制點(diǎn)贊次數(shù)(簡(jiǎn)版)
- java發(fā)送短信系列之限制日發(fā)送次數(shù)
- C# winform實(shí)現(xiàn)登陸次數(shù)限制
- Oracle用戶(hù)連續(xù)登錄失敗次數(shù)限制如何取消
相關(guān)文章
perl的格式化(Format)報(bào)表輸出實(shí)現(xiàn)代碼
perl有最好的文本數(shù)據(jù)處理能力.這是大家都知道的.在perl本身有一個(gè)別的軟件沒(méi)有的小功能,就是Perl格式.它相當(dāng)于簡(jiǎn)單的命令行報(bào)表和圖表輸出2013-01-01Perl中使用dig和nali判斷DNS解析地址歸屬地是否一致腳本分享
這篇文章主要介紹了Perl中使用dig和nali判斷DNS解析地址歸屬地是否一致腳本分享,本文同時(shí)介紹了一個(gè)使用純真IP庫(kù)實(shí)現(xiàn)的Perl查詢(xún)工具,需要的朋友可以參考下2014-09-09perl模塊Data::Dumper應(yīng)用一例分享
perl模塊Data::Dumper應(yīng)用一例,參見(jiàn)下面的代碼2013-02-02