ログの自動取得(コマンドライン)

2021/05/21 04:16 Tera Term::使い方

ログの自動取得(コマンドライン)

ログは、ホストにアクセスした際に自動で取得を開始させることができます。
やり方は、大雑把に 3 種類あります。
ここでは、コマンドラインで指定する方法を記載します。

コマンドラインの指定とは

06 でも触れていますが、プログラム(コマンド)の起動パス(文字列)から改行文字(Enter)までを、コマンドラインと呼んでいます。

コマンドラインを OS に渡す(実行させる)ことで、全てのプログラムが動いています。
これは Windows のような GUI をもつ OS でも、マウス操作でコマンドラインを生成できるようにつくられているというだけで、実のところは同じようにコマンドラインが必須です。

コマンドラインでは、プログラムの起動パスに続けて、スペースもしくはタブで区切って文字列を指定することができます。
Tera Term ではこの文字列を起動パラメータといい、特定の文字列を与えられたときに特定の挙動になるよう、プログラムされています。

Tera Term の起動パラメータ

Tera Term の起動パラメータは、以下のとおりです。
TTERMPRO [ <host>[[:]<TCP port#>] | telnet://<host>[:<TCP port#>][/] | \\<server>\pipe\<pipe name>]
         [/B] [/BAUD=<speed>] [/C=<serial port#>] [/DS] [/E] [/ES]
         [/F=<setup file>] [/FD=<file transfer directory>]
         [/H] [/I] [/K=<keyboard setup file>]
         [/KR=<kanji code (receive)>] [/KT=<kanji code (transmit)>]
         [/L=<log file>] [/LA=<language>] [/M=<macro file>] [/NOLOG]
         [/P=<TCP port#>] [/R=<replay file>] [/SPEED=<speed>] [/T=<telnet flag>]
         [/TEKICON=<icon name>] [/TIMEOUT=<connecting timeout value>]
         [/V] [/VTICON=<icon name>] [/W="<window title>"] [/WAITCOM]
         [/X=<window pos (x)] [/Y=<window pos (y)] [/PIPE]
         [/AUTOWINCLOSE=<flag>]
         [;<comment>]

自動取得設定

Tera Term の起動パラメータで、ログファイルの指定を行うものは [/L=] になります。
そのため、以下の様に指定することでログファイルも指定されます。
TTERMPRO /L=<log file>
Tera Term は、32bit プログラムなので、Windows OS が 32bit 版か 64bit 版かでインストール先が変わります。
32bit 版の場合
デフォルト状態ならば %ProgramFiles%\teraterm にインストールされているので、そのフォルダを開きます。
64bit 版の場合
デフォルト状態ならば %ProgramFiles(x86)%\teraterm にインストールされているので、そのフォルダを開きます。

ショートカットの作成

Tera Term の実行プログラム ttermpro.exe をマウスの右ボタンでドラッグ&ドロップすると、以下のようなコンテキストメニューが表示されます。
デスクトップなど、任意のフォルダに右ドラッグ&ドロップして、ショートカットを作成してください。

ショートカット作成
ショートカット作成

このショートカットファイルは、コマンドラインを含むファイルになっています。

ショートカットの修正

ショートカットを右クリックして、コンテキストメニューから「プロパティ」を選択します。
すると、ショートカットタブが開きます。

純正プロパティ
純正プロパティ

リンク先(T) の中で、ttermpro.exe に続いて、ログオプションを追記します。

修正プロパティ
修正プロパティ

編集したら「OK」をクリックして確定すると、今後はこのショートカットを実行するたびに追記したログファイルへログが取得されます。

ただし、すでに ログ自動取得設定を行う(デフォルト設定変更) を設定している場合は、ログ自動取得設定を行う(デフォルト設定変更) の設定が優先となります。

2019/06/11(火)Tera Term ログイン自動化での注意点

Tera Term は便利なツールですが、使い方を誤ると大変危険なものになります。

危険な使い方について、なぜ危険なのかを解説しつつ、どういうタイミングで使えばいいのかを解説します。


結論から

パスワードの入力は、横着せずに毎回入力しましょう。
それが、たぶん一番安全です。

きっと一番なのは使わないことなんでしょうが…このサイトの意味がないですし、そもそも便利なツールでも「使いどころに注意してね」というスタンスなので、自己責任でお願いいたします。

要注意

使いどころに注意を要するものです。

/passwd オプション

コマンドラインでも、マクロの connect でも使える、オートログインに必須なスゴイやつですが、じつはオプション指定というのは OS 側で平文で管理されてます。

Tera Term の利用時、パスワードは毎回手で入力することが望ましいです。
たとえば Tera Term のログインマクロでホストへログインしたあと、コマンドプロンプトで以下を実行してみましょう。
command prompto> wmic process where "name = \"ttermpro.exe\"" get name,commandline
あなたの環境では、どう表示されたでしょうか。
私の環境(Windows 10 Pro)では、Tera Term で接続しているホスト名、ポート番号、アカウント、パスワード、全部表示されてしまいました。

一応、回避策はあるようです。
connect コマンドに対する既存の接続オプションの変数を connect_option と仮定して、次のように 2 ステップ踏むようにすると、Windows 側に表示されなくなりました。

sprintf2 connect_option "%s:port /auth=password /user=%s /passwd=%s" hostname username password

; launch Tera Term
connect '/DS'

; connect to server
connect connect_option

ただ、サンプルのログインマクロでは、このような段階を踏んだアクセス方法は記載されておらず、利用している人は少ないのではないかと個人的に思っています。


これくらい軽い動作でアカウント情報を出力できるなら、AD とかに仕込めたらアカウント抽出が捗りますね。
Tera Term ログインからでさえ省力化するなら、アクセス管理サーバがあってもきっと公開鍵を大量に配布して ssh もパスワードなしでログインしていることでしょう(憶測)。
そうでなくても、passwordbox コマンドでパスワードを暗号化したファイルをローカルに置いているに違いない!(妄想)

冗談はともかく、オプションを表示させるのは Windows 側の仕様なので、適切に回避するしかなさそうです。

passwordbox コマンド

こちらもオートログインでは非常に重要なコマンドですね。
入力されたパスワードを暗号化して、ファイルへ保存してくれます。
もちろん、次回の利用では復号化を行ってくれます。

passwordbox で作成したファイルのパスは、ご存知ですか?
また、それをテキストエディタで参照することができるのもご存知でしょうか。


ここで唐突に、某所で公開されていたソースコードを貼り付けます。
wfile =    'パスワード解析結果.txt'

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

; ファイル定義
:FileInput
inputbox 'パスワード DAT のパスを入力してください。' 'Path input'
pwdat = inputstr

strlen pwdat
if result = 0 then
	goto FileInput
endif

; ファイルの存在確認
filesearch pwdat
if result = 0 then
	sprintf2 msg 'ファイル %s がありません\n終了します' pwdat
	strspecial msg
	messagebox msg 'Error'
	exit
endif

; Passowrd file Open (ファイルハンドラ:fhPWDAT 読み取り専用)
fileopen fhPWDAT pwdat 0 1

; Write file open (ファイルハンドラ:fhWrDat)
fileopen fhWrDat wfile 0 0

; 上から順に変数へ格納
while 1
	filereadln fhPWDAT line
	if result = 1 then
		break
	endif

	;; 解析開始
	strscan line '='
	if result = 0 then
		; [定義部分]
		strscan line '['
		if result then
			pLpw = line
			strtrim pLpw '['
			strscan pLpw ']'
			if result then
				strtrim pLpw ']'
			endif
		endif
		filewriteln fhWrDat line
	else
		; パスワード識別子
		strsplit line '='
		PassName = groupmatchstr1 

		getpassword pwdat PassName pLpw

		sprintf2 msg '%s=%s' PassName pLpw
		filewriteln fhWrDat msg
	endif
endwhile

; File Clese
fileclose fhWrDat
fileclose fhPWDAT

上記のソースをコピペ後、「pw解除.ttl」等の適当な名前で、保存します。
ソースをオープンしているので、妙なコードが書かれていないか、ご自身で確認してください。

pw解除.ttl を実行しましょう。
パスワード解除


先ほど参照した passwordbox で作成したファイル 「.dat」 を、フルパスで指定してあげます。

すると、マクロが置いてあるフォルダに「パスワード解析結果.txt」というテキストファイルが作成されるので、開きます。

パスワードが復号化できたことを確認します。


…つまり、いくら暗号化されているとはいえ、ファイルが流出してしまえば解読は1瞬です。
メモにアカウントを書いているのと、あんまり変わりません。

passwordbox を使う場合は、くれぐれもファイルの流出にご注意ください。

対策としては、暗号化パスワードのファイルを暗号化アーカイブで保存しておくことでしょうか。
必要に応じて解凍→削除を行えば、それなりにパスワードを保護できるでしょう。

コマンドラインでファイルを暗号化できるアーカイバを導入して exec で指定することも一考の余地はありそうです。

なお、このブログは Tera Term がメインなので、他のターミナルエミュレータのことは分かりません。
繰り返しますが、スタンスとしては「使いどころに注意してね」と。

TeraTerm マクロの使い方

2021/05/18 05:04 Tera Term::使い方

TeraTerm マクロの使い方

マクロとは、操作を自動化するための技術の総称です。
そのため、Tera Term マクロというと、Tera Term の操作を自動化するための技術、という意味になります。

マクロファイルとは、プログラムに行わせたいコマンドをそのままテキストファイルに記述したものです。
そのマクロを Tera Term に読み込ませる方法ですが、割と種類があります。

続きを読む

複数ホストへの同時コマンド実行(ブロードキャスト)

2021/05/18 20:10 Tera Term::使い方

ブロードキャスト機能

Tera Term というか、サーバの設定変更をしていると、複数台をまとめて設定変更したいケースが出てきます。
例えば、負荷分散している apache サーバに、それぞれ同じ静的コンテンツを格納したいとか。

そんなとき、1台ずつアクセスして、ファイルを送って、解凍して、確認して……とやっていると、最初は良くても何回か繰り返すうちにダレが出てきて、ミスを誘発するんですよね。
コマンドラインをテキストに落としておいて、サーバ毎にコピペする方法も良かったんですけど、コピペミスを劇的に減らしてくれる機能がありました。
(少なくとも私は減りました)

複数の Tera Term へ、まとめてコマンドを同時送信してくれる機能が、ブロードキャスト機能です。

ブロードキャストの使い方

どの端末でも良いのですが、メニューから「コントロール」→「ブロードキャストコマンド」を選択します。
ブロードキャスト選択


同時送信したい Tera Term 端末を選択して、送信したいコマンドを入力します。
この時、「リアルタイム」にチェックが入っていると、選択した端末に文字が送られているんですよね。
Enter を押せば、そのまま Enter が有効と。

ブロードキャスト入力


「リアルタイム」にチェックがない場合は送信ボタンをクリックするまでは送信されないので、入力ミスをチェックできるようにもなります。

また、個別に端末ウィンドウを選択すれば、選択した端末だけにコマンドを送ることも可能です。

この機能を使うときには限らないのですが、どの端末にどんなコマンドを送っているか、きちんと把握して事故の無いようにお願いします。

ログ自動取得設定を行う(デフォルト設定変更)

2021/05/21 05:01 Tera Term::使い方

ログ自動取得設定を行う(デフォルト設定変更)

ログは、ホストにアクセスした際に自動で取得を開始させることができます。
やり方は、大雑把に 3 種類あります。
ここでは、デフォルト設定の変更方法を記載します。

自動取得設定

まず、Tera Term のメニューから設定する方法です。
これは TERATERM.ini の設定内容を書き換えます。
(TERATERM.ini の詳細は teraterm.ini を参照してください)

まず、設定画面を呼び出します。
メニューから「設定(S)」→「その他の設定(D)」を選択します。

設定画面選択
設定画面選択

「標準ログファイル名(strftimeフォーマット可)(F)」に、自動で保存させたいファイル名を指定します。
また、忘れずに「自動的にログ採取を開始する(U)」にチェックを入れます。

設定内容入力
設定内容入力

※ 「標準のログ保存先フォルダ(S)」で、保存先を指定可能です。

設定変更した内容を保存するため、メニューから「設定(S)」→「設定の保存(S)」を選択します。

設定保存選択
設定保存選択

次回から自動でログ保存を行わせるために、TERATERM.ini のまま「保存(S)」をクリックします。

設定保存先選択
設定保存先選択

※ 別名で保存して Tera Term 起動時のオプションに設定ファイルを指定することで、個別に設定ファイルを読み込むことも可能です。

設定オプション

オプションは、次の通りです。
対象の項目
オプションは、デフォルトで次の通りにチェックが付けられています。

設定オプション
設定オプション

チェックの意味
それぞれ、チェックした場合の挙動は次の通りです。
オプションチェック説明
バイナリ(R)
あり
ホストから送られた文字をすべてファイルに書き込みます。エスケープシーケンス等を含みますので、テキストエディタで参照するには面倒ですが、あたかもホストから文字が送られてきたかのようにログの再生する機能を活用できます。
なし
漢字、改行コードは変換されて書き込まれます。エスケープシーケンスは書き込まれません。
追記(A)
あり
既存のファイルがあれば追記します。既存のものがなければ作ります。
なし
既存のファイルがあれば上書きします。既存のものは消えます。既存のものがなければ作ります。
プレーンテキスト(P)
あり
ASCII 非表示文字を書き込まれなくなります。バイナリで取得している場合は無効になります。
なし
ASCII 非表示文字もログに書き込まれます。
ダイアログを非表示(D)
あり
ログダイアログが表示されなくなります。あとで表示させることは可能です。
なし
ログダイアログが表示されます。ログのファイル名や現在のサイズを確認したり、途中でログ取得を一時停止したりといったことがしたい場合に便利です。
現在バッファを含む(C)
あり
現在の Tera Term に表示されているバッファも含めてログファイルに書き出します。バッファ分は、タイムスタンプ出力を選択しても無効です
なし
ログ取得開始時点からログファイルに書き出します。
タイムスタンプ(T)
あり
ログの行頭に時刻を追加できます。出力行の時刻は、その出力が開始された時刻です。コマンドが実行された時間を見る場合は、次の行のタイムスタンプになります。
なし
表示されたとおりにログ出力されます。

タイムスタンプの取得方法は、以下の選択肢があります。
選択肢機能
ローカルタイム端末の現在時刻を、ロケーションに応じて利用します。日本なら JST です。
UTC端末の現在時刻を UTC に変換して利用します。
経過時間(Logging)ログ取得開始時点からの経過時間を利用します。
経過時間(Connection)接続開始時点からの経過時間を利用します。

ログのローテート

長期間のログ取得を行いたいケース等では、ログが肥大化して不都合が発生することがあります。
そんな時に、ローテーションを行います。
対象の項目
デフォルトオプションは、チェックされていません。
ログのローテート
ログのローテート
指定の意味
チェックを入れて、次の内容で設定を行うことができます。
項目設定内容
サイズ(i)ローテーションを発生させるログのサイズを設定します。
1文字がおよそ 1byte *1です。
世代(R)過去何世代まで保存するかを設定します。例えば5世代に設定した場合、6世代目となった過去ログは削除されます。

strftime フォーマット

ログ名に指定可能な strftime フォーマットは、以下の通りです。

例えば、[アクセスしたホスト名]-[YYYY][MM][DD].log の形式にしたい場合は、&h-%Y%m%d.log と記入します。

フォーマットの詳細は strftime フォーマット で記載します。
書式意味
&hホスト名。未接続の場合は空。
&pTCP ポート番号。未接続の場合は空。TCP 接続でないときも空。
&uログオン中のユーザ名。
%a曜日の省略形。
%A曜日の正式名。
%b月の省略形。
%B月の正式名。
%cロケールに対応する日付と時刻の表現。
%d10 進数で表す月の日付 (01 ~ 31)。
%H24 時間表記の時間 (00 ~ 23)。
%I12 時間表記の時間 (01 ~ 12)。
%j10 進数で表す年初からの日数 (001 ~ 366)。
%m10 進数で表す月 (01 ~ 12)。
%M10 進数で表す分 (00 ~ 59)。
%p現在のロケールの午前/午後。
%S10 進数で表す秒 (00 ~ 59)。
%U10 進数で表す週の通し番号。日曜日を週の最初の日とする (00 ~ 53)。
%w10 進数で表す曜日 (0 ~ 6、日曜日が 0)。
%W10 進数で表す週の通し番号。月曜日を週の最初の日とする (00 ~ 53)。
%x現在のロケールの日付表現。
%X現在のロケールの時刻表現。
%y10 進数で表す西暦の下 2 桁 (00 ~ 99)。
%Y10 進数で表す 4 桁の西暦。
%z, %Zレジストリの設定に応じて、タイム ゾーンの名前または省略形を指定します。
タイム ゾーンが不明な場合は指定しません。
%%パーセント記号。

*1 : ASCII コードの場合は 1 文字 1byte だが、日本語の場合は 1 文字でも 1byte~数byte まで変化します。