目次
動作確認環境
- Tera Term Version 4.104
マクロ概要
ネットワークのルーティングや接続制限の問題で作業端末から直接対象機器に接続できない環境では、踏み台を経由して対象機器に接続する場合がある。このマクロは、踏み台と対象機器がともに Cisco 機器であることを前提とし、踏み台を経由して対象機器にログインするためのマクロである。また、踏み台を使用しないで対象機器に直接ログインするために使用することもできる。
動作内容
- Cisco 機器にログインした後、その Cisco 機器から別の Cisco 機器にログインする
- 踏み台を使用しないよう設定した場合、直接対象機器にログインすることも可能
- リモート接続プロトコルとしては Telnet と SSH に対応
- Telnet の認証方式としてはユーザ認証とパスワード認証に対応
- SSH の認証方式としてはユーザパスワード認証のみに対応
- 対象機器にログイン後、特権EXECモードに移行した上でログ保存を開始する
マクロテキスト
;;*********************************************************
;; Title: 踏み台(Cisco機器)経由で Cisco 機器にログインするマクロ
;; 作成元: https://teramacro.com/
;; 説明ページ: https://teramacro.com/macro-loginindirect/
;;*********************************************************
;;================================================
;; (1)変数定義パート(マクロユーザ編集箇所)
;; ※使わない変数でも記述を削除しないこと
;;================================================
; 接続先機器情報
hostname_target = 'ホスト名'
address_target = 'IPアドレス'
username_target = 'ログイン用ユーザ名'
userpass_target = 'ログイン用ユーザパスワード'
vtypass_target = 'ログイン用VTYパスワード'
enablepass_target = 'enableパスワード'
connectprotocol_target = '接続プロトコル' ;Telnetなら「telnet」SSHなら「ssh」とする
; 踏み台機器情報
hostname_bastion = 'ホスト名' ;空文字列('')にすると踏み台を使用しない
address_bastion = 'IPアドレス'
username_bastion = 'ログイン用ユーザ名'
userpass_bastion = 'ログイン用ユーザパスワード'
vtypass_bastion = 'ログイン用VTYパスワード'
enablepass_bastion = 'enableパスワード'
connectprotocol_bastion = '接続プロトコル' ;Telnetなら「telnet」SSHなら「ssh」とする
; ログ保存設定
logfolder = '作業ログ' ;ログファイル保存先フォルダ名
logfilename = hostname_target ;ログファイル名
datetime_flag = 1 ; 1⇒日付時刻をファイル名末尾に付与する、0⇒付与しない
;;================================================
;; (2)メイン処理パート
;; ※ここから下は編集しないこと
;;================================================
strcompare hostname_bastion ''
;;-----------------------------------------
; 踏み台を使用する場合の処理
;;-----------------------------------------
if result <> 0 then
;;-----------------------------------------
; 踏み台機器にログイン
;;-----------------------------------------
; ログイン処理
address = address_bastion
username = username_bastion
userpass = userpass_bastion
vtypass = vtypass_bastion
connect_protocol = connectprotocol_bastion
call LoginTelnetOrSSH
; 特権EXECモードに移行
enablepass = enablepass_bastion
sprintf2 prompt_user '^%s.*>' hostname_bastion
sprintf2 prompt_privilege '^%s.*#' hostname_bastion
call BecomePrivilege
;;-----------------------------------------
; 踏み台から対象機器にログイン
;;-----------------------------------------
; ログイン処理
address = address_target
username = username_target
userpass = userpass_target
vtypass = vtypass_target
connect_protocol = connectprotocol_target
call LoginTelnetOrSSHToCisco
else
;;-----------------------------------------
; 踏み台を使用しない場合の処理
;;-----------------------------------------
; 対象機器へのログイン処理
address = address_target
username = username_target
userpass = userpass_target
vtypass = vtypass_target
connect_protocol = connectprotocol_target
call LoginTelnetOrSSH
endif
;;-----------------------------------------
; 対象機器にて特権EXECモードに移行
;;-----------------------------------------
enablepass = enablepass_target
sprintf2 prompt_user '^%s.*>' hostname_target
sprintf2 prompt_privilege '^%s.*#' hostname_target
call BecomePrivilege
;;-----------------------------------------
; ログ保存開始
;;-----------------------------------------
call StartLogging
;;-----------------------------------------
; メイン処理終了
;;-----------------------------------------
end
;;================================================
;; (3)サブルーチンパート
;;================================================
;;-----------------------------------------
;;◆LoginTelnetOrSSH: Cisco 機器に Telnet または SSH でログインする
;; 変数:
;; - connect_protocol : 接続プロトコル
;; - telnet ⇒ サブルーチン TelnetLogin を呼び出す
;; - ssh ⇒ サブルーチン SSHLogin を呼び出す
;; - その他 ⇒ エラーとしてマクロを停止する
;;-----------------------------------------
:LoginTelnetOrSSH
error_flag = 1
strcompare connect_protocol 'ssh'
if result = 0 then
call SSHLogin
error_flag = 0
endif
strcompare connect_protocol 'telnet'
if result = 0 then
call TelnetLogin
error_flag = 0
endif
if error_flag = 1 then
messagebox 'プロトコル設定(connect_protocol)が不正のため処理を中止します' 'エラー'
end
endif
return
;;-----------------------------------------
;;◆TelnetLogin: Cisco 機器に Telnet ログインする
;; 変数:
;; - address : IPアドレス
;; - username : ログインユーザ名
;; - userpass : ログインユーザパスワード
;; - vtypass : VTYパスワード
;;-----------------------------------------
:TelnetLogin
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
return
;;-----------------------------------------
;;◆SSHLogin: SSHログインを行う
;; 変数:
;; - address : IPアドレス
;; - username : ログインユーザ名
;; - userpass : ログインユーザパスワード
;;-----------------------------------------
:SSHLogin
sprintf2 connectCommand '%s:22 /ssh /2 /auth=password /user=%s /passwd=%s /nosecuritywarning' address username userpass
connect connectCommand
return
;;-----------------------------------------
;;◆BecomePrivilege: Cisco 機器で特権EXECモードに移行する
;; 変数:
;; - prompt_user : ユーザEXECモードのプロンプトを示す正規表現
;; - prompt_privilege : 特権EXECモードのプロンプトを示す正規表現
;; - enablepass : Enableパスワード
;;-----------------------------------------
:BecomePrivilege
flushrecv
sendln
waitregex prompt_user prompt_privilege
if result = 1 then
flushrecv
sendln 'enable'
wait 'Password:'
flushrecv
sendln enablepass
endif
return
;;-----------------------------------------
;;◆LoginTelnetOrSSHToCisco: Cisco 機器から Cisco 機器へ Telnet または SSH でログインする
;; 変数:
;; - connect_protocol : 接続プロトコル
;; - telnet ⇒ サブルーチン TelnetToCisco を呼び出す
;; - ssh ⇒ サブルーチン SSHToCisco を呼び出す
;; - その他 ⇒ エラーとしてマクロを停止する
;;-----------------------------------------
:LoginTelnetOrSSHToCisco
error_flag = 1
strcompare connect_protocol 'ssh'
if result = 0 then
call SSHToCisco
error_flag = 0
endif
strcompare connect_protocol 'telnet'
if result = 0 then
call TelnetToCisco
error_flag = 0
endif
if error_flag = 1 then
messagebox 'プロトコル設定(connect_protocol)が不正のため処理を中止します' 'エラー'
end
endif
return
;;-----------------------------------------
;;◆TelnetToCisco: Cisco 機器から Cisco 機器へ Telnet 接続する
;; 変数:
;; - address : Telnet接続先のIPアドレス
;; - username : Telnetログインユーザ名
;; - userpass : Telnetログインユーザパスワード
;; - vtypass : Telnetログイン用VTYパスワード
;;-----------------------------------------
:TelnetToCisco
sprintf2 telnetCommand 'telnet %s' address
sendln telnetCommand
wait 'Username' 'Password:'
if result = 1 then
sendln username
wait 'Password:'
sendln userpass
elseif result = 2 then
sendln vtypass
endif
return
;;-----------------------------------------
;;◆SSHToCisco: Cisco 機器から Cisco 機器へ SSH 接続する
;; 変数:
;; - address : SSH接続先のIPアドレス
;; - username : SSHログインユーザ名
;; - userpass : SSHログインユーザパスワード
;;-----------------------------------------
:SSHToCisco
sprintf2 sshCommand 'ssh -l %s %s' username address
sendln sshCommand
wait 'Password:'
sendln userpass
return
;;-----------------------------------------
;;◆StartLogging: ログ保存を開始する
;; 変数:
;; - logfolder : ログ保存先フォルダ名 ※1階層のみ対応
;; - logfilename : ログファイル名
;; - datetime_flag : 「_%Y%m%d-%H%M%S」形式の日付時刻をログファイル名に付与するかどうか
;; 1 ⇒ 日付時刻を付与する
;; 1以外 ⇒ 日付時刻を付与しない
;;-----------------------------------------
:StartLogging
loginfo logfilename_temp
if result <> -1 logclose
getdir logfilepath
ifdefined logfolder
if result > 0 then
strcompare logfolder ''
if result <> 0 then
foldersearch logfolder
if result = 0 foldercreate logfolder
sprintf2 logfilepath '%s\%s' logfilepath logfolder
endif
endif
sprintf2 logfilepath '%s\%s' logfilepath logfilename
ifdefined datetime_flag
if result > 0 then
if datetime_flag = 1 then
gettime timestr '_%Y%m%d-%H%M%S'
strconcat logfilepath timestr
endif
endif
strconcat logfilepath '.log'
logopen logfilepath 0 0
return
使い方
- 上記のマクロテキストをコピーしてテキストファイルに貼り付け、拡張子を「.ttl」として保存する
- マクロテキスト内の上部にある「(1)変数定義パート(マクロユーザ編集箇所)」内の変数の値を接続対象機器に合わせて変更して保存する
- マクロユーザが編集するべき設定項目は以下の通り
セクション | 項目(変数名) | 説明 | 備考 |
---|---|---|---|
接続先機器情報 | hostname_target | 接続先機器のホスト名 | 設定必須 |
address_target | 接続先機器のIPアドレス | 設定必須 | |
username_target | 接続先機器のログインユーザ名 | telnet でユーザ認証の場合、ssh の場合は設定 | |
userpass_target | 接続先機器のログインユーザパスワード | telnet でユーザ認証の場合、ssh の場合は設定 | |
vtypass_target | 接続先機器のログイン用VTYパスワード | telnet でパスワード認証の場合は設定 | |
enablepass_target | 接続先機器のenableパスワード | 設定必須 | |
connectprotocol_target | 接続先機器への接続プロトコル | 「telnet」か「ssh」を指定 | |
踏み台機器情報 | hostname_bastion | 踏み台機器のホスト名 | 設定必須 踏み台を使用しない場合は空文字列('')にする |
address_bastion | 踏み台機器のIPアドレス | 設定必須 | |
username_bastion | 踏み台機器のログインユーザ名 | telnet でユーザ認証の場合、ssh の場合は設定 | |
userpass_bastion | 踏み台機器のログインユーザパスワード | telnet でユーザ認証の場合、ssh の場合は設定 | |
vtypass_bastion | 踏み台機器のログイン用VTYパスワード | telnet でパスワード認証の場合は設定 | |
enablepass_bastion | 踏み台機器のenableパスワード | 設定必須 | |
connectprotocol_bastion | 踏み台機器への接続プロトコル | 「telnet」か「ssh」を指定 | |
ログ保存設定 | logfolder | ログ保存先フォルダ名 | マクロファイル格納フォルダ内に指定した名前のフォルダが作成される |
logfilename | ログファイル名 | logfolder で指定したフォルダ内に保存される | |
datetime_flag | ログファイル名の末尾に日付時刻情報を付与するかどうか | 1 ⇒ 付与する 0 ⇒ 付与しない |
- 設定ができたらマクロファイルを保存する。マクロファイルをダブルクリックしてマクロを実行する
- 拡張子「.ttl」へのアプリの紐づけを実施していない場合はこちらの記事参照
設定例
- 踏み台を使用する場合
- 踏み台機器は VTY パスワード認証による Telnet 接続
- 接続先機器は SSH 接続
;;================================================
;; (1)変数定義パート(マクロユーザ編集箇所)
;; ※使わない変数でも記述を削除しないこと
;;================================================
; 接続先機器情報
hostname_target = 'MyRouter01'
address_target = '10.1.1.1'
username_target = 'admin'
userpass_target = 'adminpass'
vtypass_target = ''
enablepass_target = 'admin'
connectprotocol_target = 'ssh' ;Telnetなら「telnet」SSHなら「ssh」とする
; 踏み台機器情報
hostname_bastion = 'MyRouter02'
address_bastion = '10.1.1.2'
username_bastion = ''
userpass_bastion = ''
vtypass_bastion = 'vtypass'
enablepass_bastion = 'admin'
connectprotocol_bastion = 'telnet' ;Telnetなら「telnet」SSHなら「ssh」とする
; ログ保存設定
logfolder = '作業ログ'
logfilename = hostname_target
datetime_flag = 1 ; 1⇒日付時刻をファイル名末尾に付与する、0⇒付与しない
- 踏み台を使用しない場合
- 接続先機器は SSH 接続
;;================================================
;; (1)変数定義パート(マクロユーザ編集箇所)
;; ※使わない変数でも記述を削除しないこと
;;================================================
; 接続先機器情報
hostname_target = 'MyRouter01'
address_target = '10.1.1.1'
username_target = 'admin'
userpass_target = 'adminpass'
vtypass_target = ''
enablepass_target = 'admin'
connectprotocol_target = 'ssh' ;Telnetなら「telnet」SSHなら「ssh」とする
; 踏み台機器情報
hostname_bastion = ''
address_bastion = ''
username_bastion = ''
userpass_bastion = ''
vtypass_bastion = ''
enablepass_bastion = ''
connectprotocol_bastion = '' ;Telnetなら「telnet」SSHなら「ssh」とする
; ログ保存設定
logfolder = '作業ログ'
logfilename = hostname_target
datetime_flag = 1 ; 1⇒日付時刻をファイル名末尾に付与する、0⇒付与しない
関連
不具合報告先
- https://teramacro.com/contact/
- 本記事のコメント ※ページ下部
- 基礎知識
- コマンド解説
- ログイン
- コマンド実行
- ログ保存
- ファイル・フォルダ操作
- 文字列操作
- 変数関連
- マクロのモジュール化
- テクニック
- サブルーチン
- オリジナルマクロ
【整備済み品】HP ノートパソコン 830G5/13.3型フルHD/Win 11/MS Office H&B 2019/第7世代i5-7200U 2.50GHz/メモリ 16GB/SSD 512GB/指紋リーダー/USB 3.0/WEBカメラ/初期設定済
コメント