Linuxでログインを検出して通知するちょっとしたコード
きょうしたこと
サーバでログインしたらなんかSlackに通知とか来るようにしてこの共用鯖どれくらい使われてるのかなーとか測ろうと思いました。 適当なコピーすれば動くサンプルあるだろーとおもったらすぐには見つからなかった。 なのでシェルスクリプト書けない無能なりにちょっと頑張って書いた。
Linuxのログイン履歴
ログイン履歴は last
コマンドで見れます lastlog
コマンドを使うともう少しちゃんと出ます.
新しくログインをするとlast
コマンドの出力結果に時間とかユーザ名とかIPが出てくるのでこれを使えばログイン検出できそうです。
ログイン検出してなんか走らせる汎用コード
last
コマンドをちょろっとつかって作った結果
#!/bin/bash set -eu last | sed -n 1p | awk '{print $1,$4,$5,$6,$7}'> login.log while : do # loginログ最新を漁る last | sed -n 1p | awk '{print $1,$4,$5,$6,$7}' > latest.log if diff -q login.log latest.log >/dev/null ; then # 新規ログインがない : else # 新規ログインがある echo "`hostname`で新しいログイン `cat latest.log`" # ここから通知とかのスクリプト叩く mv latest.log login.log fi sleep 10 done
こんな感じで行けました。 シェルスクリプト力の無さがコメントとかににじみ出ていますね。 一応これでログインが行われるとコンソールに出力されます。
そういえば初めてawk
とか使った。 知見が増えました。 色々便利な使い方をこれから知っていきたいです。
このコードを使えばあとは
こういう先人の知恵を参考にさせていただいてスクリプトからSlackに飛ばせばOKです。
どうでもいい話
某所のサービスでNginxの設定変更が必要で色々とやってました。 実際にはk8sのNginxIngressControllerなんですが。
設定を変更してもなんかうまく動かなくてなんでー???って机バンバンしたり研究室の中をぐるぐる回ったりしていました。
結局
Nginxの変更適用されなくて????ってしてたら問題引き起こしてるのはその上の段のNginxだったOTZ。。。
— namazu (@namazu510) 2017年12月6日
こういうアホみたいな原因でした。 ちゃんと上段も設定したらうまく行きました。 全体を把握してから取り掛からないと時間がかかることがあるよっていういい知見を得ました。