Windows/TeraTermマクロでログイン、画面色とサイズ変更

TeraTermマクロって便利ですよね(2017-03-03)


いまさらですが、
やっぱり1つメモしておこうと思いまして。

特に今回の課題だった
画面の「背景の色」は設定ファイルを分けるのが一般的なようですが、
以下は設定とマクロを1ファイルにまとめたい偏屈(It's me.)向けの例です。


ログインして、背景色変えて、画面サイズも変えるマクロ

以下をテキストにコピペして、変数は書き換えて、
拡張子を「.ttl」に変更して、
ttpmacro.exeで実行します。

username2 への切り替えは要らなければ、後半は削除すればOK。

;
; username1 でログインして、username2 へ切り替える(su -)までのマクロ
; 背景色だけ、デフォルト設定を上書きする
;
;--- ホスト名、ID、パス、ファイルの場所を設定する -------------------
;  各変数を自環境に合わせて変更してください。
;  username2, prompt_user2 はログイン後に su で切り替わる場合です。
;  tempfile は一時作業用ファイルなので適当な名前で良いです。
hostname = '127.0.0.1'
username1 = 'loginuser'
username2 = 'root'
prompt_user1 = '$ '
prompt_user2 = '# '
default_ini = 'C:\Program Files (x86)\teraterm\TERATERM.INI'
tempfile =  'my_teraterm_tmp_file.ini'

; 文字の RGB、背景の RGB の順。
;   以下だと文字白(255,255,255)、背景青(0,0,55)
VTColor='255,255,255,0,0,55'

; 画面のサイズ。Yが縦軸、Xが横軸(文字数)です。
screen_y=30
screen_x=100

;--- デフォルト設定を複製、自分用設定で上書きする -------------------
getdir temp_ini
strconcat temp_ini tempfile

fileopen fdef default_ini 0 1
if result != 0 then
   messagebox "can not open default init" "open error"
   exit
endif
;filedelete temp_ini
fileopen ftmp temp_ini 0
if result != 0 then
   messagebox "can not open temp file" "open error"
   exit
endif

while 1
    hit=0
    filereadln fdef line
    if result=1  break
    strsplit line '=' 9
  
    ; 画面の背景色を変える。ほんとは Bold/Blink/URL も変えると良い。
    strcompare groupmatchstr1 "VTColor"
    if result=0 then
       string = 'VTColor='
       strconcat string VTColor
       filewriteln ftmp string
       hit = 1
    endif

    ; ほかにも変える場合は、こんな感じ
    strcompare groupmatchstr1 "MouseCursor"
    if result=0 then
       filewriteln ftmp "MouseCursor=hand"
    endif
    
    if hit=0 then
       filewriteln ftmp line
    endif
endwhile

fileclose fdef
fileclose ftmp

;---サーバへ接続---------------------
string = hostname
strconcat string ' /ssh /2 /auth=password /user='
strconcat string username1
strconcat string ' /ask4passwd'
strconcat string ' /F='
strconcat string temp_ini

connect string
filedelete temp_ini

;---ログイン成功後、画面サイズを変える-----------------------
wait prompt_user1

sprintf #$1b"[8;%d;%dt" screen_y screen_x
dispstr inputstr
 
;---ここからはおまけ。 su で username2 へ-----------------------
string = "export LANG=C && su - "
strconcat string username2
sendln string

wait "Password: "
passwordbox username2 'Enter:'
sendln inputstr

;---ユーザ変更成功後、任意のコマンド実行------------
wait prompt_user2

;以上です。
;あとは、好きなコマンドがあれば実行してください。
sendln 'yes  | while read Iam; do echo yes; done | head -5'
wait prompt_user2
sendln '# ... here we go!'

;おわり

やっぱり案の定、長いマクロになっちゃいましたが、
一回書けば、あとでどうとでも応用できるのがマクロの素敵なところです。

以下、余談です。

マクロの作成例

TeraTermのヘルプファイルで、
TTLコマンドリファレンスに様々な作成例が書いてあります。
ログインだと、connect の項目を見ると基本形が分かります。

dispstrとか今回初めて使ったのですが、
これも「徐々に画面のサイズを変える例」が書いてあって分かり易かったです。

パスワード保存は避けましょう

どういった作業環境であるか、条件によるのですが、
setpassword 等を使う場合は十分に気を付けましょう。
そのPCやら暗号化ファイルやら、覗き見や盗難紛失しないとは限らないので。
(ログイン失敗ならば、連続すると遅延やロックをかけられるけれど、
 ファイルならば好きなだけチャレンジできる。秒間に億万回とか、破るまで延々と)

TeraTermに限らず、パスワードは手入力で我慢することも一考しましょう。
特に趣味では無く、業務で使う場合は、
事故った時に責任問題になってしまうので・・・*1


*1 ・・・というのは、暗号化という言葉を過信しないようにしましょう、と。 IDとパスワードのセット、そのファイルのアクセス権限は制限できているのか、それらを Encrypt と Decrypt するTeraTerm はオープンソースなのは知っているのか・・・いや、勿論ファイル盗られたらどんな暗号だって(強度が違うだけで)全てアウトなんですが・・・とにかく、どう使えば安全なのかは使用者次第です。

  最終更新のRSS