マクロは陰で使うもの。生産性を上げても給料は上がらず仕事が増えるだけなので仕事をサボろう!

Tera Term マクロで Cisco 機器の特権モード移行処理を作成する方法

目次

Tera Term マクロで特権モードに移行する

Cisco 機器の CLI で作業を行う場合、CLI にログイン後、特権EXECモードに移行してコマンドを実行します。よって Tera Term マクロでもログイン後に特権EXECモードに移行する処理を記述する必要があります。この処理の記述テクニックについて解説します。

動作確認環境

  • Tera Term Version 4.104

Cisco 機器のユーザや line の特権レベルを考慮する

Cisco 機器ではローカルユーザ設定や line 設定にてオプションとして「特権レベル」を設定することができます。この特権レベルの設定によって、ログイン後のデフォルトの CLI モードが変わります。

デフォルトの特権レベルではログイン直後のモードはユーザEXECモードになります。ただ特権レベルが変更されている場合、ログイン直後のモードが特権EXECモードになる場合があります。

この記事では特権レベルの設定が何であっても対応できるマクロを作成することにします。

特権EXECモードに移行する処理の記述方法

では本題の、Cisco 機器にログイン後に特権EXECモードに移行する処理の記述方法について説明します。

ログイン後のモードを確認して条件分岐する

上で記載した通り特権レベルの設定が何であっても(ログイン後のモードがユーザEXECモードでも特権EXECモードでも)対応できるマクロを作成します。このためにはログイン後のモードをチェックして条件分岐するという処理にする必要があります。

条件分岐といっても、ログイン後のモードが特権EXECモードの場合は目的の「特権モードに移行する」ことは果たせているので、実際にはログイン後のモードがユーザEXECモードの場合のみ特権モードに移行する処理を実行するという処理内容になります。

現在のモードをチェックする方法

現在のモードをチェックするためには、Tera Term の wait コマンドを使用してユーザEXECモードのプロンプトと特権EXECモードのプロンプトを同時に待ち受け、待ち受け完了後にシステム変数 result の値を確認することでできます。以下の wait コマンドの仕様を再確認しましょう。

wait の仕様
  • wait <文字列①> <文字列②> ...
補足
  • <文字列①> <文字列②> ...:待受け対象の文字列を半角スペース区切りで10個まで指定可能
  • 受信した文字列によってシステム変数 result に以下のように値が格納される
    • 文字列① ⇒ result ← 1
    • 文字列② ⇒ result ← 2
    • ...
    • 文字列⑩ ⇒ result ← 10

現在のモードを判別するためには以下のようにプロンプト文字列を指定した wait コマンドを使用します。

モード判別用の wait の記述
  • wait <ユーザEXECモードのプロンプト> <特権EXECモードのプロンプト>
補足
  • 受信した文字列によってシステム変数 result に以下のように値が格納される
    • ユーザEXECモードのプロンプト ⇒ result ← 1
    • 特権EXECモードのプロンプト ⇒ result ← 2

上記のように wait コマンドを記述することで、以下のようにモードを判別できます。

  • wait コマンド実行後に result が 1 の場合 ⇒ ユーザEXECモード
  • wait コマンド実行後に result が 2 の場合 ⇒ 特権EXECモード

これより、wait コマンド実行後に result が 1 の場合に特権EXECモードに移行する処理を実行するようなマクロ内容にすれば良いと言えます。

ユーザEXECモードから特権EXECモードに移行する処理

ユーザEXECモードから特権EXECモードに移行する場合、以下のような手順になります。

  • enable」コマンドを送信する
  • Password:」の表示を待つ
  • enable パスワードを送信する

この処理をマクロにすると以下のようになります。

; enableパスワードを変数に設定
enablepass = 'admin'

; 特権EXECモードに移行する処理
sendln 'enable'
wait 'Password:'
sendln enablepass

