【Cisco】コンソールで自動ログインと自動ログ取得【teraterm】

<h2>Cisco機器の作業用ポート開放ttl</h2>
7月の現場での作業で使用したttlを忘れないようにアウトプットしてます。
初めて作成したので無駄な部分も多いと思いますが、誰かの参考になればと思います！

このマクロの流れとしては、

1.Cisco機器にコンソール接続　　　　　  　(手動)
2.下記マクロの実行　　　　　　　　　   　 (手動)
3.コンフィグ変更前のログ取得　　　　   　 (自動)
4.コンフィグ変更→ポートのno shutdown　(自動)
5.コンフィグ変更後のログ取得　　　　   　 (自動)
6.マクロの終了　　　　　　　　　　　 　 (自動)

という流れになっています。


この流れの3.~5.ではtextファイルからコマンドを読み込んでいます。
textファイルの中身は

```c++:ログ収集コマンド_設定変更前.txt
show clock
show running-config
```
```c++:ログ収集コマンド_設定変更作業.txt
show clock
configure terminal
interface GigabitEthernet x/x/x
no shutdown
end
write memory
```
```c++:ログ収集コマンド_設定変更後.txt
show clock
show running-config
```

3.コンフィグ変更前のログ取得
では、ログを収集するコマンドの実行をしています

4.コンフィグ変更→ポートのno shutdown
では、対象のポートを開放するためにno shutdownをして上書き保存しています

5.コンフィグ変更後のログ取得
では、ログを収集するコマンドの実行をしています

それぞれ、ログが自動で保存されるようになっているので、カスタマイズするとすればこのtextファイルを書き換えてもらえると、すぐに使用できると思います。

次にttlファイルです。

