複数のネットワーク機器に順にログインして show 系コマンドを流し、機器ごとのログをファイルに保存する Tera Term マクロ(.ttl)を生成するアプリを公開しました。対象の機器は表で入力するほか、手持ちの CSV を取り込んで埋めることもできます。
使い方
- ファイルと共通設定を入れる — 機器リスト CSV のパス、ログの保存フォルダとファイル名、応答待ちタイムアウト、SSH / telnet のポートを指定します。ファイル名には
{host}{date}{time}{type}が使えます。 - 機器の種類を選ぶ — Cisco IOS / IOS-XE、FortiGate、Comware / QX-S、JunOS、YAMAHA RTX、Linux のプリセットから選びます。プロンプトやコマンドはその場で書き換えられ、プリセットにない機種は自分で追加できます。
- 機器リストを埋める — ホスト・接続方式・ユーザー・パスワード・種類を表に 1 行ずつ入れます。手元に一覧があれば、CSV をファイルで読ませるか貼り付けて取り込めます(置き換え/追加)。
- 全機器で流すコマンドを書く — 種類を問わず投入するコマンドを 1 行に 1 つ書きます。続けて種類ごとのコマンドが流れます。
- 出力を受け取る —
getlog.ttlとdevices.csvがタブで切り替わります。ログの保存フォルダを作り、2 つのファイルを置いてから TTPMACRO でマクロを実行します。
マクロ本体は Shift_JIS で保存してください。UTF-8 のままだとコメントの日本語で TTPMACRO が止まります。
何に使えるか
作業前後のコンフィグ取得や、障害時の一次情報の採取です。実行後は成功・失敗の台数と、失敗した機器のホスト名がダイアログに出ます。
機器リストはマクロ本体に埋め込まず、実行時に CSV を読む形にしています。対象が変わってもマクロは作り直さずに済みます。出力される CSV は次の形です。
# host,proto,user,pass,type
192.0.2.11,ssh,admin,<パスワード>,cisco,<enable パスワード>
192.0.2.12,telnet,admin,<パスワード>,fortigate
CSV には認証情報が平文で入ります。共有フォルダに置かない、作業後に消す、といった扱いが前提です。表のパスワードは既定で伏せ字にしていますが、CSV にはそのまま出ます。
技術メモ
HTML / CSS / JavaScript のみ、index.html 1 枚です。外部 CDN に依存しておらず、入力はブラウザ内で完結してサーバには送っていません。
CSV の取り込みは FileReader で ArrayBuffer として読み、TextDecoder の UTF-8 に fatal: true を付けて試し、例外が出たら Shift_JIS で読み直しています。Excel で保存した一覧が Shift_JIS で来ることが多いためです。各列の前後の空白は落とし、見出し行と # 始まりの行は読み飛ばします。5 列目の種類がプリセットにあれば、その種類のチェックも自動で入ります。分割は strsplit に合わせた単純なカンマ区切りなので、値にカンマは使えません。
機器の種類は :setdev の if / elseif に展開し、CSV の 5 列目で分岐させています。コマンド投入とページャ停止も同じ形にしてあり、マクロを開けばどの機種に何を流すかが読めます。
:setdev
known = 1
if devtype = 'cisco' then
prompt = '#'
prompt2 = '>'
logoutcmd = 'exit'
useen = 1
encmd = 'enable'
endif
return
昇格はログイン直後に wait prompt prompt2 で待ち、返ったのが昇格前のプロンプト(>)だったときだけ enable を送ります。すでに特権プロンプトで入った機器で詰まるのを避けるためです。
Tera Term 4.68 以降を想定しています。SSH はパスワード認証のみで公開鍵認証には対応していません。プロンプトは部分一致で判定するため、ホスト名に # や > を含む機器では待ち文字列の調整が要ります。