LinuxサーバからグローバルIPアドレスをLINEで通知させてみた【(番外編)家から実家のファイルサーバを使いたいんじゃ!シリーズ】

今回は緊急で「家から実家のファイルサーバを使いたいんじゃ!シリーズ」の番外編を投稿します。

当シリーズの前回までの投稿では、自宅から実家にあるファイルサーバの中身を操作できるように以下のような設定を行ってきました。

  1. 実家のホームゲートウェイにVPN機能を有効化、ユーザの作成
  2. 自宅から実家のサーバに接続させるWindowsPCにVPN設定を追加
  3. 実際にエクスプローラでファイルサーバに向けてファイルの閲覧
  4. 不定期に変更されるグローバルIPアドレスをGmailで送信
  5. 毎分グローバルIPアドレスの変更チェックしGmailで通知するシステムの作成

といったような内容を投稿してきました。

これらの設定の中で使用されるGmailに問題が発生してしまいました。

5月末以降Googleアカウントの"安全性の低いアプリのアクセス"が利用できない問題

前述の4つ目手順のIPアドレス通知で使用するgmail設定の中で"Googleアカウントのセキュリティ設定“を有効にする手順があります。

改めてこの設定ページを見てみると、、、

2022 年 5 月 30 日より、この設定は利用できなくなります。"

はぇ~まじか。。。

この機能が終了したみたいですね。これが使えなくなるということは不定期で変更されるグローバルIPアドレスの通知がgmailで出来できないということになります。

そのためGmail以外のメールを使って送信環境を構築するなどの方法を取らなくてはなりません。

 

この際LINEで通知してみる

この機会にメールではなくてLINEで通知してみようかな~と思って調べてみたら

LINE Notify」というサービスが簡単に導入できそうだったので今回はこちらの通知方法に変更してみようかと思います。

 

LINE Notifyとは

APIを通じて外部のアプリケーションやWebサービスなどからLINEのメッセージを配信できるサービスです。

定期的な通知や更新情報の通知をLINEメッセージとして受け取ることが出来ます。

利用料金は無料ですが、通知回数は1ユーザあたり1時間に1000回までです。

仮に通知先が「自分へ直接通知」、「サーバ管理者のグループへ通知」のルートあった場合、この2つのルートの合計が1000回以内である必要があります。

さらに、広告利用や販売促進となる通知も禁止です。

 

Line Notifyを使ったグローバルIPアドレス変更通知の概要

まずは全体のイメージ図をご覧ください。

イメージ図の解説です。

  1. Ubuntuサーバ内で毎分グローバルIPアドレスの更新チェックを実行。
  2. もし、グローバルIPアドレスが変更されたら、メッセージ文(グローバルIPアドレスが変更されました・・・)に取得したIPアドレスを挿入してLINEに送信するメッセージを作成。
  3. 画像ののように、2.で作成したメッセージに自分のLINEアカウントで発行したAPIトークンを付加して、LINE NotyfyサーバにPostリクエストを送信。
  4. 画像のように、LINE Notifyが自分のアカウントに宛ててUbuntuサーバから送信されたメッセージをそのまま送信。
  5. スマホのLINEを見てみるとLINE NotifyアカウントからグローバルIPアドレスの更新メッセージが受信されいる。

といった流れです。

 

LINE NotifyのAPIトークン取得手順

まずはLINE Notifyのセットアップをしていきましょう。

セットアップのゴールはLINE NotifyのAPIトークンの取得です。

トークンのイメージは、送信先となるメールアドレスをイメージするとわかりやすいかもしれません。

取得したトークンをコマンド内で送信先メールアドレスのように設定すると自分のLINEでメッセージを受信することができます。

 

LINE Notifyにログインする

まずは以下のリンクからLINE Notifyのトップページにアクセスします。

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

 

そのトップページの右上にあるログインをクリックします。

 

LINEログイン画面が開いたら自分が使っているLINEアカウントのメールアドレスとパスワードを入力してログインをクリックします。

 

APIのアクセストークンを発行する

ログイン後、LINEのユーザ名をクリックしマイページを選択します。

スクロール後、「トークンを発行する」をクリックします。

「トークンを発行する」画面で以下のように操作します。

  • トークン名:任意のトークン名を入力(このAPIを使ってやりたいことをトークン名にすると便利)
  • トークルーム:「1:1でLINE Notifyから通知を受け取る」や「LINEグループ」から通知を出したいトークルームを選択
    • 1:1の場合はLINE Notifyアカウントから直接通知されます。
    • LINEグループの場合はLINEグループにLINE Notifyアカウントを追加することでグループ通知することが出来ます。

