sshを利用してマシンにログインしたことをidobataで通知したい
誰かがsshを利用してマシンにログインした時、
idobataにメッセージを流すとと楽だよな〜ということで
どうすりゃいいんだっけ、って調べてみた。
sshrcを利用する
sshrcというファイルにスクリプトを書き込むと、
sshログインが行われた際にsshrcに書いたスクリプトが実行される。
/etc/ssh/sshrcファイルを作成し、
idobataにメッセージを送るためのスクリプトを実行するようにする。
/etc/ssh/rc.d/notify_to_idobata.sh &
...実行ファイルについては、
/etc/ssh/rc.d/notify_to_idobata.shとして作った。
{{ hook_id }} のところは、適宜idobataのhook idに変えること。
badge="source=<span class='label label-success'>ログインしました</span>"
br="<br/>"
message="<b>$(id -nu) $(date +'%Y-%m-%d %H:%M:%S %Z')</b>"
curl \
--data-urlencode "$badge$br$message" \
-d format=html \
https://idobata.io/hook/{{ hook_id }}
実際にログインして通知されるか確認する
今回はvagrantを使って立ちあげたVirtual box上の
ゲストマシンに対してsshrcの設定を行った。
vagrant ssh
コマンドを実行して、
ゲストマシンにログインする。
無事ログインできたので、
idobataにログとして投げられているか確認する。
idobataにログインの通知が投げられてることを確認できた。
試験環境をansibleで作る
vagrantマシンで確認できるよう、playbookを作成した。
group_vars/vagrant
に、idobataのhook idを設定しておく。
その後、vagrant, virtualbox, packerをインストールし、
> vagrant up --provision
を実行すれば良い。
外部参考リンク
sshdのmanページ
http://www.unixuser.org/~euske/doc/openssh/jman/sshd.html
ログイン時のユーザー名を調べたい場合に参考にした
http://stackoverflow.com/questions/11052070/get-ssh-login-name-in-bash-script
今回はsshrcを利用したが、PAMを利用することも可能。
以下の記事にPAMを利用してshell scriptを実行するやり方がある。
PAMを使いたい場合、
/etc/ssh/sshd_config の UsePAM
オプションを有効にしておくこと。
http://unix.stackexchange.com/questions/7390/ssh-login-hook
通知するということ
とあるオペレーションをした後、
マシンが不調になるとか(サービスがいつの間にか死んでる)、
そういうのって基本ログから漁ると思う。
で、人の操作によるものかどうかって
ログインに利用したユーザーのbash historyから追ったり、
今回の場合のようにsshでのログイン状況を確認したい場合は
/var/log/secure の内容を後から見たりすれば良い。
が、できればアクセスした時に通知してもらったほうがありがたい。
「あとでログを確認する」というpull型のやり方は、
不具合やら暇つぶしやら定期メンテやら、
何かしらのイベントが発生しない限り見ない。
push型の仕組みを導入することでログを閲覧する機会が増えていくと思う。