Tera Term マクロとは

2024/03/26 18:31 Macro::macro 作成

Tera Term マクロとは

マクロ機能とは、別に用意されたテキストファイルに書かれたコマンド等を、上から順に 1 行ずつ解釈し、実行し、判断し、逐次進めていくタイプのインタプリタとも呼ばれるプログラム実行機能を指しますが、特に Tera Term に特化したものが Tera Term マクロです。

Tera Term 自体がネットワーク接続に用いるプログラムですが、その接続先等へ処理を追加したいときに便利なのがマクロ機能ですね。
Tera Term マクロファイルとは、Tera Term に行わせたいコマンドをそのままテキストファイルに記述したものです。
マクロファイルを指してマクロと呼ぶことも往々にしてあります。

ただ、文字列であるコマンドを逐一読み込んで処理を行うというのは、コンピュータにとって比較的コストの高い処理です。
コンピュータを使う人が、自分に使いやすいように少しの手間をかけて、多くの手間を省くような使い方をするのがマクロだと思います。

コマンドとは

Tera Term に限りませんが、実行させたい処理を小さく切り出したプログラムのことをコマンドと言っているような気がします。
直訳すると 命令 になりますが、コンピュータに行わせたい処理をひとまとめにしたプログラムと呼んだ方がしっくりきます。

たとえば、ネットワーク上のサーバに繋がるかどうかを確認するためのコマンドに ping がありますが、www.google.co.jp に ping を打つ命令……というよりは、ping での疎通確認処理と言った方がしっくりきます。

ping ならば、どのような応答が返ってくるか想像しやすいと思いますが、それを Tera Term マクロで実行させようとしたとき、ping コマンドは OS が管理しているので、OS への処理を行わせる exec というコマンドが必要になってきます。

ping コマンドは、相手から応答があったら戻り値が 0 で、無かったら 1 という挙動を示します。
この戻り値をみて、次にどう処理するのか……が、プログラムとしての腕の見せ所ですね。
たとえば、、、
・そのあとの処理を全部取りやめる?
・繋がるまで何回か繰り返す?
・それでも接続するか問い合わせる?
いずれも、ネットワーク環境によっては選ぶ可能性のある選択肢です。

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 に読み込ませる方法ですが、割と種類があります。

続きを読む

Tera Term の使い方

Tera Term の起動と終了


Tera Term の起動方法

いろいろな起動方法側あります。

Windows スタートメニューから起動

まずはオーソドックスな方法を。

スタートから、「Tera Term」 → 「Tera Term」と探して、Tera Term を起動します。

Tera Term 起動
Windows スタートメニューからTera Term 起動

プログラム検索から起動

Windows キーを押して tera と入力すると Tera Term が検索表示されるので、そのまま Enter する方法をよく使っています。

探すより、入力するほうが早い人向けです。

Tera Term 起動
プログラム検索からTera Term 起動

コマンドラインから起動

コマンドラインから起動させる方法もあります。
"c:\Program Files (x86)\teraterm\ttermpro.exe"

コマンドライン起動
コマンドラインから Tera Term 起動

※ 途中にスペースが入ってしまうとフルパスでのプログラム起動ができなくなってしまうため、ダブルクォーテーションで括っています。
※ 筆者の環境では、Tera Term を E ドライブにインストールしているため、サンプル画像では e ドライブを指定して起動しています。

コマンドラインからの起動方法で使えるオプションは、Tera Term マクロでホストに接続する際の connect コマンドに対するオプション指定と同じであるため、知っておく価値があります。
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>]
筆者がよく利用するオプションは、以下の通りです。
オプション使用例意味
<host>192.168.1.1アクセス先ホスト名 or IPアドレスを指定します。
<host>[[:]TCP port#]192.168.1.1:10022アクセス先ポート番号を含むアクセス先ホスト名 or IPアドレスを指定します。
/L=<log file>/L=teraterm.logログ取得のためのファイルパスを指定します。起動時に自動でログ取得が開始されます。
/M=<macro file>/M=mymacro.ttlTera Term 起動時に読み込む Tera Term マクロファイルを指定します。
;<comment>[; コメント]この起動オプションに対するコメント。サーバ名を入れておくと、アクセス先が分かりやすいと思います
※ ファイルパスは、絶対パスでも相対パスでも指定可能です。

Tera Term の終了方法

ログアウトと同時に終了(デフォルト)

Tera Term のデフォルトでは、ログイン先サーバからログアウトしたり、ネットワークエラー等で接続が切れたりすると、同時に終了されます。

ログインしていたサーバでは、通信が途切れたことを検知すると自動でセッションを終了します。
ログを取得していた場合、それらも Tera Term と同時に終了します。

ログアウトせずに Tera Term を終了

複数の Tera Term をまとめて終了させたい場合は、メニューの「ファイル」から「Tera Termの全終了」を選択することで可能です。

これらで、ログアウトせずに終了しようとした場合は「切断しますか?」というメッセージボックスが表示されます。

終了確認
終了確認 メッセージボックス

「OK」を押すと、Tera Term は自動でログアウト処理をしてから終了します。
ログを取得していた場合、それらも Tera Term と同時に終了します。

ログアウトした後も終了しない

設定次第ではログアウト後にも画面を残したままで、別なサーバにアクセスできるようになります。
一時的な設定
メニューの「設定」から「TCP/IP...」を選択し、「自動的にウィンドウを閉じる」のチェックボックスを外して、OK ボタンをクリックしてください。

通常
チェックボックスを外した状態
ログアウト後の設定可否

この設定のとき、ログアウト後に Tera Term を終了したい場合は、メニューの「ファイル」から「終了」を選択します。
ログを取得していた場合、それらはログ取得を続けます。
永続設定
一時的な設定を行った後、メニューの「設定」から「設定の保存」を選んで、設定情報を保存してください。

詳細は teraterm.ini を参照してください。