```c++:teraterm ttl
;###/初期設定----------------------------------------------

;##/各種設定(案件に応じて編集要)----------------------
COM_PORT = '0'
;HOSTADDR = ''
HOSTNAME = 'hostname'
USERNAME = 'username'
PASSWORD = 'password'
ENABLEPASS = 'enable password'

COMMAND_LIST_1 = 'ログ収集コマンド_設定変更前.txt'
COMMAND_LIST_2 = 'ログ収集コマンド_設定変更作業.txt'
COMMAND_LIST_3 = 'ログ収集コマンド_設定変更後.txt'

;##--------------------------------------------------/

;##/LOGIN方法(接続タイプに応じて編集要)---------------

;「SSH」    
;「TELNET」 
;「CON」
LOGIN = "CON" 

;##--------------------------------------------------/

;###------------------------------------------------------/





;###/接続方法----------------------------------------------

;##/SSH接続オプション---------------------------------

;COMMAND_SSH = HOSTADDR
;strconcat COMMAND_SSH ':22 /ssh /2 /auth=password '
;strconcat COMMAND_SSH ' /user='
;strconcat COMMAND_SSH USERNAME
;strconcat COMMAND_SSH ' /passwd='
;strconcat COMMAND_SSH PASSWORD

;#/SSHアクセス処理-------------------------------

;strcompare LOGIN "SSH"
;if result = 0 then
    ;connect COMMAND_SSH
;endif

;#----------------------------------------------/

;sendln ''
;wait '>'
;sendln "enable"
;wait 'Password:'
;sendln ENABLEPASS

;sendln 'terminal length 0'
;sendln 'terminal width 0'

;##--------------------------------------------------/

;##/TELNET接続オプション------------------------------

;COMMAND_TELNET = HOSTADDR
;strconcat COMMAND_TELNET ':23 /nossh '

;#/TELNETアクセス処理----------------------------

;strcompare LOGIN "TELNET"
;if result = 0 then
    ;connect COMMAND_TELNET
;endif
;wait 'Username:'
;sendln USERNAME
;wait 'Password:'
;sendln PASSWORD

;#----------------------------------------------/

;sendln ''
;wait '>'
;sendln "enable"
;wait 'Password:'
;sendln ENABLEPASS

;sendln 'terminal length 0'
;sendln 'terminal width 0'

;##--------------------------------------------------/

;##/CON接続オプション---------------------------------

COMMAND = '/C=' 

;#/CONアクセス処理-------------------------------

strconcat COMMAND COM_PORT
if result = 0 then
    connect COMMAND
    sendln ''
endif

;#----------------------------------------------/

do
    wait 'Username:' '>' '#'
    if result == 0 then
        end
    elseif result == 1 then
        sendln USERNAME
        wait 'Password:' 
        sendln PASSWORD
        wait '>'
        sendln 'enable' 
        wait 'Password:' 
        sendln ENABLEPASS
    elseif result == 2 then
        sendln 'enable' 
        wait 'Password:' 
        sendln ENABLEPASS
    endif
loop while result == 3

sendln 'terminal length 0'
sendln 'terminal width 0'

;##--------------------------------------------------/

;###------------------------------------------------------/





;###設定変更前ログ収集-------------------------------------

;##/ログ名--------------------------------------------

inputbox '設定変更前' '設定変更前' '設定変更前'
FILENAME=inputstr

;##--------------------------------------------------/

;##/ログの保存場所------------------------------------

getdir LOGSAVE
strconcat LOGSAVE '\log\'

;##--------------------------------------------------/

;##/ログのファイル名の処理----------------------------

LOGALL = LOGSAVE
getdate LOGDATE '_%Y%m%d-%H%M%S.log'
strconcat LOGALL HOSTNAME
strconcat LOGALL '_'
strconcat LOGALL FILENAME
strconcat LOGALL LOGDATE

;##--------------------------------------------------/

;##/ログ取得開始--------------------------------------

logopen LOGALL 1 1
sendln ''
pause 2

;##--------------------------------------------------/

;##/テキストファイル実行------------------------------

fileopen filehandle COMMAND_LIST_1 0
while 1
    filereadln filehandle command_line
    
    if result = 1 break
    
    flushrecv
    sendln command_line
    wait '#'
endwhile

fileclose FileHandle

;##--------------------------------------------------/

;##/ログ取得終了--------------------------------------

pause 2
logclose
sendln ''


;##--------------------------------------------------/

;###------------------------------------------------------/





;###設定変更作業ログ収集-------------------------------------

;##/ログ名--------------------------------------------

inputbox '設定変更ログ' '設定変更ログ' '設定変更ログ'
FILENAME=inputstr

;##--------------------------------------------------/

;##/ログのファイル名の処理----------------------------

LOGALL = LOGSAVE
getdate LOGDATE '_%Y%m%d-%H%M%S.log'
strconcat LOGALL HOSTNAME
strconcat LOGALL '_'
strconcat LOGALL FILENAME
strconcat LOGALL LOGDATE

;##--------------------------------------------------/

;##/ログ取得開始--------------------------------------

logopen LOGALL 1 1
sendln ''
pause 2

;##--------------------------------------------------/

;##/テキストファイル実行------------------------------

fileopen filehandle COMMAND_LIST_2 0
while 1
    filereadln filehandle command_line
    
    if result = 1 break
    
    flushrecv
    sendln command_line
    wait '#'
endwhile

fileclose FileHandle

;##--------------------------------------------------/

;##/ログ取得終了--------------------------------------

pause 2
logclose
sendln ''

;##--------------------------------------------------/

;###------------------------------------------------------/





;###設定変更後ログ収集-------------------------------------

;##/ログ名--------------------------------------------

inputbox '設定変更後' '設定変更後' '設定変更後'
FILENAME=inputstr

;##--------------------------------------------------/

;##/ログのファイル名の処理----------------------------

 LOGALL = LOGSAVE
 getdate LOGDATE '_%Y%m%d-%H%M%S.log'
 strconcat LOGALL HOSTNAME
 strconcat LOGALL '_'
 strconcat LOGALL FILENAME
 strconcat LOGALL LOGDATE
 
;##--------------------------------------------------/

;##/ログ取得開始--------------------------------------

logopen LOGALL 1 1
sendln ''
pause 2

;##--------------------------------------------------/

;##/テキストファイル実行------------------------------

fileopen filehandle COMMAND_LIST_3 0
while 1
    filereadln filehandle command_line
    
    if result = 1 break
    
    flushrecv
    sendln command_line
    wait '#'
endwhile

fileclose FileHandle

;##--------------------------------------------------/

;##/ログ取得終了--------------------------------------

pause 2
logclose
sendln ''


;##--------------------------------------------------/

;###------------------------------------------------------/


closett

; マクロ終了
end
```

長くなってしまいましたが、ttlを書き換えるだけでSSH接続やtelnet接続にすぐ対応させられるようになっているので、今後必要な時に変更を少し加えるだけで使用できます。

8月も現場での作業で使用する予定なので、時間があれば無駄なところがないか探して磨きをかけたいと思います！