シェルスクリプトでtelnet接続→コマンド実行
シェルスクリプトで、他ホストにtelnetログインしてコマンドを実行し情報を取得する方法。
たとえば、L2/L3スイッチの統計情報やarpテーブルの情報を自動的に取得する処理をシェルスクリプトで作成したいとき
telnetの場合、FTP転送をヒアドキュメントを使用して自動的に実行するのと同じ方法では実装できない。理由は、ヒアドキュメントの場合、標準入力に間髪入れずに入力内容を送りこんでしまうので、ログインプロンプトを待つことができないから。
ユーザ名を標準入力に送り込む前に少し待機すると、ログインすることができる。
ポイントは、
・ヒアドキュメントを使用せずに、コマンドのグループ化とパイプを使用してtelnetコマンドの標準入力にコマンドを送り込む
・sleepコマンドで待機
実際のやり方は以下を参照。(Ciscoのスイッチからarpテーブル情報を取得する場合。)
$ (sleep 5; #パスワードプロンプトが表示されるまでsleepコマンドで待つ
echo username;sleep 5; #ユーザ名入力 標準入力に送り込むのでechoで出力(Ciscoスイッチは実際にはユーザ名入力はありません)
echo password;sleep 10; # パスワード入力
enable;sleep 5; #特権モードへ切り替え
echo enablepassword;sleep 1; # 特権モードのパスワード入力
show arp;sleep 1; # arpテーブル取得
exit; ) | telnet 192.168.1.250 >> arp.log # コマンドをグループ化し、その標準出力をパイプでtelnetコマンドの標準入力に送り込む
追記:
この方法はスクリプトで、passwdコマンドを使ってパスワードを自動設定するときにも使えます!