enable パスワードを変数に設定することはオプションですが、保守性向上のために変数化しておくことをお勧めします。

コマンドを送信する sendln についてはこちらの記事で解説しています。

特権EXECモードに移行する処理の記述例

上説明した内容を実際にマクロにしてみます。以下は対象 Cisco 機器のホスト名が「MyRouter」の場合の、特権EXECモードに移行するマクロです。

; プロンプト文字列とenableパスワードを変数に設定
prompt_user = 'MyRouter>'
prompt_privilege = 'MyRouter#'
enablepass = 'admin'

; Enterを送信してプロンプトを受信
sendln

; プロンプトを待ち受け
wait prompt_user prompt_privilege

; result = 1 の場合にのみ特権EXECモードに移行する処理を実行
if result = 1 then
 sendln 'enable'
 wait 'Password:'
 sendln enablepass
endif

待ち受けプロンプト文字列は正規表現化を推奨

当サイトではプロンプトを待ち受ける際の文字列指定を、プロンプトそのままの文字列ではなく正規表現化することを推奨しています。詳しくは以下の記事で解説しているため気になる人は確認してみてください。

あわせて読みたい
Tera Term マクロで CLI プロンプトを待ち受けるためのテクニック【waitregex】 機器のプロンプトを待ち受ける Tera Term マクロで接続先機器の CLI コマンドを操作する際、必ず機器 CLI のプロンプトを wait で待ち受けた上でコマンドを送信すること...

プロンプト文字列を正規表現化した場合、特権EXECモードに移行するマクロ例は以下のように変わります。

; ホスト名、プロンプト文字列、enableパスワードを変数に設定
hostname = 'MyRouter'
sprintf2 prompt_user '^%s.*>' hostname
sprintf2 prompt_privilege '^%s.*#' hostname
enablepass = 'admin'

; Enterを送信してプロンプトを受信
sendln

; プロンプトを待ち受け
waitregex prompt_user prompt_privilege

; result = 1 の場合にのみ特権EXECモードに移行する処理を実行
if result = 1 then
 sendln 'enable'
 wait 'Password:'
 sendln enablepass
endif

【マクロ例】Telnet ログインして特権EXECモードに移行するマクロ

以下は Cisco 機器に Telnet ログインして特権EXECモードに移行するマクロです。

;;=========================================
;; (1)変数定義パート
;;=========================================
hostname = 'MyRouter'
address = '10.1.1.1'
vtypass = 'admin'
username = 'admin'
userpass = 'admin'
enablepass = 'admin'
sprintf2 prompt_user '^%s.*>' hostname
sprintf2 prompt_privilege '^%s.*#' hostname

;;=========================================
;; (2)メイン処理パート
;;=========================================
; Telnet接続
sprintf2 connectCommand '%s:23 /nossh /T=1' address
connect connectCommand

; プロンプト待ち受け
wait 'Username:' 'Password:'

; 認証方式別にログイン処理を行う
if result = 1 then
 ; ユーザ認証の場合の処理を記述
 sendln username
 wait 'Password:'
 sendln userpass
elseif result = 2 then
 ; パスワード認証の場合の処理を記述
 sendln vtypass
endif

; 特権EXECモードに移行
sendln
waitregex prompt_user prompt_privilege
if result = 1 then
 sendln 'enable'
 wait 'Password:'
 sendln enablepass
endif

Telnet で認証方式別にログインするマクロについてはこちらの記事で解説しています。

まとめ

CHECK!
  • Cisco 機器にログイン後のモードは特権レベルの設定により変わる場合がある
  • wait コマンドを使用してプロンプトの判別をすることができる
  • 現在のモードがユーザEXECモードの場合に特権モードへの移行処理を実行することで、特権レベルの設定が何であれ対応できるマクロにできる

Tera Term マクロ関連記事リスト


Amazon で買えるおすすめアイテム(アフィリエイト)

ブログ始めるなら 【アフィリエイトリンク】

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

目次