2023-02-06 #tips

SSH のログインを Slack や Discord に通知する方法


背景

色んなクラウドサービスを使い始めると,インスタンスが増え管理が厄介になりますよね.
そこで,SSH で誰かが入ったときに Slack や Discord に通知する方法を忘備録としてここに残しておきます.
メールを送信して通知するのでもよいですが,最近はメールよりも Slack や Discord といったチャットツールのほうがよく使うので,こっちに通知を送るのがよいかなと思います.(もちろん電子メールも優れた技術だと思っています!)

実現方法

/etc/ssh/sshrc は SSH ログイン後,shell の起動時に発火するスクリプトです.ここにログインを通知するようなシェルスクリプトを書けば通知してくれます.
また,sshrc はシェルスクリプトなので任意のコマンドを実行し投げるメッセージ内容をカスタマイズも可能です.

Slackの場合

Webhook の URL を設定し,sshrc に以下の内容を設定すると,ホスト名,ログイン日時,クライアント IP,クライアントポートが任意の Slack のチャンネルに投稿されます.
送信する内容のカスタマイズに関しては Slackのドキュメント を参照ください.

/etc/ssh/sshrc
SLACK_WEBHOOK_URL=''
post_data='{"username": "'$(hostname)'", "text": "`'$(date "+%Y-%m-%d %H:%M:%S")' [login]: '$($SSH_CLIENT)'`"}'
echo $post_data | curl -X POST -H "Content-Type: application/json" -d @- $SLACK_WEBHOOK_URL

sshrc slack

Discordの場合

Discord も同様に,Webhook の URL を設定し,sshrc に以下の内容を設定すると,ホスト名,ログイン日時,クライアント IP,クライアントポートが任意の Discord のチャンネルに投稿されます.
もちろんアイコンなども設定できます.詳しくは Discordのドキュメント を参照ください.

/etc/ssh/sshrc
DISCORD_WEBHOOK_URL=''
post_data='{"username": "'$(hostname)'", "content": "`'$(date "+%Y-%m-%d %H:%M:%S")' [login]: '$($SSH_CLIENT)'`"}'
echo $post_data | curl -X POST -H "Content-Type: application/json" -d @- $DISCORD_WEBHOOK_URL

sshrc discord

余談