TeraTermマクロ:Cisco機器 SSH接続して他テキストから読んだコマンド実行(GetLogsマクロ)
- 本ページはWindows10でCisco機へSSH接続するためのTeraTermマクロを記載しています。
- 本業がプログラマでは無いため、レベル的には高く無いと思います。
- 実機での検証はしていますが、環境によって内容が変わることがあるため参考にする際は自己責任でお願いします。
- Cisco機器へのSSH接続とログ取得開始をするTeraTermマクロです。
- ログはマクロファイル内で指定したフォルダへ出力します。
- 他のテキストファイルに記載したshowコマンドを1行ずつ読み込んで実行します。
検証に使用した機器
- Ciscoルータ:CISCO892-K9 (IOS-Version 15.2(4)M3)
- 検証用PC:Window10 (TeraTerm Version 4.100)
- 汎用HUB:NEC IX2005のSW-HUBポートを使用
検証構成
CISCO892-K9 --- 汎用HUB --- Window10 PC
192.168.0.1/24 -------------- 192.168.0.25/24
事前のフォルダ作成
以下のフォルダ構成を想定していますので、事前にフォルダを作成してください。
①マクロファイル(.ttl)置き場
フォルダ(任意)
C:\teraterm\Qiita\macro-files
ファイル(任意)
GetLogs_Cisco-RT_HOSTNAME_ssh.ttl
※本ページのマクロ内容を「任意の名前.ttl」として格納してください。
②取得showコマンドを書いたテキストファイル置き場
フォルダ(※必須)
C:\teraterm#GetLogs
ファイル(※必須)
Cisco_RT.txt
※本ページのテキスト内容をコピーして格納してください。
ログ保存名および保存フォルダ
ログ保存場所
C:\teraterm\PROJECTS
※「PROJECTS」はマクロファイル内で指定。本ページのマクロ内では「Qiita」としています。
ログ保存名
HOSTNAME_GetLogs_YYYYMMDD_hhmmss.log
※「HOSTNAME」はマクロファイル内で指定。
TeraTermマクロの内容
①マクロファイル(.ttl)
GetLogs_Cisco-RT_HOSTNAME_ssh.ttl
;# ■概要
;# ・Cisco機器へSSH接続し、ログ取得を自動開始します。
;#
;#
;# ・ログは以下の場所へ出力されます。
;# C:\teraterm\PROJECTS\HOSTNAME_YYYYMMDD_HHMMSS.log
;#
;#
;# 接続情報の設定(環境に合わせて修正してください)
PROJECTS = 'Qiita'
HOSTS_IP = '192.168.0.1'
HOSTNAME = 'Cisco892J'
LOG_USER = 'hostname'
LOG_PASS = 'log-pass'
ENA_PASS = 'en-pass'
;# ~~~~以下は修正不要です。~~~~
;## ログ保存先指定
LOG_PATH = 'C:\teraterm'
LOG_FILE = LOG_PATH
strconcat LOG_FILE '\'
strconcat LOG_FILE PROJECTS
;## ログファイル名の設定
getdate DATETIME '_GetLogs_%Y%m%d_%H%M%S.log'
FULLPATH = LOG_FILE
strconcat FULLPATH '\'
strconcat FULLPATH HOSTNAME
strconcat FULLPATH DATETIME
;## プロンプトの作成
PP_CISCO = HOSTNAME
strconcat PP_CISCO '#'
;## SSH接続コマンド作成
COMMAND = HOSTS_IP
strconcat COMMAND ':22 /ssh /2 /auth=password /user='
strconcat COMMAND LOG_USER
strconcat COMMAND ' /passwd='
strconcat COMMAND LOG_PASS
;# マクロの実行~終了
;## ログ保存先のフォルダが無ければ作成。
foldersearch LOG_FILE
if result = 0 then
foldercreate LOG_FILE
if result <> 0 then
messagebox 'Folder Error'
end
endif
endif
;## SSH接続
connect COMMAND
;## 接続判定(接続が出来たか確認)
if result <> 2 then
messagebox 'Connection Error'
end
endif
;## 接続判定(5秒以内にプロンプトが表示されないと終了)
timeout = 5
wait '>' '#'
if result = 0 then
disconnect
end
endif
;; ログの取得開始
loginfo logfilename
if result <> -1 then
logclose
logopen FULLPATH 0 1
else
logopen FULLPATH 0 1
endif
sendln ''
;## enable, ter len 0
sendln 'enable'
wait 'Password:'
sendln ENA_PASS
wait PP_CISCO
sendln ''
sendln 'terminal length 0'
pause 1
;# 別テキストファイルから1行ずつコマンドを読み込んで実行
;## テキストファイル読み込み
CMD_LIST = 'C:\teraterm\#GetLogs\'
strconcat CMD_LIST GET_FILE
fileopen CMD_LINE CMD_LIST 0
;## ループ開始
:loopstart
filereadln CMD_LINE buf
if result<>0 then ; ファイルから行を読み込めなかった場合
goto loopend ; 「:loopend」へ進む
else ; ファイルから行を読み込めた場合
wait PP_CISCO
sendln ''
sendln ''
sendln buf
pause 1
goto loopstart ; 「:loopstart」へ戻る
endif
;## ループ終了
:loopend
fileclose CMD_LINE
;# コマンド終了後にTeraTermを閉じる
wait PP_CISCO
pause 1
sendln ''
sendln 'exit'
②取得showコマンドを書いたテキストファイル
Cisco_RT.txt
show clock
show archive config differences
show running-config
show startup-config
※必要に応じてコマンド行を追記
以上です。