【TTL】Teratermのマクロはこんな感じ
Teratermのマクロはお仕事でも使うのでちょっと勉強してみました。
なんかもっときれいに書けるような方法もありそうですが、初めて書くのでご愛嬌です。
再利用性とメンテナンス性を考慮して変数を使用しました。
今回書いたマクロの動き
今回は以下の操作を自動化をしています。
1) SSHで接続する(22番ポート)
2) rootユーザでログインする※1
3) パスワードは初回のみ入力させ、以降はパスワードファイルを参照しに行く※2
4) ホスト名と年月日時分秒が付与させたログファイルを自動的に作成する
5) ログファイルの接頭辞を指定することができる(ダイアログを表示する)
6) ログファイルの保存先は自動的に指定する※1
※1:変数で設定し、変更が簡単にできるようにする。
※2:直接変数でマクロ内に記述することもできます。
大体いつも共通してやることは盛り込んでいます。
実際のTTLがこちら
※変数とファイルのパスはxxxで置き換えています。
;//////////////////////////////////////////////// ; xxxに接続し、ログファイルを取得する ;//////////////////////////////////////////////// ;################################################ ;接続情報 username = 'root' hostname = 'xxx.xxx.xxx.xxx' portnum = '22' passwdfile = 'C:\xxx\passwd_xxx.dat' ;Log保存場所 log_dir = 'C:\xxx' ;################################################ ;========================================= ; 文字列の結合等の前処理 ;========================================= ;ファイル接頭辞の入力ダイアログ inputbox 'Please input prefix of the filename: ' 'Filename' ;ログファイルのフルパス結合処理 logfile_name = log_dir strconcat logfile_name '\' strconcat logfile_name inputstr strconcat logfile_name '_' strconcat logfile_name hostname getdate date '_%Y%m%d_%H%M%S.log strconcat logfile_name date ;パスワードの取得(初回はパスワードファイルを作成) getpassword passwdfile username userpasswd ;接続情報の結合 conn_str = hostname strconcat conn_str ':' strconcat conn_str portnum strconcat conn_str ' /ssh /2 /auth=password /user=' strconcat conn_str username strconcat conn_str ' /passwd=' strconcat conn_str userpasswd ;========================================= ; 接続とLogの取得開始 ;========================================= connect conn_str logopen logfile_name 0 0 1 1 1 0 1 end
頭の接続情報をメンテナンスすることで再利用性アップです(*^-^*)b
簡単な解説
inputbox <ダイアログ内で表示する文字列> <ダイアログのタイトル>
strconcat <結合元の文字列> <結合する文字列>
getdate <変数名> <フォーマット> ※1
getpassword <パスワードファイル名> <パスワード名(ユーザ名に紐づける)> <解読されたパスワードが格納される文字列変数>
connect <接続文字列>
logopen <ログファイル名(フルパス指定可)> <オプション達> ※2
※1: 今回は以下の例の様な形で出力されます。(2018年11月17日12時34分56秒)
_20181117_123456.log
※2: オプションについては数が多いのでリファレンス見てください(>_<)バージョンによっては指定できないオプションもあるのでマクロがエラーになるかもしれないです。
最後に
strconcatに頼り過ぎ感がすごいですね(^_^;)
今回のTTLは基礎の基礎ですが、これにsendlnでコマンドも実行するまで書いちゃえばもっと便利になりそう(*´▽`*)
おまけ(sendlnの使用例)
;================================================ ; sendlnの使用例 ;================================================ sendln 'su - oracle' wait '$' sendln '' sendln 'id' wait '$' sendln ''
waitで「$」を待つのががポイントです。
参考
<2020/9/26更新>
最近はさらに改良してINIファイルを分けたりできるようにしています。
2ノードクラスタ環境とかでINIファイルのウィンドウの色を変えたりして、どっちで作業しているかわかりやすくできます。
公開鍵認証も多いので公開鍵認証バージョンを貼っておきます。
;################################################ ;接続情報 username = 'xxxx' hostip = 'xxx.xxx.xxx.xxx' hostname = 'xxxx' port_num = '22' passwd_file = '<パスワードファイルパス>' log_dir = 'ログ格納先ディレクトリ>' key_file = '<秘密鍵ファイルパス>' teraterm_ini = '<INIファイルパス>' ;################################################ ;================================================ ; 文字列の結合等の前処理 ;================================================ ;ファイル接頭辞の入力ダイアログ inputbox 'Please input prefix of the filename: ' 'Prefix of Filename' ;ログファイルのフルパス結合処理 logfile_name = log_dir strconcat logfile_name '\' strconcat logfile_name inputstr strconcat logfile_name '_' strconcat logfile_name hostname getdate date '_%Y%m%d_%H%M%S.log strconcat logfile_name date ;パスワードの取得(初回はパスワードファイルを作成) getpassword passwd_file username user_passwd ;接続情報の結合【SSH公開鍵認証】 conn_str = hostip strconcat conn_str ':' strconcat conn_str port_num strconcat conn_str ' /ssh /2 /auth=publickey /user=' strconcat conn_str username strconcat conn_str ' /passwd=' strconcat conn_str user_passwd strconcat conn_str ' /keyfile=' strconcat conn_str '"' strconcat conn_str key_file strconcat conn_str '"' ;Teraterm INIファイルの指定 strconcat conn_str ' /f=' strconcat conn_str '"' strconcat conn_str teraterm_ini strconcat conn_str '"' ;================================================ ; 接続とLogの取得開始 ;================================================ connect conn_str logopen logfile_name 0 0 1 1 1 0 1 ;================================================ ; 接続後の共通処理 ;================================================ ; Entering synchronous communication mode(useful in most cases) setsync 1 ;================================================ ; コマンドの実行 ;================================================ wait '#' '$' '>' sendln '' wait '#' '$' '>' sendln 'date' wait '#' '$' '>' sendln 'uname -n' wait '#' '$' '>' sendln 'id' wait '#' '$' '>' sendln '' end