🖥

VPNサーバ構築(6) Raspberry PiのLINE通知設定

2021/08/15に公開

初期設定の流れ

初期設定は2段階に分けて行っている。(セキュリティ的に意味があるのか正直分からないが。)

  • 1段階目ではインターネットに接続せず、Wi-FiやBluetooth、IPv6の無効化、ログイン関連の設定(ユーザ名の変更、sshの公開鍵認証の設定)を行う。

https://zenn.dev/kumatani/articles/vpn-2-settingupraspberrypi

https://zenn.dev/kumatani/articles/vpn-3-settingupraspberrypi-2

  • 2段階目ではインターネットに接続し、ファイアフォールの設定やパッケージの自動更新設定、メール通知設定、LINE通知設定などを行う。

https://zenn.dev/kumatani/articles/vpn-4-settingupraspberrypi-3

https://zenn.dev/kumatani/articles/vpn-5-settingupraspberrypi-4

前回の記事で第2段階目のパッケージの自動更新とメール通知設定を完了したため、本記事では初期設定の最後として、LINE通知設定を行う。

Raspberry PiからLINEに通知する

Raspberry Piをサーバとして運用するときに、毎日こまめに状態をチェックするのはあまり現実的ではない。そこで任意のアクションをトリガとしてLINEに通知が届く仕組みを用意する。今回はsshログインしたとき、およびRaspberry Piが再起動したときに、その情報をLINEに通知するような設定を行う。

LINE notifyの設定

LINE notifyのページからログインし、

https://notify-bot.line.me/ja/

My pageの"Generate token"から1on1(自分のみに通知)もしくは任意のグループへのアクセストークを生成する。このトークンはこのタイミングでしか表示されないため管理には注意する。


図1 アクセストークンの発行

トークンを発行するとConnected servicesに表示され、使わなくなった場合はここから無効化(Disconnect)が可能である。


図2 トークンを発行した際のConnected services

LINE通知用のシェルスクリプトを作成

準備したアクセストークンを使用し、下記のようなシェルスクリプトを作成する。

sudo vim /usr/local/bin/LINE-notify.sh 
/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
/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を再起動することで、通知されることを確認する。

参考

https://qiita.com/iitenkida7/items/576a8226ba6584864d95
https://www.netfort.gr.jp/~tosihisa/notebook/doku.php/20160110_notify_login_use_pam
http://www.mikitechnica.com/19-notify-login-pam-exec.html

Discussion