DTMFによるサーバの遠隔操作

ホーム
mgetty設定
FAXの送受信
voice設定
DTMFで遠隔操作
ポケベル送信

T-Saitoh

DTMFによる遠隔操作のための設定

DTMF とは、電話をかけるときのピポパ音のことで、0-9,'#','*' の コードを入力できる。ボイスモデムでは、相手が入力した DTMF 信号を 認識機能を持っているものが多い。 vgetty では DTMF の認識結果による処理が記述できる。

vgetty は、voice.confdtmf_programにより、 DTMF 音声による制御プログラムを指定できる。 dtmf_controlでは、shell スクリプトによる制御を補助するための vmというプログラムを shell に利用する。

 #! /usr/bin/vm shell 

vmは、shell引数が指定されることで、 モデムを制御するコマンドをやりとりするパイプをオープンしてから、 shell を子プロセスとして起動し、インタプリタ動作が行われる。

dtmf_controlのプログラム

vgetty のスクリプトサンプルでは、留守番電話機能が記述されていたが、 サーバの様々な遠隔操作が行えるような機能拡張を行った。

家のサーバでは、 通常電源を切っておいて必要な時に電話により電源を入れる。 さらに、ダイアルアップ接続であるため遠隔操作機能により、 PPP や UUCP といったネットワーク接続を行わせることとした。
制御のための入力する数字コードは、機能の増加に伴い覚えるのも 困難なので、電話番号に併記してある英字コード
1: 2:ABC3:DEF
4:GHI5:JKL6:MNO
7:PQRS8:TUV9:WXYZ
により、以下のようなコードとした。

PLAY1,7529音声メッセージを録音
REC1,732録音メッセージの再生
終了9 or #電話接続を切る
HALT4258 shutdown を実行。
間違って接続を切るとトラブルもある。 よって使用しているユーザがいれば名前を読み上げたうえで、 最終確認を行ったうえで、shutdown -h を実行する。
MAIL6245各ユーザのメールの有無を確認
UUCP8827 UUCP接続を行いUUCP系メールを受ける。
uucico -fを実行する。
PPP777 PPP接続を行う。
diald によりオートダイアル&切断を行っているので、 接続時のIPアドレスを ポケベル(実際にはPHS)に転送する。 これにより勤務先や外出先から telnet を行うことも可能となる。
imget
imls
imcat
46438
4657
46228
個人宛のメールの参照を行う。
rootにて個人のメールBOXを読むのは、プログラムミスが恐いので、 個人メール関係は、 procmailにて行うものとした。
よって[DTMF] imgetという Subject のメールを個人に転送し、 procmail によりメールの参照転送を行う。

dtmf.code

dtmf_controlにて遠隔操作機能を利用する時の、 暗証番号のファイル。元々の vgetty のサンプルでは、暗証番号だけを 記入するものであったが、login 時の名前の読み上げや着信通知のために、 のポケベル番号/メールアドレスのフィールドを追加した。

# 項目は':'区切りで、各フィールドの意味は以下の通り
# 1: 暗証番号
# 2: ユーザコード
# 3: localhost でのユーザ名
# 4: Login時に読み上げるユーザ名
# 5: ポケベルによる通知のための電話番号
# 6: メールによる通知のためのメールアドレス
#
1234:1:t-saitoh:Tohru Saitoh:[ipas]070-xxxx-xxxx:t-saitoh@foo.bar.ne.jp
2345:2:tomoko:Tomoko Saitoh:0yy-yyyy-yyyy:tomoko@foo.bar.ne.jp

procmail によるメールの転送

DTMFでの遠隔操作による、メールの参照・転送を行う機能を追加した。 しかし root がユーザの mailbox を触ると、 プログラムミスがメールデータ破壊につながる危険がある。 よってひとまず、各ユーザ宛に 遠隔操作による参照転送要求があることを、 コマンドメールとして通知することで行うものとした。
各ユーザは、以下のような .procmailrc と、そこから起動されるdtmf_reply プログラムを設定する。 これにより、遠隔操作のコマンドメールを受けると、 dtmf_replyが呼び出され、 ユーザのメールを参照・転送する。 私の場合は、PHS の PメールDX へ転送している。

 # PDX によるサーバ参照
 :0
 * ^Subject:[ \t][ \t]*\[DTMF\] 
 * ^From:.*root@audrey.ei.fukui-nct.ac.jp
 | /usr/bin/formail -x Subject: \
       | /usr/bin/perl $HOME/.procmail/dtmf_reply 

◎ [ T-Saitoh電子情報福井高専 ]