エスケープ文字


エスケープ文字

Tera Term マクロに限らずプログラムではエスケープ文字を利用したくなる場面があります。

例えば、シェルで改行文字をエスケープすると、内容によっては長くなってしまう1行も、適切に改行することで見やすいスクリプトになります。
$ cat sample.sh
#!/bin/bash
the_first_value="5"
the_second_value="6"
printf "This sample calculation message %s + %s = %s\n" \
  ${the_first_value} \
  ${the_second_value} \
  $((the_first_value + the_second_value))
$ bash sample.sh
This sample calculation message 5 + 6 = 11
例えば、括り文字 (シングルクォーテーション ' や、ダブルクォーテーション " のこと)をエスケープすると、括り文字の中で括り文字を扱うことができます。
$ echo "This is \"double Quotation\" sample"
This is "double Quotation" sample

結論

結論を言うと、現時点*1において Tera Term にエスケープ文字はありません。

*1 : Tera Term バージョン 4.103

代替方法

エスケープする方法がないため、上記の使用例に対する代替案を記します。

ASCII コードを直指定

括り文字の中に括り文字を利用する場合は、ASCII コードを直に指定する方法があります。
指定方法
ASCII コードを利用
Tera Term で ASCII コードを指定するには、文字に割り振られた番号に # を付与します。

'#' で数値が記述場合、10進数 (0~9) での指定です。
'#$' で数値が記述されている場合、16進数 (0~F) での指定です。

たとえば Tera Term で文字 A を指定する場合、10進数では #65 を、16進数では #$41 を記述します。
ASCII コードで指定可能な文字については ASCII コード を参照してください。
制御文字/印字可能文字に関わらず指定可能です。

・ASCII コードでの代替指定
sprintf "This is "#34"double quotation"#$22
messagebox inputstr 'message test'
ASCII コードでの指定

クォーテーションの種類を変える
厳密にいうと代替方法ではありませんが、シングルクォーテーションの中でダブルクォーテーションを利用することは可能です。
sprintf 'This is "double quotation"'
messagebox inputstr 'message test'
制限事項
上述のような ASCII コード指定する場合は、クォーテーションの中に入れることができません。

・ASCII コードの指定をミスしている例
sprintf "This is #34double quotation"#$22
messagebox inputstr 'message test'
クォートを指定ミスしている例


また、一連の文字列にはスペースを入れることができません。

・ASCII コードが反映されない例
sprintf "This is " #34 "double quotation"#$22
messagebox inputstr 'message test'
反映されない例


スペースも ASCII コードで指定可能なので、以下のように記述します。

・スペース文字を指定した例
sprintf "This is"#32#34"double quotation"#34
messagebox inputstr 'message test'

strconcat

文字列を、何列かに分けて組み立てたい場合は strconcat を利用することで代替できるかもしれません。

もともと strconcat を使っているものを sprintf2 に代替したものが Linux SSH ですが、逆に sprintf2 を strconcat で分解する方法としても参考になると思います。

パスワード入力(コピペ)

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

古くなった情報

Tera Term バージョン 4.103 を使っていて、コピペと思われる入力に対するメッセージが表示されるようになっていたので、この Tips が (使えないわけではないのですが) ちょっと古いものになったので、そちらを先に。

制御文字のチェック
制御文字のチェック

以下 Shit + Ins を使いましょうという内容です。参考までに。

コピペが効かない Tera Term の ssh パスフレーズ入力

コピー&ペーストは、Windows なら Ctrl + C → Ctrl + V のショートカットを利用している人も多いはず。

ただ、Tera Term の場合には Ctrl + V が効かない機能が含まれています。
それが、SSH でのログイン時にパスフレーズを入力する画面。

SSH認証
ssh認証

ユーザ名まではコピペできたのに、パスフレーズで Ctrl + V を利用したら ● が一つだけ。
こんなとき、そのまま OK したら確実にログイン失敗します。

なぜこの項目では Ctrl + V が利用できないのか*1がわかりませんが、仕事で客先サーバへアクセスする際に入力するパスワードが確認できないのでは困る場面が往々にして発生します。
セキュリティにシビアな環境であれば、入力を1文字間違えただけで事故扱いされることもあり、それがパスワード / パスフレーズとなるとセキュリティ事故であると判断されてしまうことさえあります。

「ならパスワード / パスフレーズを誰もが見える形でコピペするのはいいのか?」という反論が聞こえてくるのですが、そのような環境では一般の人は立ち入り禁止になっていることが多く、パスワード / パスフレーズをメモ帳に書いておくだけでファイルとして保存しないなら許容されるものです。

ただし、もちろんながらボールペンでメモに書くとか論外です。

*1 : Ctrl + V が効かないというよりは、ASCII コードで ^V が入力されているので1文字だけの表示になっている

対処法

いくつか対処法があります。

入力するパスワード / パスフレーズを可視化

可視化するなら Tera Term マクロを使うのが早いです。
passwordbox ではなく inputbox を使えば、パスワード / パスフレーズがマスクされません。

でも、そもそも Tera Term マクロの実行が許可されていないことがあります。

コピー&ペーストの方法

正攻法でいくなら、やっぱりペースト(貼り付け)のショートカットを使います。

実のところ、Windows でペーストを行うショートカットは1つではありません。
(Tera Term で使う Alt + V ではありません)

Shift + Ins キーでもペーストできるようになっています。

Ctrl + Ins キーで、コピー。
Shift + Ins キーで、ペースト。

こちらであれば、パスフレーズのペーストが可能です。

すでにメモ帳などで見えているパスフレーズをコピペするので、キーの押し間違いさえなければ問題なくコピペできます。

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

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

続きを読む