見出し画像

Tera Termマクロでシリアルログインする方法

PCとネットワーク機器やサーバとシリアルケーブルで接続してログインする方法について解説します。


シリアルログイン(コンソールログイン)する

シリアルポートで接続する場合は「/C=」でシリアルポートの番号を指定します。

connect '/C=1'

このようにシリアルポートの番号を引数で渡すだけです(サンプルでは1番)。

最近はシリアルポートを搭載しているパソコンが少なく、きっと皆さんはUSBシリアルを使用しているかと思います。そうすると単純に1とか2にはならないと思うので、使用したいシリアルポートが何番なのか事前に調べておく必要があります。

ボーレートを指定する

TeraTermの初期設定ではシリアルポートのボーレートは9600となっています。通常はこれでも問題ないかと思いますが、BIG-IPのようにボーレートが19200に設定されている場合もありますので、必要に応じてボーレートを指定します。

ボーレートは「/BAUD=」で指定します。

connect '/C=1 /BAUD=19200'

Tera Termが対応していないボーレートを指定すると、このオプションは無視されます。

ログイン処理

シリアルログインの場合はログインプロンプトやパスワードプロンプトの処理をすべて自分で書かなくてはなりません。

connect '/C=1'

sendln
sendln

; ユーザー名入力プロンプトを待ってユーザー名を送信する
wait 'login'
sendln 'foo'

; パスワード入力プロンプトを待ってパスワードを送信する
wait 'Password'
sendln 'router'

; ログイン成功後のプロンプトを待つ
wait 'Router'

シリアル接続の面倒なところはシリアルログインしたままTeraTermを閉じるとログイン状態が保持されてしまうところです(ログアウトしない)。

ですからシリアル接続したからといってログインプロンプトが表示されるとは限らず、もしかしたらパスワードプロンプトかも知れないし、既にログインしているかも知れません。では、そいういう場合に備えたTeraTermマクロを書いて見ましょう。

connect '/C=3'

sendln
pause 1

do
    wait 'login:' 'Passwaord:' 'Router#'
    if result == 1 then ;loginプロンプトが表示された場合
        sendln 'foo'
        continue
    elseif result == 2 then ;Passowrdプロンプトが表示された場合
        sendln 'router'
        continue
    endif
loop while result != 3 ;Router# という文字列を受信するまでループ

waitはネットワーク機器から送信されてきた文字列を待ち受けるコマンドですが、戻り値(resultの値)を調べるとマッチした文字列を特定できます。

たとえばresultの値が「1」であればwaitで最初に指定している「login:」にマッチしたことが分かり、resultの値が「2」であれば「Passowrd:」にマッチ、resultの値が「3」であれば「Router#」にマッチしたことが分かります。

もし、どの文字列も送信されずタイムアウトするとresultの値は「0」になります。

この記事が気に入ったらサポートをしてみませんか?