listboxを使ったteratermの選択型ログインマクロ


目次

  • はじめに
  • ログインマクロ
  • 解説
  • 参考サイト

はじめに

teratermログインマクロを作るたびに「あれどうやって作ったんだっけ?」となり調べ直すことが多いので、また同じ状況になった時のため自分用の備忘録的なもの。
listboxを使うことで環境や用途、ログイン方法などでカテゴリを分けることができる。
個別のマクロを数十ファイル用意している現場もあったため、できればこのような1つのマクロで複数の接続先に繋げられるようなものを用意したいところ…。

ログインマクロ

以下マクロ
コピペして動作を確認してみてください。

;ログインマクロ.ttl
strdim LIST 4
    LIST[0] = 'IPADDRESS'
    LIST[1] = 'ホスト名①'
    LIST[2] = 'ホスト名②'
    LIST[3] = '手入力'

listbox '選択肢' '項目①' LIST

;IPAddressリストを表示させる。
if result = 0 then
    strdim IPLIST 2
        IPLIST[0] = '192.168.11.70'
        IPLIST[1] = '192.168.11.71'
    listbox 'サーバーを選択' 'IPADDRESS' IPLIST
    if result = -1 then
        end
    else
        CON = IPLIST[result]
        goto login
    endif

;ホスト名を表示したい場合①
elseif result = 1 then
    strdim HOSTLIST 2
        HOSTLIST[0] = 'DNSサーバー#1'
        HOSTLIST[1] = 'PROXYサーバー#2'

    strdim HOSTIP 2
        HOSTIP[0] = '192.168.11.70'
        HOSTIP[1] = '192.168.11.71'

    listbox 'サーバーを選択' 'ホスト名を表示する場合' HOSTLIST
    if result = -1 then
        end
    else
        CON = HOSTIP[result]
        goto login
    endif

;ホスト名を表示したい場合②
elseif result = 2 then
    strdim HOSTLIST 2
        HOSTLIST[0] = 'DNSサーバー#1,192.168.11.70'
        HOSTLIST[1] = 'PROXYサーバー#2,192.168.11.71'
    listbox 'サーバーを選択' 'ホスト名を表示する場合' HOSTLIST
    if result = -1 then
        end
    else
        strsplit HOSTLIST[result] ','
        CON = groupmatchstr2
        goto login
    endif

;手打ち入力の場合
elseif result = 3 then
    MESSAGE = 'ログインサーバーを入力'
    inputbox MESSAGE 'LIST[2]'
    CON = inputstr
    goto login
else
    end
endif

;ここにログイン方法を記述
:login
messagebox CON 'CHECK'
strconcat CON ':22 /ssh /auth=password /user=ログイン名 /passwd=パスワード'
connect CON
wait "#" "$" ">>"
sendln 'uname -n'
end

解説

strdim LIST 4
    LIST[0] = 'IPADDRESS'
    LIST[1] = 'ホスト名①'
    LIST[2] = 'ホスト名②'
    LIST[3] = '手入力'

listbox '選択肢' '項目①' LIST


listboxをつかった表示はこのようになる。
私は通常、最初に環境や用途ごとにカテゴリを分けておくが、今回はその後の処理ごとに分けた。
選択した数字がresultに格納され、キャンセルを選択した時はresultに-1が格納される。

IPAddressリストを表示させる書き方
strdim IPLIST 2
    IPLIST[0] = '192.168.11.70'
    IPLIST[1] = '192.168.11.71'
listbox 'サーバーを選択' 'IPADDRESS' IPLIST
if result = -1 then
    end
else
    CON = IPLIST[result]
    goto login
endif


listboxにそのままIPアドレスを記述させる書き方。
変数CONへ選択されたIPアドレスを格納してログイン処理へ飛ばす。
hostsに記述をしていたりDNSサーバーを用意している場合は、IPアドレスの代わりにhost名を記述してもログイン可能。

ちなみにキャンセルを押した時(resultが-1)の処理を書いておかないとマクロが途中で止まりとてもダサいので注意。

ホスト名を表示したい場合①
strdim HOSTLIST 2
    HOSTLIST[0] = 'DNSサーバー#1'
    HOSTLIST[1] = 'PROXYサーバー#2'
strdim HOSTIP 2
    HOSTIP[0] = '192.168.11.70'
    HOSTIP[1] = '192.168.11.71'

listbox 'サーバーを選択' 'ホスト名を表示する場合' HOSTLIST
if result = -1 then
    end
else
    CON = HOSTIP[result]
    goto login
endif


日本語で接続先の情報が欲しい時その1
listboxで表示はHOSTLISTを表示させ、変数にはHOSTIP[result]を格納させる。

ホスト名を表示したい場合②
strdim HOSTLIST 2
    HOSTLIST[0] = 'DNSサーバー#1,192.168.11.70'
    HOSTLIST[1] = 'PROXYサーバー#2,192.168.11.71'
listbox 'サーバーを選択' 'ホスト名を表示する場合' HOSTLIST
if result = -1 then
    end
else
    strsplit HOSTLIST[result] ','
    CON = groupmatchstr2
    goto login
endif


サーバー名(日本語)とIPアドレスを併記し、指定の文字で区切るstrsplitを用いてIPアドレスを変数に格納する方法。
strsplitで区切った文字はgroupmatchstr1~9に格納される。

色々と書きすぎる以下のようにとスクロールバーが表示され見切れてしまう状態になるが、

listbox '----------------------サーバーを選択-----------------------' 'ホスト名を表示する場合' HOSTLIST


こうすることで幅を広げて全体を表示させることが可能。

手打ち入力の場合
MESSAGE = 'ログインサーバーを入力'
inputbox MESSAGE 'LIST[2]'
CON = inputstr
goto login


IPアドレスやホスト名を手入力で入力しログインさせる方法。
修正の手間がいらない。が打ち間違えるというHEが発生する可能性は多少ある。

マクロ内で文字エンコードを変更したりログ保存の設定をする記述もしている場合、この項目を用意しておくとサーバーが増設された時などに、listbox用の記述を修正せずともとりあえずは手入力でログインできたりするのでちょっと楽。

:login
messagebox CON 'CHECK'
strconcat CON ':22 /ssh /auth=password /user=ログイン名 /passwd=パスワード'
connect CON
wait "#" "$" ">>"
sendln 'uname -n'
end


今回は格納された変数を確認するmessageboxを用意した。
その後はssh接続での一般的な接続方法。
接続が同一でない場合は分岐内にログインを書いたり、他のログイン記述を複数個書いたりします。

参考サイト

TTL コマンドリファレンス