Teratermマクロ プログラム

Teratermマクロ まとめ

ネットワーク機器のログインやログ取得に便利な
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

★---------------------------------------------------

-Teratermマクロ, プログラム