ルータ・スイッチのコンソール自動ログインスクリプト(TeraTerm) | SEの道標
スクリプト

ルータ・スイッチのコンソール自動ログインスクリプト(TeraTerm)

TeraTermでスクリプトを作る

TeraTermではスクリプト (マクロ) を作ることができます。ファイルの拡張子は .ttl で、起動させるプログラムは "ttpmacro.exe" です。

.ttl ファイルをダブルクリックすれば、スイッチのホスト名を選択リストが表示され、選択したスイッチに自動でログインできる TeraTerm のスクリプトを作りました。

スクリプトの流れとしては、まずログインするためのスイッチの種類をリストから指定させます。これはホスト名が DNS で名前解決できる前提なので、もし DNS を使えないならば IP アドレスをリスト化するのがよいでしょう。

このケースにおいては、ホスト名はコアスイッチは "CSW"、ディストリビューションスイッチは "DSW-[番号2桁]" 、エッジスイッチは "ESW-[番号2桁]" で表現されますので、スイッチの種類も CSW , DSW- , ESW- としておきます。

コアスイッチは 1 台のため、選択すればそのままログインします

他の 2 つは複数台あるため、スイッチリストを選択した後、2 桁の番号を入力をさせます

2 桁なので、1 桁番目のスイッチであっても先頭に 0 を入れなければなりませんが、入れなくても自動で先頭の "0" が補完されて "01" になるように作りこんであります

上記の方針で .ttl ファイルで以下を作成します。(注:ttl ファイルでは ;(セミコロン) はコメントアウトです)


--- switch-login.ttl ---

; Generate Host Type

strdim HostList 3
HostList[0] = 'CSW'
HostList[1] = 'DSW-'
HostList[2] = 'ESW-'

Rslt_SWType = result

HostName = HostList[Rslt_SWType]

inputbox 'Set Switch Number' 'Input SW#'

strlen inputstr

if result = 1 then
strconcat HostName '0'
elseif result = 0 then
messagebox 'Cancel!' 'Cancel'
end
endif

strconcat HostName inputstr

; Generate Command

ConnectHOST = HostName
strconcat ConnectHost ':23 /nossh'

; Execute

connect ConnectHost

wait 'login:'
sendln 'admin'

wait 'Password:'
sendln 'P@$$W0RD'

wait HostName
sendln 'en'

wait 'Password:'
sendln 'enP@$$W0RD'

そして後は .ttlファイル を ttpmacro.exe に関連付けるだけです。

右クリックで「プログラムから開く」を選び、「別のプログラムを選択(C)」をクリックし、ttpmacro.exe を選びます。(ttermpro.exe ではありませんので注意してください)

普通にインストールすれば、以下のパスになるはずです。

C:\Program Files (x86)\teraterm\ttpmacro.exe

スクリプトの註釈

このスクリプトに註釈を付けると以下のようになります。

strdim HostList 3 ;

HostList という名前のリスト(配列の長さ3。つまり、3つの選択肢を表示できる)を作ります。

HostList[0] = 'CSW'
HostList[1] = 'DSW-'
HostList[2] = 'ESW-'

HostListの各配列に文字列を代入します。

listbox 'Select SW type.' 'Select SW type.' HostList

listbox コマンドは、ユーザにリストを表示させることができます。1 番目の引数がタイトルバーの文字列、2 番目の引数がボックス内の文字列、3 番目の引数が事前に作成したリストの名前です。

Rslt_SWType = result

resultは直前の実行コマンドの結果が入る環境変数です。つまり、今回のケースでは listbox の実行結果です。

このケースでは、誰かがスクリプトを走らせ、リストから文字列を選んだ結果が入るわけですが、listbox コマンドの場合は選択した配列の番号が入ります。つまり、CSW を選択したのであれば result = 0 , DSW- を選択したのであれば result = 1 、ESW- を選択したのであれば result = 2 となります。

HostName = HostList[Rslt_SWType]

HostName はホスト名を示します。コアスイッチはこのままでよいですが、他の 2 種類は追加で数字2桁が必要になります。

inputbox 'Set Switch Number' 'Input SW#'

inputbox コマンドでは、入力 BOX を表示させ、ユーザに文字を入力させることができます。

1 番目の引数がタイトルバーの文字列、2 番目の引数がボックス内の文字列です。

入力された文字列は inputstr という環境変数に代入されます。

strlen inputstr

strlen コマンドは 文字列の長さを測ることができます。

if result = 1 then
strconcat HostName '0'

もし入力された文字が1文字であれば、HostName の末尾に文字列 "0" を追加します。

elseif result = 0 then
messagebox 'Cancel!' 'Cancel'
end

もし入力された文字が0文字であれば、メッセージを表示した上でスクリプトを終了します。

messagebox コマンドはメッセージ BOX を表示させます。1 番目の引数がタイトルバーの文字列、2 番目の引数がボックス内の文字列です。

end コマンドはスクリプトの終了をします。

strconcat HostName inputstr

HostName の末尾に入力された文字列を追加します。

ConnectHOST = HostName
strconcat ConnectHost ':23 /nossh'

コマンドの文字列を作成します。HostName は別の用途で使うので残しておきます。

例えばエッジスイッチの場合は、ConnectHost という文字列に

ESW-01:23 /nossh

が入ります。:23 は TCP Port 23番を使う事を示し、/nossh は ssh を使わないことを示します。(この2つは同義ではありません。設定次第では、TCP port 23番を ssh で使う事も可能ですので。)

connect ConnectHost

connect ESW-01:23 /nossh を意味します。

wait 'login:'
sendln 'admin'

wait コマンドは、このコマンドで指定された文字列がコマンドプロンプトに返ってくるまで待つものです。

ここでは login: という文字列がプロンプトに戻ってきてから、 admin という文字列を送り込みます。これを実施しないと、telnet に繋ぎに行った直後にadmin を送りこみ、弾かれた後に login: と表示されてしまいます。

wait 'Password:'
sendln 'P@$$W0RD'

login パスワードを入力しています。

wait HostName
sendln 'enable'

ここでログイン後にホスト名が表示されますので、それを待ってから enable を送ります。

wait 'Password:'
sendln 'enP@$$W0RD'

Password: と返ってくるのを待ち、enable のパスワードを送ります。

コメント

タイトルとURLをコピーしました