ダイアルアウトマシンとそのリモートピアは、さまざまな命令をネゴシエーションしたり交換したりして PPP リンク上で通信します。ダイアルアウトマシンを構成するときは、ローカルおよびリモートモデムから要求される命令の内容を判定する必要があります。次に、その命令を含む chat スクリプトと呼ばれるファイルを作成します。この節では、モデムの設定および chat スクリプトの作成について説明します。
ダイアルアウトマシンが接続する必要があるリモートピアは、通常、それぞれピア自身の chat スクリプトを必要とします。
chat スクリプトは、通常、ダイアルアップリンクだけで使用されます。専用回線リンクは、起動時の設定が必要な非同期インタフェースを使用しないかぎり、chat スクリプトを使用しません。
chat スクリプトの内容は、モデムまたは ISDN TA の要件、およびリモートピアの要件によって決まります。スクリプトの内容は、一連の送信予期文字列として表示されます。 ダイアルアウトマシンとリモートピアは、この文字列を通信の開始処理時に交換します。
予期文字列には、会話を開始するためにダイアルアウトホストマシンがリモートピアから受け取ると予想される文字が含まれます。送信文字列には、ダイアルアウトマシンが、予期文字列を受け取った後でリモートピアに送信する文字が含まれます。
chat スクリプト内の情報には、通常、以下が含まれます。
モデムコマンド 。しばしば AT コマンドと呼ばれる。モデムが電話を通じてデータを伝送することを可能にする
ターゲットピアの電話番号
この電話番号は、ISP または企業サイトのダイアルインサーバー、あるいは個別のマシンが要求する番号の場合がある
タイムアウト値 (必要な場合)
リモートピアからの予想されるログインシーケンス
ダイアルアウトマシンが送信するログインシーケンス
この節では、独自の chat スクリプトを作成する際の参考になる chat スクリプトの例を紹介します。モデムメーカーのガイドや ISP および他のターゲットホストからの情報には、モデムおよびターゲットピアの chat の要件が含まれています。また、数多くの PPP Web サイトで chat スクリプトのサンプルが提供されています。
以下は、独自の chat スクリプトを作成するためのテンプレートとして使用できる基本の chat スクリプトです。
ABORT BUSY ABORT 'NO CARRIER' REPORT CONNECT TIMEOUT 10 "" AT&F1M0&M5S2=255 SAY "Calling myserver\n" TIMEOUT 60 OK "ATDT1-123-555-1212" ogin: pppuser ssword: \q\U % pppd |
スクリプトの内容 |
説明 |
---|---|
ABORT BUSY |
モデムが反対側のピアからこのメッセージを受け取った場合、伝送を中止する |
ABORT 'NO CARRIER' |
ダイアル時にモデムが 'NO CARRIER' を報告した場合、伝送を中止する。 このメッセージは、通常、ダイアルまたはモデムのネゴシエーションが失敗したときに発生する |
REPORT CONNECT |
CONNECT 文字列をモデムから収集し、その文字列を出力する |
TIMEOUT 10 |
初期タイムアウトを 10 秒に設定する。モデムは即時に応答する必要がある |
"" AT&F1M0&M5S2=255 |
M0 – 接続中、スピーカーをオフに設定する &M5 – モデムにエラー制御を要求させる S2=255 – TIES "+++" ブレークシーケンスを無効にする |
SAY "Calling myserver\n" |
ローカルマシン上に「Calling myserver (myserver を呼び出し中)」のメッセージを表示する |
TIMEOUT 60 |
タイムアウトを 60 秒にリセットし、接続ネゴシエーションにより多くの時間を割り当てる |
OK "ATDT1-123-555-1212" |
電話番号 1-123-555-1212 を使ってリモートピアに発信する |
ogin: pppuser |
UNIX 方式のログインを使ってピアにログインする。ユーザー名 pppuser を指定 |
ssword: \q\U |
\q – –v オプションを使ってデバッグする場合、ログをとらない \U – –U の後に続く文字列の内容を挿入する。文字列はコマンド行に指定されるもので、通常はパスワードが含まれる |
% pppd |
% シェルプロンプトを待ち、pppd コマンドを実行する |
Solaris PPP 4.0 には、ユーザーが自分のサイトで使用するために変更できる /etc/ppp/myisp-chat.tmpl という chat スクリプトテンプレートが用意されています。/etc/ppp/myisp-chat.tmpl は、基本のモデム chat スクリプトと似ていますが、ログインシーケンスが含まれていません。
ABORT BUSY ABORT 'NO CARRIER' REPORT CONNECT TIMEOUT 10 "" "AT&F1" OK "AT&C1&D2" SAY "Calling myisp\n" TIMEOUT 60 OK "ATDT1-123-555-1212" CONNECT \c |
スクリプトの内容 |
意味 |
---|---|
ABORT BUSY |
モデムが反対側のピアからこのメッセージを受け取った場合、伝送を中止する |
ABORT 'NO CARRIER |
ダイアル時にモデムが 'NO CARRIER' を報告した場合、伝送を中止する。このメッセージは、通常、ダイアルまたはモデムのネゴシエーションが失敗したときに発生する |
REPORT CONNECT |
CONNECT 文字列をモデムから収集し、その文字列を出力する |
TIMEOUT 10 |
初期タイムアウトを 10 秒に設定する。 モデムは即時に応答する必要がある |
"" "AT&F1" |
モデムを出荷時のデフォルトにリセット |
OK "AT&C1&D2" |
モデムをリセットする。その結果、&C1 では、モデムからの DCD がキャリアを追跡する。リモート側がなんらかの理由で電話を切った場合、DCD はドロップする &D2 では、DTR の High-Low 遷移により、モデムが「オンフック」状態になる、またはハングアップする |
SAY "Calling myisp\n" |
ローカルマシン上に「Calling myisp (myisp を呼び出し中)」のメッセージを表示する |
TIMEOUT 60 |
タイムアウトを 60 秒にリセットし、接続ネゴシエーションにより多くの時間を割り当てる |
OK "ATDT1-123-555-1212" |
電話番号 1-123-555-1212 を使ってリモートピアに発信する |
CONNECT \c |
反対側のピアのモデムからの CONNECT メッセージを待つ |
ダイアルアウトマシンから U.S. Robotics Courier モデムを使用して ISP を呼び出すには、テンプレートとして次の chat スクリプトを使用します。
ABORT BUSY ABORT 'NO CARRIER' REPORT CONNECT TIMEOUT 10 "" AT&F1M0&M5S2=255 SAY "Calling myisp\n" TIMEOUT 60 OK "ATDT1-123-555-1212" CONNECT \c \r \d\c SAY "Connected; running PPP\n" |
次の表では、chat スクリプトの内容を説明します。
スクリプトの内容 |
説明 |
---|---|
ABORT BUSY |
モデムが反対側のピアからこのメッセージを受け取った場合、伝送を中止する |
ABORT 'NO CARRIER' |
モデムが反対側のピアからこのメッセージを受け取った場合、伝送を中止する |
REPORT CONNECT |
CONNECT 文字列をモデムから収集し、その文字列を出力する |
TIMEOUT 10 |
初期タイムアウトを 10 秒に設定する。モデムは即時に応答する必要がある |
"" AT&F1M0M0M0M0&M5S2=255 |
M0 – 接続中、スピーカーをオフに設定する &M5 – モデムにエラー制御を要求させる S2=255 – TIES "+++" ブレークシーケンスを無効にする |
SAY "Calling myisp\n" |
ローカルマシン上に「Calling myisp (myisp を呼び出し中)」のメッセージを表示する |
TIMEOUT 60 |
タイムアウトを 60 秒にリセットし、接続ネゴシエーションにより多くの時間を割り当てる |
OK "ATDT1-123-555-1212" |
電話番号 1-123-555-1212 を使ってリモートピアに発信する |
CONNECT \c |
反対側のピアのモデムからの CONNECT メッセージを待つ |
\r \d\c |
CONNECT メッセージの最後まで待つ |
SAY “Connected; running PPP\n” |
「Connected; running PPP (接続完了。PPP を実行中)」という通知メッセージをローカルマシン上に表示する |
次の chat スクリプトは、Solaris のリモートピアまたは他の UNIX タイプのピアを呼び出すために基本のスクリプトを拡張したものです。この chat スクリプトは、ピアを呼び出すための命令群を作成する方法で使用されています。
SAY "Calling the peer\n" TIMEOUT 10 ABORT BUSY ABORT 'NO CARRIER' ABORT ERROR REPORT CONNECT "" AT&F1&M5S2=255 TIMEOUT 60 OK ATDT1-123-555-1234 CONNECT \c SAY "Connected; logging in.\n" TIMEOUT 5 ogin:--ogin: pppuser TIMEOUT 20 ABORT 'ogin incorrect' ssword: \qmypassword "% " \c SAY "Logged in. Starting PPP on peer system.\n" ABORT 'not found' "" "exec pppd" ~ \c |
スクリプトの内容 |
説明 |
---|---|
TIMEOUT 10 |
初期タイムアウトを 10 秒に設定する。モデムは即時に応答する必要がある |
ABORT BUSY |
モデムが反対側のピアからこのメッセージを受け取った場合、伝送を中止する |
ABORT 'NO CARRIER' |
モデムが反対側のピアからこのメッセージを受け取った場合、伝送を中止する |
ABORT ERROR |
モデムが反対側のピアからこのメッセージを受け取った場合、伝送を中止する |
REPORT CONNECT |
CONNECT 文字列をモデムから収集し、その文字列を出力する |
"" AT&F1&M5S2=255 |
&M5 – モデムにエラー制御を要求させる S2=255 – TIES "+++" ブレークシーケンスを無効にする |
TIMEOUT 60 |
タイムアウトを 60 秒にリセットし、接続ネゴシエーションにより多くの時間を割り当てる |
OK ATDT1-123-555-1234 |
電話番号 1-123-555-1212 を使ってリモートピアに発信する |
CONNECT \c |
反対側のピアのモデムからの CONNECT メッセージを待つ |
SAY "Connected; logging in.\n" |
「Connected; logging in (接続完了。ログイン中)」という通知メッセージを表示して、ユーザーの状態を知らせる |
TIMEOUT 5 |
タイムアウトを変更し、ログインプロンプトを迅速に表示できるようにする |
ogin:--ogin: pppuser |
ログインプロンプトを待つ。ログインプロンプトを受け取らなかった場合は、RETURN を送信して待機する。次にユーザー名 pppuser をピアに送信する。この後に続くシーケンスは、ほとんどの ISP から PAP ログインと呼ばれている。ただし、PAP 認証とはまったく無関係である |
TIMEOUT 20 |
タイムアウトを 20 秒に変更し、パスワードの検証により多くの時間をかけられるようにする |
ssword: \qmysecrethere |
ピアからのパスワードプロンプトを待つ。プロンプトを受け取ると、パスワード \qmysecrethere を送信する。\q は、パスワードがシステムログファイルに書き込まれるのを防ぐ |
"% " \c |
ピアからのシェルプロンプトを待つ。 chat スクリプトは C シェルを使用する。ユーザーが異なるシェルを使ってログインすることを希望する場合は、この値を変更する |
SAY "Logged in. Starting PPP on peer system.\n" |
「Logged in. Starting PPP on peer system (ログイン完了。ピアシステム上で PPP を開始中)」という通知メッセージを表示して、ユーザーの状態を知らせる |
ABORT 'not found' |
シェルがエラーに遭遇した場合、伝送を中止する |
"" "exec pppd" |
ピア上で pppd を起動する |
~ \c |
PPP がピア上で開始するのを待つ |
ISP は、CONNECT \c の直後に PPP を開始することをしばしば「PAP ログイン」といいます。しかし、実際には、PAP ログインは PAP 認証とは無関係です。
ogin:--ogin: pppuser 句は、ダイアルインサーバーからのログインプロンプトに対してユーザー名 pppuser を送信するようにモデムに指示します。pppuser は、ダイアルインサーバー上のリモートユーザー user1 用に作成された専用の PPP ユーザーアカウント名です。ダイアルインサーバー上に PPP ユーザーアカウントを作成する方法については、ダイアルインサーバーのユーザーを構成する方法を参照してください。
次は、ダイアルアウトマシンから ZyXEL omni.net ISDN TA を使って呼び出すための chat スクリプトです。
SAY "Calling the peer\n" TIMEOUT 10 ABORT BUSY ABORT 'NO CARRIER' ABORT ERROR REPORT CONNECT "" AT&FB40S83.7=1&K44&J3X7S61.3=1S0=0S2=255 OK ATDI18882638234 CONNECT \c \r \d\c SAY "Connected; running PPP\n" |
次の表では、chat スクリプトのパラメータを説明します。
スクリプトの内容 |
説明 |
---|---|
SAY "Calling the peer" |
ダイアルアウトマシンの画面上にこのメッセージを表示する |
TIMEOUT 10 |
初期タイムアウトを 10 秒に設定する |
ABORT BUSY |
モデムが反対側のピアからこのメッセージを受け取った場合、伝送を中止する |
ABORT 'NO CARRIER' |
モデムが反対側のピアからこのメッセージを受け取った場合、伝送を中止する |
ABORT ERROR |
モデムが反対側のピアからこのメッセージを受け取った場合、伝送を中止する |
REPORT CONNECT |
CONNECT 文字列をモデムから収集し、その文字列を出力する |
"" AT&FB40S83.7= 1&K44&J3X7S61.3=1 S0=0S2=255 |
|
OK ATDI18882638234 |
ISDN 呼び出しを行う。マルチリンクでは、2 番目の呼び出しは、同じ電話番号に対して行われる。これは、通常、ほとんどの ISP の条件である。リモートピアが 2 番目の電話番号に異なる番号を要求す る場合は、「+ nnnn」を付け加える。nnnn は 2 番目の電話番号を表す |
CONNECT \c | |
\r \d\c |
CONNECT メッセージの最後まで待つ |
SAY "Connected; running PPP\n" |
ダイアルアウトマシンの画面上にこのメッセージを表示する |
chat スクリプトのオプションの説明およびその他の詳細な情報については、chat(1M) のマニュアルページを参照してください。送信予期文字列の説明については、UUCP Chat-Script フィールドを参照してください。
数多くの Web サイトで、chat スクリプトのサンプルとスクリプト作成のヒントが提供されています。
オーストラリア国立大学の Web サイトから利用できる PPP FAQ (Frequently Asked Questions) のページ (URL) も参考になります。
chat スクリプトを呼び出すには、connect オプションを使用します。PPP 構成ファイルまたはコマンド行で connect "chat ..." を使用できます。
chat スクリプトは実行可能ではありませんが、connect によって呼び出されるプログラムは実行可能でなければなりません。connect によって呼び出されるプログラムに chat ユーティリティを使用することがあります。この場合、–f オプションを使用して chat スクリプトを外部ファイルに保存すると、chat スクリプトファイルは実行可能にはなりません。
chat(1m) で説明されている chat プログラムは、実際の chat スクリプトを実行します。pppd デーモンは、pppd が connect "chat ..." オプションに遭遇すると必ず、chat プログラムを起動します。
Perl や Tcl などの外部プログラムを使って機能を拡張した chat スクリプトを作成することもできます。Solaris PPP 4.0 で chat ユーティリティが提供されているのは、ユーザーの便宜を図るためです。
ASCII ファイル形式で chat スクリプトを作成します。
次の構文を使用して、任意の PPP 構成ファイル内で chat スクリプトを呼び出します。
connect 'chat -f /etc/ppp/chatfile' |
-f フラグは、ファイル名が後に続くことを示します。/etc/ppp/chatfile は、chat ファイルの名前を表します。
外部 chat ファイルの読み取り権を pppd コマンドを実行するユーザーに与えます。
connect 'chat ...' オプションが特権ソースから呼び出された場合でも、chat プログラムは、常にユーザーの権限と連携して実行します。従って、-f オプションを使って読み取る個別の chat ファイルは、それを呼び出すユーザーが読み取り権を持っている必要があります。chat スクリプトにパスワードやその他の機密情報が含まれる場合、この特権はセキュリティの問題にかかわる可能性があります。
特定のピアで必要な chat スクリプトが長くて複雑な場合は、スクリプトを別ファイルとして作成することを考えます。外部 chat ファイルは、簡単に維持、作成できます。ハッシュ記号 (#) の後に続けて chat ファイルについてのコメントを追加できます。
外部ファイルに含まれる chat スクリプトの使用については、ピアを呼び出すための命令群を作成する方法 の手順を参照してください。
次に示すように、chat スクリプトの全会話を 1 つの行に入れることができます。
connect 'chat "" "AT&F1" OK ATDT5551212 CONNECT "\c"' |
実行可能なスクリプトの chat ファイルを作成して、ダイアルアップリンクが開始されたときに自動的に実行されるようにできます。これにより、接続開始時に、従来の chat スクリプトに含まれるコマンドのほかに、パリティー設定のための stty のような追加コマンドを実行できます。
この実行可能な chat スクリプトは、7 ビット長/ 偶数パリティーを要求する旧スタイルの UNIX システムにログインし、PPP 実行時に 8 ビット長/ パリティーなしに移行します。
#!/bin/sh chat "" "AT&F1" OK "ATDT555-1212" CONNECT "\c" stty evenp chat ogin: pppuser ssword: "\q\U" % "exec pppd" stty -evenp |