TeraTermマクロ：Cisco機器 SSH接続して他テキストから読んだコマンド実行(GetLogsマクロ)

# TeraTermマクロ：Cisco機器 SSH接続して他テキストから読んだコマンド実行(GetLogsマクロ)

+ 本ページはWindows10でCisco機へSSH接続するためのTeraTermマクロを記載しています。
+ 本業がプログラマでは無いため、レベル的には高く無いと思います。
+ 実機での検証はしていますが、環境によって内容が変わることがあるため参考にする際は自己責任でお願いします。
+ Cisco機器へのSSH接続とログ取得開始をするTeraTermマクロです。
+ ログはマクロファイル内で指定したフォルダへ出力します。
+ 他のテキストファイルに記載したshowコマンドを１行ずつ読み込んで実行します。



## 検証に使用した機器
+ __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
&nbsp;<font color="Gray">※本ページのマクロ内容を「任意の名前.ttl」として格納してください。</font>

### ②取得showコマンドを書いたテキストファイル置き場
__フォルダ<font color="Red">(※必須)</font>__
C:\teraterm\#GetLogs

__ファイル<font color="Red">(※必須)</font>__
Cisco_RT.txt
&nbsp;<font color="Gray">※本ページのテキスト内容をコピーして格納してください。</font>





## ログ保存名および保存フォルダ
__ログ保存場所__
C:\teraterm\PROJECTS
&nbsp;<font color="Gray">※「PROJECTS」はマクロファイル内で指定。本ページのマクロ内では「Qiita」としています。</font>

__ログ保存名__
HOSTNAME_GetLogs_YYYYMMDD_hhmmss.log
&nbsp;<font color="Gray">※「HOSTNAME」はマクロファイル内で指定。</font>



## TeraTermマクロの内容

### ①マクロファイル(.ttl)

```console: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


;# 別テキストファイルから１行ずつコマンドを読み込んで実行
;## テキストファイル読み込み
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コマンドを書いたテキストファイル

```console:Cisco_RT.txt
show clock
show archive config differences
show running-config
show startup-config

※必要に応じてコマンド行を追記

```



以上です。