アズライトノート

日記です。

FortiGateにsshで自動ログインしてコマンドを実行するTeraTermマクロを作りました

飲み会に行ったり寝てたりなんだりで連日投稿できませんでした。
なかなか飲みすぎてしまい、記憶がなくて震える…。
 
金曜日にttlに手をつけられました。
パートナーさんがマクロで素早く正確にログを取得していたのをみて、FortiGateでもできないかと思い、生まれて初めてマクロに手を出しました。
TeraTermに限らず、マクロ自体触ったことがない。。ので、手探りでググったりTeraTerm のヘルプみたりしながら、try and error で作ってみました。変なとこあったら教えてください。。
 
★マクロの概要
csvファイルから接続ホストのipアドレスログインユーザー名、パスワードを読み込み、sshで接続する。
・実行するコマンドは、テキストファイルから読み込む。
・複数のホストに対して自動で同じコマンドを実行していく。
・ログは自動で保存する。
 
★手順①フォルダの作成
マクロ用にフォルダ「test」を作成する。
 
★手順②ホスト(FG)情報のcsvを作成
FortiGateのipアドレス、ログインユーザ名、パスワードをcsvファイルに保存します。
メモ帳などのテキストエディタを開き、以下のように入力します。
 
IPアドレス, ログインユーザ名, パスワード
192.168.x.x, admin, password
192.168.x.y, admin, password
...
 
これを、csv形式で「test」フォルダに保存します。
ファイル名:「ipfile.csv
 
★手順③ログの自動保存設定
TeraTermを起動し、
[設定] - [その他の設定] をクリック。
[ログ] タブを選択し、
[標準ログファイル名]、[標準のログ保存先フォルダ] を設定し、
[自動的にログ採取を開始する] にチェックを入れます。 
 
 
★手順④実行コマンドファイルの作成
実行したいコマンドをtxt形式で「test」フォルダに保存してください。
ファイル名:「cmdfile.txt」
 
コマンド例(※コマンドのみテキストに保存してください)
 
# more表示をやめる
config system console
set output standard
end
 
# 時間を表示
execute time
 
# コンフィグの表示
show full-configuration
 
# 冗長化状態の確認
get system ha status
 
# more表示に戻す
config system console
set output more
end
 
★手順④TeraTermのマクロファイルを作成する
テキストエディタを開き、以下の文をttlファイルで「test」フォルダに保存します。
ファイル名「FGT_macro.ttl」(まぁここは拡張子さえあってればファイル名はなんでもいいです)
 
;####################
 
;#####ファイルパス
ipfile = 'ipfile.csv'
cmdfile = 'cmdfile.txt'
 
;#####CSVファイルの区切り文字
separator = ','
 
;#####読み取り専用でCSVファイルを開く
fileopen fh_ipfile ipfile 0 0
 
;#####プロンプト文字
Prompt_1 = '#'
 
;#####カウンタ初期化
iCnt = 0
 
;###############ROUTER_LOOP###############
:ROTER_LOOP
 
;#####1行のデータ読み込み
filereadln fh_ipfile ipfile_ipaddr
 
;#####最終行の場合はクローズ処理
if result = 1 then
fileclose fh_ipfile
goto END
endif
 
;#####カウンタチェック(ipfileの1行目をヘッダとみなす)
if iCnt = 0 then
iCnt = iCnt + 1
goto ROUTER_LOOP
endif
 
;#####カウントアップ
iCnt = iCnt + 1
 
;#####文字列分割
strsplit ipfile_ipaddr separator
 ip_addr = groupmatchstr1
 user = groupmatchstr2
 passwd = groupmatchstr3
 
;###############ログイン処理###############
 
;#####機器へ接続してログイン
sprintf2 ip_addr '%s /ssh /auth=password /user =%s' ip_addr user password
connect ip_addr
wait Prompt_1
 
;#####ホスト名取得
sendln 'show system global | grep -i hostname'
wait ' set hostname'
 
;#####出力結果の1行目の文字列取得
strsplit strResutl '"'
hostname = groupmatchstr2
 
;#####文字列結合
Prompt_2 = hostname
strconcat Prompt_2 Prompt_1
 
;#####実行コマンドファイルオープン
fileopen fh_command cmdfile 0 0
filereadln fh_command command
if result = 1 then
sendln 'exit'
goto END
endif
 
;###############コマンド実行処理###############
:COMMAND_LOOP
sendln command
 
pause 1
 
;#####プロンプト待機
wait Prompt_2 Prompt_1
 
;#####ファイルオープン
filereadln fh_command command
if result = 0
goto COMMAND_LOOP
 
;#####最終行の場合はクローズ処理
if result = 1 then
fileclose fh_command
logclose
sendln 'exit'
pause 1
goto ROUTER_LOOP
endif
 
;########################################
:END
 
;########################################
 
こんな感じです。
後は、TeraTermがマクロで動く環境を準備(ネットで検索)して、
ttlファイルをTeraTermで実行すればOK。
 
まるで幽霊にでも操作されているかのように、
ぬめぬめと実行していく様は快感でした。
(これがマクロ含めてプログラム初めてなので)
 
楽しい・・・。
 
 
 
# ついでに、前記事でアップしたpingのバッチファイルを改良したので、元記事に追記します。