ネットワーク機器のログインやログ取得に便利な
Teratermマクロについてまとめておく。
以下を組み合わせることで、
テキストファイルに記載した機器情報をもとに
機器にログイン(SSH)し、テキストファイルに記載したコマンドを実行し
ログに残すことができる。
ネットワーク機器を設定、検証するときに良く使うので覚えておくと便利。
実際に使えるマクロは、まとめに記載。
マクロコマンド説明
①マクロのあるフォルダパスの取得
getdir MacroPath
②変数
FileName='test-FW_20210601.txt'
HostName='test-L3'
③今日の日付を取得
getdate TestDate
⇒今日が2021年6月3日なら、
TestDateの中身は、「2021-06-03」となる。
④メッセージボックスを表示
messagebox "中身" "表題"
変数も指定できる。
⑤現在の時刻を取得
getdate TestTime
⇒時刻が10時39分58秒のとき、
TestTime変数の中身は、「10:39:58」となる。
⑥文字列の抜き出し
getdate TestDate
strcopy TestDate 6 2 month
⇒getdateでTestdateの中身が「2021-06-03」とすると
strcopyにて、6文字目から2文字をmonth変数へ入れる。
month=06となる。
⑦文字列の結合
HostName='test-FW'
Prompt=HostName
EnPrompt=HostName
strconcat EnPrompt '#'
⇒Enpromptの中身と#をくっつけ、EnPromptに入れる
Enpromptの中身は「test-L3#」となる。
⑧ログファイルパスの作成(ファイル名を指定)
FileName='test-FW_20210601.txt'
getdir MacroPath
makepath LogFilePath macropath FileName
⇒getdir MacroPathにてマクロファイルのあるフォルダのパスを指定し、
makepath 変数 フォルダパス ファイル名により
'test-FW_20210601.txt'のファイルパスを作成し、変数(LogFilePath)に格納する
⑨ログファイルパスの作成(ホスト名_日付.txt)
Hostname='test-FW'
getdir MacroPath
getdate TestDate
strcopy TestDate 1 4 year
strcopy TestDate 6 2 month
strcopy TestDate 2 2 day
LogName=''
strconcat LogName Hostname
strconcat LogName '_'
strconcat LogName year
strconcat LogName month
strconcat LogName day
makepath LogFilePath macropath LogName
⇒getdir MacroPathにてマクロファイルのあるフォルダのパスを指定し、
strconcatによりログファイル名(test-FW_20210603.txt)を作成する。
makepath 変数 フォルダパス ファイル名により
'test-FW_20210603.txt'のファイルパスを作成し、変数(LogFilePath)に格納する
⑩telnet接続
IPADDRESS='1.1.1.1'
Port='23'
Con=''
strconcat Con IPADDRESS
strconcat Con ':'
strconcat Con Port
strconcat Con ' /nossh /T=1'
connect Con
;エラー処理。接続できなかったらマクロ終了
testlink
pause 2
if result<>2 then
messagebox "接続できませんでした。" "接続エラー"
end
endif
⇒strconcatで文字結合していき最終的に、Conの中身は
「myserver:23 /nossh /T=1」
となる。
connect 'myserver:23 /nossh /T=1'
⑪ssh接続
IPADDRESS='1.1.1.1'
Port='22'
USERNAME='admin'
PASSWORD='test'
Con=''
strconcat Con IPADDRESS
strconcat Con ':'
strconcat Con Port
strconcat Con ' /ssh /auth=password /user='
strconcat Con USERNAME
strconcat Con ' /passwd='
strconcat Con PASSWORD'
strconcat Con ' /timeout=5'
connect Con
;エラー処理。接続できなかったらマクロ終了
testlink
pause 2
if result<>2 then
messagebox "接続できませんでした。" "接続エラー"
end
endif
⇒strconcatで文字結合していき最終的に、Conの中身は
「1.1.1.1:22 /ssh /auth=password /user=admin /passwd=test /timeout=5」
となる。
⑫コンソール接続
com1にて接続する場合は、xを1にする。
connect '/C=x'
⑬Teratermのログを開始する
FileName='test-FW_20210601.txt'
getdir MacroPath
makepath LogFilePath macropath FileName
;ログの開始(ファイルがすでにあれば追記)
logopen LogFilePath 0 1
;ログの開始(ファイルがすでにあれば上書き)
logopen LogFilePath 0 0
⑭ログの終了
;ログの終了
logclose
⑮コマンド投入
コマンドを投入して、プロンプトがかえってきたら
次のコマンドを実行する。
sendln 'show '
wait EnPrompt
sendln 'get system status'
wait EnPrompt
⇒waitがないと、結果が終わる前に、次のコマンドを投入してしまい、
タイミングによっては、実行されない場合がある。
⑯コマンドをテキストファイルから読み取り、実行させる。
マクロファイルと同じ場所にcommand.txtを置き、
その中身のコマンドを送信する。
★command.txtの中身
show
get system status
EnPrompt='test-FW'
command_file_path = ''
strconcat command_file_path Dir
strconcat command_file_path 'command.txt'
fileopen fh2 command_file_path 0
;;1行ずつ読み込み変数comに代入し、ループ実行
:freadloop
filereadln fh2 com
if result goto breakloop
sendln
wait EnPrompt
sendln com
wait EnPrompt
goto freadloop
:breakloop
⇒command.txtに書かれているshow,get system statusが
順に投入される。
⑰接続対象をcsvファイルから読みとり、SSH接続を行う。
connect.csvをマクロと同じフォルダに保存しておく。
;;connect.csvの中身
Test-FW,192.168.101.220,test-user,test-passward
connect.csvより接続先のIPアドレス、ユーザ名、パスワード、
ホスト名を読み取り、SSHを実行する。
また、ホスト名より、ユーザ、特権のプロンプトを作成する。
;;CSVファイルのパスの作成
csvfile = 'connect.csv'
separator = ','
getdir Dir
strconcat csvfile_path Dir
strconcat csvfile_path '\'
strconcat csvfile_path csvfile
; 読み取り専用でCSVファイルを開く
fileopen fh csvfile_path 0
while 1
IP = ''
USER = ''
PASSWD = ''
HOSTNAME = ''
;;読み込んだCSVファイルを行ごとに変数bufへ代入
filereadln fh buf
;;読み込みがNGの場合、resultに1が入り、1が入りfalseとなり、breakにてループ終了
if result then
break
endif
;;buf をseparater(,)ごとに分割する。
;;分割されたものは頭からgroupmatchstr1、2、3に代入される。
strsplit buf separator
HOSTNAME = groupmatchstr1
;;ユーザプロンプトの作成
prompt_user=''
strconcat prompt_user HOSTNAME
strconcat prompt_user '>'
;;enableプロンプトの作成
prompt_enable=''
strconcat prompt_enable HOSTNAME
strconcat prompt_enable '#'
ip = groupmatchstr2
USER = groupmatchstr3
PASSWD = groupmatchstr4
;;変数conbufに' '間の値を代入する。%sはそれぞれ準備に、IP、USER、PASSWDが代入される。
;;SSH接続
sprintf2 conbuf '%s /ssh /auth=password /user=%s /passwd=%s' IP USER PASSWD
connect conbuf
;エラー処理。接続できなかったらマクロ終了
testlink
pause 2
if result<>2 then
messagebox "接続できませんでした。" "接続エラー"
end
endif
⑱Tera Term を終了させる。
;MACRO は非リンク状態に入るので、connectコマンドで接続が行えるようになる
closett
まとめ
FortigateにSSHでログインして、コマンドを実行するマクロ
ちなみに;;はコメント
;;以降に書かれた文字は無視されるので、何をしていくかを書いておくと
マクロの内容が分かりやすくなる。
★マクロの機能
1.テキスト記載の機器情報を読み込む
2.読み込んだ機器情報を元に機器へSSHアクセス
3.ログイン後、ログ取得(ログ名はホスト名_今日の日付.txt)
4.テキスト記載のコマンドを読み込む
5.コマンドを実行する
6.ログを終了する
7.Tera Term を終了させる。
8.マクロを終了する
※★---------------------------------------------------の間を
そのままttlファイルにすると使えるマクロになります。
connect.csv、command.txtはマクロと同じフォルダに必要です。
★---------------------------------------------------
;1.テキスト記載の機器情報を読み込む
;④メッセージボックスを表示
messagebox "開始します" "確認"
;⑰接続対象をcsvファイルから読みとり、SSH接続を行う
;connect.csvより接続先のIPアドレス、ユーザ名、パスワード、
;ホスト名を読み取り、SSHを実行する。
;また、ホスト名より、ユーザ、特権のプロンプトを作成する。
;;CSVファイルのパスの作成
csvfile = 'connect.csv'
separator = ','
getdir Dir
strconcat csvfile_path Dir
strconcat csvfile_path '\'
strconcat csvfile_path csvfile
; 読み取り専用でCSVファイルを開く
fileopen fh csvfile_path 0
while 1
IP = ''
USER = ''
PASSWD = ''
HOSTNAME = ''
;;読み込んだCSVファイルを行ごとに変数bufへ代入
filereadln fh buf
;;読み込みがNGの場合、resultに1が入り、1が入りfalseとなり、breakにてループ終了
if result then
break
endif
;;buf をseparater(,)ごとに分割する。
;;分割されたものは頭からgroupmatchstr1、2、3に代入される。
strsplit buf separator
HOSTNAME = groupmatchstr1
;;ユーザプロンプトの作成
prompt_user=''
strconcat prompt_user HOSTNAME
strconcat prompt_user '>'
;;enableプロンプトの作成
prompt_enable=''
strconcat prompt_enable HOSTNAME
strconcat prompt_enable '#'
ip = groupmatchstr2
USER = groupmatchstr3
PASSWD = groupmatchstr4
;;変数conbufに' '間の値を代入する。%sはそれぞれ準備に、IP、USER、PASSWDが代入される。
;;SSH接続
sprintf2 conbuf '%s:22 /ssh /auth=password /user=%s /passwd=%s' IP USER PASSWD
;2.読み込んだ機器情報を元に機器へSSHアクセス
connect conbuf
;エラー処理。接続できなかったらマクロ終了
testlink
pause 2
if result<>2 then
messagebox "接続できませんでした。" "接続エラー"
end
endif
;3.ログイン後、ログ取得(ログ名はホスト名_今日の日付.txt)
;ログファイル名の作成
;⑨ログファイルパスの作成(ホスト名_日付.txt)
;HOSTNAMEは上の⑰で取得したものを使う
getdir MacroPath
getdate TestDate
strcopy TestDate 1 4 year
strcopy TestDate 6 2 month
strcopy TestDate 9 2 day
LogName=''
strconcat LogName HOSTNAME
strconcat LogName '_'
strconcat LogName year
strconcat LogName month
strconcat LogName day
strconcat LogName '.txt'
makepath LogFilePath macropath LogName
;⑬Teratermのログを開始する
;ログの開始(ファイルがすでにあれば追記)
logopen LogFilePath 0 1
;4.テキスト記載のコマンドを読み込む
;5.コマンドを実行する
;⑯コマンドをテキストファイルから読み取り、実行させる。
;マクロファイルと同じ場所にcommand.txtを置き、
;その中身のコマンドを送信する。
EnPrompt=HOSTNAME
command_file_path = ''
strconcat command_file_path Dir
strconcat command_file_path '\command.txt'
fileopen fh2 command_file_path 0
;;1行ずつ読み込み変数comに代入し、ループ実行
:freadloop
filereadln fh2 com
if result goto breakloop
sendln
wait EnPrompt
sendln com
wait EnPrompt
goto freadloop
:breakloop
;6.ログを終了する。
;⑭ログの終了
;ログの終了
logclose
;7.Tera Term を終了させる
⑱Tera Term を終了させる、
;MACRO は非リンク状態に入るので、connectコマンドで接続が行えるようになる
closett
;8.マクロを終了する
end
★---------------------------------------------------