あるところに,某ステージングサーバにて作業をするときは一度チャットを確認して,誰も作業をしてなければ,自分が今から何の作業をするのかをチャットに残してから作業をする。というルールがありました。
私はこれを自動化しようとして,以下の条件で動作するものを作りました。
- 誰かがサーバにアクセスする度にチャットに通知が飛ぶ
- また,二人以上が同時にログインしているとその旨をチャットに通知する
- ただ,誰が何の作業をしているかまでは追わない
- 誰かいると思ったら
w
コマンドで他の人が何してるか見るか,もうチャットやら口頭で確認しちゃえば良いかな。みたいな
- 誰かいると思ったら
必要なもの
- slack
- slackのIncomming WebHooks URL
- 適当な(ログインの監視対象とする)サーバ
作り方
#!/bin/sh
SLACK_URL='https://hooks.slack.com/services/hoge/fuga' # ここにIncomming WebHooksを
SLACK_MES=''
let LOGIN_USER=$(echo `w` | sed -e 's/.*\([0-9]\+\) user.*/\1/g')
if [ ${LOGIN_USER} -ge 2 ] ; then
SLACK_MES="既に誰かがログインしている可能性があります。 現在"${LOGIN_USER}"名がログイン中"
echo ${SLACK_MES}
fi
curl ${SLACK_URL} -X POST --data-urlencode 'payload={"channel": "#log", "username": "ghost-bot", "text": "監視対象へのSSH接続を検出いたしました。 '"${SLACK_MES}"'", "icon_emoji": ":ghost:"}' >/dev/null 2>&1
これを~/.ssh/rc
として保存します。
動作チェック
対象のサーバに普通にひとりでアクセスして,別タブとかで重複アクセスを試してみましょう……。
チャットに通知が飛んできました!!
また,重複ログインを行った人のコンソールには
既に誰かがログインしている可能性があります。と,チャットの後ろの部分と同じメッセージが出現しています。
slackで通知されればチャットを見ている誰かが気付けるだろうし,もしも気付けなくってもコンソールにも表示されるので安心ですね。