VPNサーバ構築(6) Raspberry PiのLINE通知設定
初期設定の流れ
初期設定は2段階に分けて行っている。(セキュリティ的に意味があるのか正直分からないが。)
- 1段階目ではインターネットに接続せず、Wi-FiやBluetooth、IPv6の無効化、ログイン関連の設定(ユーザ名の変更、sshの公開鍵認証の設定)を行う。
- 2段階目ではインターネットに接続し、ファイアフォールの設定やパッケージの自動更新設定、メール通知設定、LINE通知設定などを行う。
前回の記事で第2段階目のパッケージの自動更新とメール通知設定を完了したため、本記事では初期設定の最後として、LINE通知設定を行う。
Raspberry PiからLINEに通知する
Raspberry Piをサーバとして運用するときに、毎日こまめに状態をチェックするのはあまり現実的ではない。そこで任意のアクションをトリガとしてLINEに通知が届く仕組みを用意する。今回はsshログインしたとき、およびRaspberry Piが再起動したときに、その情報をLINEに通知するような設定を行う。
LINE notifyの設定
LINE notifyのページからログインし、
My pageの"Generate token"から1on1(自分のみに通知)もしくは任意のグループへのアクセストークを生成する。このトークンはこのタイミングでしか表示されないため管理には注意する。
図1 アクセストークンの発行
トークンを発行するとConnected servicesに表示され、使わなくなった場合はここから無効化(Disconnect)が可能である。
図2 トークンを発行した際のConnected services
LINE通知用のシェルスクリプトを作成
準備したアクセストークンを使用し、下記のようなシェルスクリプトを作成する。
sudo vim /usr/local/bin/LINE-notify.sh
#!/bin/bash
msg=`echo -e "$1"`
curl -X POST -H 'Authorization: Bearer <access token>' -F "message=${msg}" https://notify-api.line.me/api/notify
また下記コマンドで実行権限を付与する。
sudo chmod 700 /usr/local/bin/LINE-notify.sh
これで下記のように引数にメッセージを渡すことでLINEに通知できる。
sudo /usr/local/bin/LINE-notify.sh foo
sshログイン時の通知設定
下記のように、ログイン情報をLINE通知スクリプトに渡すシェルスクリプトを作成する。
sudo vim /usr/local/bin/notify-login.sh
#!/bin/bash
if [ "${PAM_TYPE}" = "open_session" ]; then
/usr/local/bin/LINE-notify.sh "SSH info.\n\nServer: `hostname -s`\nUser: ${PAM_USER}\nRemote Host: ${PAM_RHOST}\nService: ${PAM_SERVICE}\nTerminal: ${PAM_TTY}\nDate: `date`"
fi
下記コマンドで実行権限を付与する。
sudo chmod 700 /usr/local/bin/notify-login.sh
ログイン時にこのシェルを実行させるため、common-sessionファイルを開き、
sudo vim /etc/pam.d/common-session
最下部に下記を追記する。
session optional pam_exec.so /usr/local/bin/notify-login.sh
一旦ログアウトし、再度sshで接続することで通知を確認する。
再起動時の通知設定
再起動のトリガにはcrontabを使用する。下記コマンドでcrontabの設定画面を開き、
sudo crontab -e
下記の設定を追記する。
@reboot /usr/local/bin/LINE-notify.sh "REBOOTED" 10
Raspberry Piを再起動することで、通知されることを確認する。
参考
Discussion