誰かが ssh 経由でマシンにログインしたときにユーザーに通知するスクリプトを作成しようとしています。
私の現在の考えは、grep を使用して間隔を置いて「w」の出力を解析することです。
しかし、それはエレガントでも高性能でもありません。そのようなプログラムを実装する方法について、より良いアイデアを持っている人はいますか?
どんな助けでも本当に感謝します!
Paul Tomblin は正しい提案をしています。
sshd_config でロギングをセットアップして、個別にロギングできる syslog 機能を指すようにします。
=>その他の機能については、man 3 syslogを参照してください。例のようなものを選択してください
# Logging
SyslogFacility local5
LogLevel INFO
次に、syslog.conf を次のように設定します。
local5.info |/var/run/mysshwatcher.pipe
書き込もうとしているスクリプトを /etc/inittab に追加して、実行し続けるようにします。
sw0:2345:respawn:/usr/local/bin/mysshwatcher.sh
次に、スクリプトを記述します。
#!/bin/sh
P=/var/run/mysshwatcher.pipe
test -p $P || mkfifo $P
while read x <$P; do
# ... whatever, e.g.:
echo "ssh info: $x" | wall
done;
最後に、syslogd を再起動し、inittab をリロード (init q) すると、動作するはずです。これらのサービスの他のバリアントが使用されている場合は、それに応じて構成する必要があります (例: newsyslogd => /etc/newsyslog.conf; Ubuntu: /etc/event.d は inittab ではありません)。
これは非常に初歩的で不足していますが、始めるには十分なはずです...
詳細情報: man sshd_config でより多くのログ オプション/冗長性を確認できます。
Ubuntu (および、すべての Linux ではないにしても、他のすべての Debian ディストリビューションを推測します) では、ファイル /var/log/auth.log に成功した (および失敗した) ログイン試行が記録されます。
sshd[XXX]: pam_unix(sshd:session): session opened for user XXX
このコマンドを使用して、非常に単純なモニターをセットアップできます (認証ログを表示するには、root になる必要があることに注意してください)。
sudo tail -F /var/log/auth.log | grep sshd
彼らがどのようにログインしたか(telnet / ssh)を気にしない場合は、「最後の」Unixコマンドラインユーティリティがマシンの最後の数回のログインを表示します。リモートユーザーにはIPアドレスが表示されます
[root @ ex02 www]#last foo pts /181.31.xy日曜日1月18日07:25まだログインしていますfoopts/081.31.xy日曜日1月18日01:51
まだログインしています
foopts/081.31.xy土曜日1月17日03:51-07:52(04:00)
bar pts / 5199.146.xy金1月16日08:57-13:29(04:32
名前付きパイプをセットアップし、それをリッスンするログ ファイル パーサーをセットアップし、それに ssh メッセージを送信します。ログ ファイル パーサーは、必要なことを実行したり、実行するようにデーモンに通知したりできます。
ログ ファイルのリダイレクトは、/etc/ の構成ファイルで行われます。その名前は今のところわかりません。/etc/syslog.conf だと思います。
質問で説明されているタスクを解決するプログラム(私はAuthentication Monitorと呼んでいます)を作成しました。
必要に応じて、ダウンロードして、この問題をどのように解決するかを調査してください(ログファイルを使用)。
ここで無料で利用できる認証モニターを見つけることができます:http://bwyan.dk/ ?p = 1744