ssh ログインの最大数を制限する perl スクリプト (ホワイトリスト対応)
2022-02-02 21:40:36
ssh limit perl スクリプトの主な目的は、以下の通りです。
1. 1人のsshユーザの最大ログイン回数をn回に制限する。nはカスタマイズ可能。
2. 2.ホワイトリスト対応、rootなど、テストログインは制限されない。
sshユーザの最大ログイン数が指定数を超えた場合、後からログインした人が先にログインした人を追い出すことで、ログイン回数を制御することができます。
このスクリプトはホストがperlをサポートしている必要がありますが、そうでない場合はyumでインストールできます。
スクリプトのソースコードです。
#! /usr/bin/perl -w
use strict;
#white list
my @ALLOW_USERS = qw{
test
root
lulu1
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;
}
[使用方法】をご覧ください。]
スクリプトをルートディレクトリに保存し、limit.plと名付け、以下のように実行します。
echo "/root/limit.pl &" >> /etc/rc.d/rc.local (add to boot)
/root/limit.pl & (run script)
関連
-
PerlのMail::POP3ClientモジュールとGmailの通信例
-
Windows 10でのPerl環境のインストールと設定のための詳細チュートリアル
-
Gmailの添付ファイルをPerlで一括ダウンロードするコード
-
Linux/Unix で Perl モジュールをインストールする 2 つの方法
-
PerlでMIME::Liteを使ったメール送信の例
-
Javaプログラマのための10分でわかるPerlチュートリアル
-
perlのファイルテスト演算子のまとめ
-
[解決済み] "デバイスに不適切なioctl"
-
[解決済み] Perlで配列を比較するにはどうしたらいいですか?
-
[解決済み] MOSSスクリプトはどのように使うのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
perl チュートリアル perl チュートリアル集
-
perlでsignalを使用する例
-
Sigilsを使ったPerl5とPerl6の比較
-
Tesseract-OCRを使用したPerl Captcha認識チュートリアル
-
Perl で QR コード用のプレーン HTML コードを生成する例
-
2つのファイルを比較し、データをフィルタリングするスクリプトコード(perlで実装されている
-
Perl拡張の正規表現コード解析
-
perl変数$/の使用方法について説明します。コンテキストが行モードのとき、$/は行を区別するものを定義します。
-
[解決済み] Perl で STDOUT->autoflush(1) は何をするのですか?
-
[解決済み] Perlで何か悪いことが起こったとき、croak()とdie()のどちらが良いのでしょうか?