トークン名とトークルームの設定が出来たら「発行する」をクリックします。

 

以下のように発行されたトークンが出てくるので「コピー」をクリックしてどこかにメモしておきます。

※この画面を閉じたら二度と見れないのでメモは必須です。

メモが出来たら閉じるをクリックして、連携中のサービスに追加したトークン名があることを確認します。

 

試しに通知を実行してみる

取得したAPIトークンを使って試しにLinuxサーバから通知リクエストをしてみましょう。

 

基本的なコマンド文

リクエストに使用する際は以下のコマンドを使います。

curl -X POST -H "Authorization: Bearer 取得したアクセストークン" -F "message=テスト送信です" https://notify-api.line.me/api/notify

簡単に解説するとcurlコマンドでLINE NotifyサーバにPOSTリクエストを行っています。

コマンドの以下の部分を自分用に変更して実行してみてください。

  • Bearer の後の「取得したアクセストークン」を自分がコピーしたトークンに変更。
  • message= の後「テスト送信です」を自分のLINEに送信したい文章に変えてもOKです。

 

変更が終わったら実行してみましょう。

 

実行結果

LINE Notifyアカウントから「テスト送信です」とメッセージが届きました。

 

コマンドの実行結果をメッセージに書き込む

コマンドの実行結果をメッセージに書き込むこともできます。

例として、まずはdateコマンドの実行結果をLINE Notifyに送信させてみましょう。

時刻を送信するコマンド

curl -X POST -H "Authorization: Bearer 取得したアクセストークン" -F "message=`date`" https://notify-api.line.me/api/notify

message= の部分をmessage=`date`に変更することで時刻を送信できます。

dateを囲っている‘ ‘はシングルクォーテーションではなく、バッククォーテーションです。

キーボードでいうところの[Shift] + [@]です。

 

dateコマンドの実行結果

dateコマンドの実行結果がそのまま送信されました。

日本時間ではないのはLinuxサーバの設定をJSTに変更していないだけなので気にしなくてOKです。

 

次は変数の中身がメッセージとして送信されるかをチェックしましょう。

変数の中身を送信するコマンド

hoge="hensu no nakami"
curl -X POST -H "Authorization: Bearer 取得したアクセストークン" -F "message=$hoge" https://notify-api.line.me/api/notify

一行目でhogeという変数に「hensu no nakami」という文字列を入れます。

2行目のmessage=$hogeでhoge変数の中身である「hensu no nakami」を引き出してLINE Notifyサーバに送信しています。

 

変数の送信の結果

変数hogeの中身である「hensu no nakami」が送信されました。

 

次は、グローバルIPアドレスを送信させるコマンドを検証してみましょう。

グローバルIPアドレスを送信するコマンド

ついでにテキストファイルの読み込みもついでに確認するために、通知メッセージファイル(message.txt)を用意してそのファイルの4行目にcurlコマンドで取得したグローバルIPアドレスをsedコマンドで突っ込ませた文字列をLINEに通知してみましょう。

message.txt

グローバルIPアドレスが変更されました。
以下は新しいIPアドレスです。

hayana

グローバルアドレスの通知コマンド

GroIP=`curl inet-ip.info` ; notiMessage=`sed -e "4i $GroIP" message.txt` ; curl -X POST -H "Authorization: Bearer 取得したアクセストークン" -F "message=$notiMessage" https://notify-api.line.me/api/notify

長いので少し分解して改行すると、、、

GroIP=`curl inet-ip.info` ;
notiMessage=`sed -e "4i $GroIP" message.txt` ;
curl -X POST -H "Authorization: Bearer 取得したアクセストークン" -F "message=$notiMessage" https://notify-api.line.me/api/notify

上のコマンドでは

1行目では、curlコマンドでグローバルIPアドレスを取得し、変数GroIPに代入しています。

2行目では、message.txtの4行目に変数GroIPの中身であるグローバルIPアドレスを差し込んで、変数notiMessageに代入しています。

3行目では、変数notuMessageの中身である通知する文章をLINEに送信しています。

 

これらを1行にまとめて送信しています。

 

グローバルIPアドレス通知の送信結果

無事通知できました。

 

これを前回のグローバルIPアドレスを毎分調べGmailで通知させるシェルスクリプトを作ってみたのスクリプトに落とし込めばLINE通知システムの完成です!