Linux でローカルマシンの IP を指定したメールアドレスへ送信するには?

Linux では、簡単な Shell コマンドで現在のダイヤルアップインターフェースの IP を取得し、指定したメールアドレスへ送信できます。以下の例は、ADSL ダイヤルアップ後に ppp0 インターフェースが作成される場合に適しています。

NOW_IP=`/sbin/ifconfig ppp0 | grep inet | awk {'print $2'} | cut -f2 -d:`
echo $NOW_IP | mail -s "IP" your@emailaddress

各部分の意味は次のとおりです。

  • ifconfig ppp0ppp0 インターフェース情報を表示する。
  • grep inet:IP アドレスを含む行を抽出する。
  • awk {'print $2'}cut -f2 -d::IP アドレスのフィールドを取り出す。
  • mail -s "IP" your@emailaddressIP をメール件名として、結果を指定したメールアドレスへ送信する。

システムで新しい ip コマンドを使用している場合は、次の書き方で ppp0 の IPv4 アドレスを取得することもできます。

NOW_IP=$(ip -4 addr show ppp0 | awk '/inet / {print $2}' | cut -d/ -f1)
echo "$NOW_IP" | mail -s "IP" your@emailaddress

使用前に、ローカルマシンからメールを正常に送信できることを確認してください。まず次を実行できます。

echo "test" | mail -s "mail test" your@emailaddress

メールを受信できない場合は、まず mail コマンドが存在するか、またローカルマシンのメール送信サービスが正しく設定されているかを確認する必要があります。

ADSL ダイヤルアップの場合は、上記のコマンドを /etc/ppp/ip-up.local ファイルの末尾に追加して、ダイヤルアップが成功するたびに自動実行させることができます。

vi /etc/ppp/ip-up.local

保存後、スクリプトに実行権限があることを確認します。

chmod +x /etc/ppp/ip-up.local

定期的に実行することもでき、その場合はスクリプトを crontab のスケジュールタスクに追加します。たとえば 10 分ごとに実行する場合は次のとおりです。

*/10 * * * * /path/to/send-ip.sh

具体的な設定については、CentOS でルーターの外部 IP を定期的に指定メールアドレスへ送信するを参照してください。

Leave a Reply