LoginSignup
27

More than 5 years have passed since last update.

SSHで二人以上の人が同じサーバにアクセスしたらslackに通知を飛ばす

Posted at

あるところに,某ステージングサーバにて作業をするときは一度チャットを確認して,誰も作業をしてなければ,自分が今から何の作業をするのかをチャットに残してから作業をする。というルールがありました。
私はこれを自動化しようとして,以下の条件で動作するものを作りました。

  • 誰かがサーバにアクセスする度にチャットに通知が飛ぶ
  • また,二人以上が同時にログインしているとその旨をチャットに通知する
  • ただ,誰が何の作業をしているかまでは追わない
    • 誰かいると思ったら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_-_shy_azusa.png

チャットに通知が飛んできました!!
また,重複ログインを行った人のコンソールには

1__ec2-user_next-timecard____ssh_.png

既に誰かがログインしている可能性があります。と,チャットの後ろの部分と同じメッセージが出現しています。
slackで通知されればチャットを見ている誰かが気付けるだろうし,もしも気付けなくってもコンソールにも表示されるので安心ですね。

参考: Linuxへのsshログインをslackへ通知する - Qiita

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27