ぬまのどろ

namazuのゆるい日記。 ゆるり更新。

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とか使った。 知見が増えました。 色々便利な使い方をこれから知っていきたいです。

このコードを使えばあとは

qiita.com

こういう先人の知恵を参考にさせていただいてスクリプトからSlackに飛ばせばOKです。

どうでもいい話

某所のサービスでNginxの設定変更が必要で色々とやってました。 実際にはk8sのNginxIngressControllerなんですが。

設定を変更してもなんかうまく動かなくてなんでー???って机バンバンしたり研究室の中をぐるぐる回ったりしていました。

結局

こういうアホみたいな原因でした。 ちゃんと上段も設定したらうまく行きました。 全体を把握してから取り掛からないと時間がかかることがあるよっていういい知見を得ました。