私のLinuxワークステーションは共有ネットワークの一部です。誰かがSSHを介して自分のワークステーションに接続するたびに通知メールを受け取りたいと思います。そのためにファイルを開き~/.bash_profile
(gedit
私のファイルは~/.bash_profile
完全に空です)、次の行を書きました。
IP="$(echo $SSH_CONNECTION | awk '{print $1}')"
HOST=$(hostname)
TIME_DATE_STAMP=$(date +"%e %b %Y, %a %r")
echo 'The '$IP' logged into '$HOST' on '$ TIME_DATE_STAMP'.' | mail -s 'SSH
Login Notification' MY_EMAIL_ADDRESS
まだ通知メールを受信していません!何が間違っているのか教えてください。
"who -H"
この問題を解決するには、int端末コマンドを使用するとき。私のワークステーションに入ってくるすべてのSSHタスクのリストを提供します。私の質問は:「誰」コマンドがこの情報をどのように生成しますか?そのデータソースとは何ですか?それを使用してssh
目的のデータを取得できますか?
答え1
いくつか:
あなたの
~/.bash_profile
次の場合にのみ開始してください。あなたログイン。これらの他のユーザーはあなたとしてログインしていない可能性があります。誰がCentOSシステムにSSHで接続しているかを観察するには
/var/log/secure
。
次のようになります。
tail -f /var/log/secure | while read LOGLINE
do
[[ "${LOGLINE}" == *"logged in"* ]] && mail -s 'SSH Notification' $MY_EMAIL_ADDRESS
done
who
編集:コマンドがどのように機能するかを尋ねるために質問を編集しました。私はC開発者ではありませんが、これがソースコードでありwho
命令です。それがどのように機能するかを本当に見たい場合。しかし、私はこれがあなたが探しているものではないと思います。そして私はあなたを助けることができる他の方法も知りません。誰かが悪用されcron
ログインしていることを確認するスクリプトを作成できますが、who
実行中に誰かがログインしてログアウトする可能性は常にあります。ジャーナリングが行く道です。
答え2
「who」コマンドから必要な情報を抽出し、コマンドメールにパイプすることができます。コマンド例:
who | awk '{print $1" "$3" "$4" " $5}' | tail -1 | mail -s 'WARNING: SSH Notification' EMAIL_ADDRESS
前のコマンドを別の名前で保存し、特定の分ごとに(たとえば30分ごとに)実行するように bash
スケジュールします。crontab
答え3
コマンドの出力をパイプできますlast
。
last | head -1 | mail -s 'WARNING:' EMAIL_ADRESS