ここでは、Tera Termマクロコマンド[logopen]を使用した、自動ログ取得方法をご紹介したいと思います。
「設定」メニューの「その他の設定」を選択し「ログ」タブより「自動的にログ採取を開始する」のチェックをいれておくと、接続したサーバの操作ログを自動で記録する事は以前ご紹介致しました。
⇒ Tera Termログ取得-自動でログ取得を開始する設定
ここではこの「自動的にログ採取を開始する」機能をOFFにし、テラタームマクロ側でログ取得を制御します。
上記の設定が有効になっていると、マクロで設定したログ取得よりそちらの設定が優先されますのでご注意ください。(マクロの起動より先に、ログ採取が開始されてしまうため)
その他、マクロの特徴としては、以下のようになっています。
①接続するホスト情報は、ポップアップメニューに入力
②接続ユーザは、固定で設定
③パスワードは初回ログイン時は入力が必要。次回からは入力不要
(ホストに紐付けてます&パスワードはファイルに暗号化して保存されます)
SSH自動ログ取得マクロ
;================================================= ; Filename : ssh_connect-12.ttl ; Description : SSH Auto login ; Author : JUNZOU ; Created : 2011/04/17 ; modified : ;================================================= ;; ユーザ名設定 USERNAME = 'ユーザ名' ;; パスワードファイル指定 PASSFILE = 'C:\password.dat' ;; ログ保存先指定 LOGSPATH = 'C:\logs\' ;================================================= ;; ①接続先ホスト情報入力 inputbox 'Please input an IP address or the host name.' 'Host information input' HOSTADDR = inputstr ;; ②入力確認(IPアドレス or ホスト名の入力が無い場合終了) strlen HOSTADDR if result = 0 then messagebox 'Host information is not input.' 'Input error' end endif ;; ③パスワード取得 getpassword PASSFILE HOSTADDR PASSWORD ;; ④コマンド組立て COMMAND = HOSTADDR strconcat COMMAND ':22 /ssh /2 /auth=password /user=' strconcat COMMAND USERNAME strconcat COMMAND ' /passwd=' strconcat COMMAND PASSWORD ;; ⑤ログファイル名の設定 getdate LOG_NAME '%Y%m%d_%H%M%S_&h.log' FULLPATH = LOGSPATH strconcat FULLPATH LOG_NAME ;; ⑥接続 connect COMMAND ;; ⑦接続判定1(接続出来ない場合はメッセージを表示しマクロ終了) if result <> 2 then messagebox 'It could not be connected.' 'Connection Error' end endif ;; ⑧接続判定2(接続して10秒以内にプロンプトが表示されない場合もマクロ終了) timeout = 10 wait '$' '#' if result = 0 then end endif ;; ⑨ログ取得開始 logopen FULLPATH 1 1 ;; ⑩ホスト名表示 sendln 'hostname' wait '$' '#' ;; ⑪マクロ終了 end
マクロ内容の解説
①接続先ホスト入力
接続先ホスト入力部分では、入力ダイアログボックスを表示し、IPアドレス、またはホスト名(DNSで名前解決が必要)を入力します。
②接続先ホスト入力確認
接続先ホスト入力確認では、何も入力しないで「OK」が押されていないかの確認を行っています。何も入力されていない場合は、エラーを表示しマクロを終了させています。
③パスワード取得
パスワード取得では、接続する対象ホストに対するパスワードを[getpassword]コマンドでパスワードファイルより読み込みを行っています。
[getpassword]コマンドの書式(△はスペースです)
getpassword△暗号化ファイル名△パスワード識別子△文字列変数
接続するホストに紐づくパスワードが保存されていない場合は、パスワードを入力するポップアップが表示されます。
一度パスワードを入力すると、パスワードが指定したファイルに暗号化して保存され、次回からパスワードの入力無しでログインできるようになります。
ファイルの中身にはこんな感じで保存されています。
=================================
[Password]
123.123.123.123=8<pP<&0He~r6N2e0o=0_Iyy:
=================================
④コマンド組立て/⑥接続
⑤ログファイル名の設定
ログファイル名の設定部分では、保存するログファイル名の文字列及び保管するファイルのフルパスを作成しています。
[getdate]コマンドで、その時点の日付・時刻(秒まで)を取得し、「YYYYMMDD_HHMMSS_ホスト名.log」の形式で変数「LOG_NAME」に代入してます。
また[strconcat]コマンドを使用し、変数「LOG_FILE」にログファイルのフルパスを指定しています。
最終的に以下のようになります。
C:\logs\YYYYMMDD_HHMMSS_ホスト名.log
フルパスを指定しない場合は「changedir」コマンドを使用し、書き込むディレクトリに移動してログ取得を開始する事も可能です。
⑦接続判定1/⑧接続判定2
⑨ログ取得開始
[logopen]コマンドでログ取得を開始します。
[logopen]コマンドの書式(△はスペース)
logopen△ファイル名△<binary flag>△<append flag>
<binary flag> 解説
値が0のとき、受信した漢字、改行文字は変換されてファイルに書き込まれる。値が0以外のとき、受信した文字をすべてそのままファイルに書き込む。
<append flag> 解説
値が0で、ファイルがすでに存在する場合、そのファイルは上書きされる。値が0以外で、ファイルがすでに存在する場合は、そのファイルに追記して書き込む。
⑩ホスト名表示
TTLコマンド[sendln]を使用し、接続ホストへ実行コマンドを送信しています。コンソール上で[hostname]コマンドを実行しています。
⑪マクロ終了
自動ログインが完了するとマクロ機能を終了します。マクロを終了してもセッションは維持され、通常のコンソール操作を継続できます。
append flagを1にして実行しても追記にならず上書きされてしまうのですが、バグでしょうか。
バージョンは4.69を使用しています・・・。
あああさん
ログの追記の件、私の環境で確認してみました。
ご質問のあったページのマクロを使用し(ログ名の時間部分を外して)テストしましたが
結果、4.71 & 4.69共に問題なく追記できる事を確認しました。(Win7 & WInXP)
バグではないと思いますが・・・。不思議な現象ですね。
connectで接続する前に文字コードの指定やlogopenをしたいのですが、
マクロではできないでしょうか。
手でやる場合はteratermを起動して、接続ウィンドウでキャンセルしてからログや文字コードの設定をできます。そのあとで「接続」すればよいのですが、
これをマクロで自動化しようとすると、
connect ”
とした場合に接続先を指定するウィンドウがあがってしまうので、
手でキャンセルしなければならなくなってしまいます。
接続先の指定のウィンドウをあげずに、teratermのコンソールだけを起動する方法があれば、うまくいくと思うのですが、そういう方法はないでしょうか。
ととろさん。コメント拝見しました。
どのような使い方を想定されているのかよくわからないのですが
まずログに関しては、マクロではなく自動でログ取得開始設定をいれておけば勝手にログ取りしてくれます。
参考URL:http://www.j-oosk.com/teraterm/logging/114/
また文字コードの設定ですが、よく使う文字コードは限られていると思いますので、
文字コード別にINIファイルを作成し、バッチでINIファイルを指定して起動すれば解決するのではと思います。
また手動でも簡単に変更できる機能もあります。
参考URL:http://www.j-oosk.com/teraterm/configuration/472/
回答になってないかもしれませんが一応ご参考まで。