TeraTerm Macro ちょっぴり便利なログインマクロ

1. 概要

 サーバやネットワーク機器で作業を実施する際、手元の環境からSSH接続を行うことがあると思います。SSH接続を行うためには、接続先となるホスト名またはIPアドレス、ユーザ名とパスワードを用意します。
機器にSSH接続するために使用するターミナルソフトは様々ですが、今回は「TeraTerm(テラターム)1」を使用します。TeraTermではマクロと呼ばれる操作を自動で実行することができる機能も含まれています。
紹介するのは、TeraTermから手動で機器にSSH接続するのではなく、自動でSSH接続するだけではなく、ログ取得も行うマクロを紹介します。

2-1. ユーザ名でログインするマクロ

 ユーザ名を入力することで、自動ログインするマクロを以下に記載します。初回ログイン時のみパスワードを入力することで、次回以降のログインの際はユーザ名を入力するだけでログインすることができます。ホスト名やIPアドレス、ポート番号などは手元の環境に合わせて置き換えます。
「getpassword2」コマンドは、パスワードを読み出すことができます。初回ログイン時にパスワードを要求されるのは、指定されたファイルにパスワードが登録されておらず、パスワードを読み出すことができないためです。パスワードが登録されている次回以降のログインでは、入力されたユーザ名をもとに、パスワードを読み出すことでログインすることができます。入力するパスワードを間違えた場合は、パスワードを登録したファイルから間違えて登録した部分の行を削除します。

[multi-secpass.ttl]

hostname = 'Router'
ipaddr = '192.168.10.1'
portnum = '22'
sshpasswd = 'multi-passwd.dat'
enablepasswd = 'multi-passwd.dat'

loginhostname = hostname
strconcat loginhostname ":ログインユーザ名を入力してください。"
inputbox loginhostname "ユーザ名入力"
username = inputstr

; 入力チェック(空白は終了)
strlen username
if result = 0 then
    messagebox 'username is not input.' 'Input Error'
    end
endif

; ユーザ名からパスワードを検索
getpassword sshpasswd username userpasswd

; ログファイルのパラメータ
loghostname = hostname
strconcat loghostname ":ログファイル名を入力してください。"
inputbox loghostname "ログファイル入力"
logname = inputstr

; 入力チェック(空白は終了)
strlen logname
if result = 0 then
    messagebox 'logfile name is not input.' 'Input Error'
    end
endif

; ログファイル格納ディレクトリのパラメータ
Getdir dir
Strconcat dir '\Log\'

; 対象フォルダが存在しない場合は作成
filesearch dir
if result=0 then
    foldercreate 'Log'
endif

; ログファイル名
Strconcat dir logname
Strconcat dir '.log'

; SSH接続
sprintf2 msg '%s:%s /ssh /auth=password /user=%s /passwd=%s' ipaddr portnum username userpasswd
Connect msg

; ログ取得開始
logopen dir 0 1

; [Cisco]特権モードへ移行
Wait '>'
Sendln 'enable'
Wait 'assword:'
getpassword enablepasswd 'enablepassword' enbpasswd
Sendln enbpasswd
Wait '#'
Sendln 'terminal length 0'

以下のファイルは、「getpassword」コマンドで登録されたパスワードが記載されています。登録されたパスワードはランダムな文字列で記載されています。例として、ユーザ名「test1」と特権モードへ移動するためのパスワードがそれぞれホモづいています。

[multi-passwd.dat]

[Password]
test1=/1og#s_S{E**********?zws9.
enablepassword=^G|pjAK5]g>1************/`E!atRn0&IBf}e(r

2-2. ホスト名+ユーザ名でログインするマクロ

 ホスト名とユーザ名を入力することで、自動ログインするマクロを以下に記載します。初回ログイン時のみパスワードを入力することで、次回以降のログインの際はユーザ名を入力するだけでログインすることができます。ホスト名やIPアドレス、ポート番号などは手元の環境に合わせて置き換えます。
ユーザ名を入力して自動ログインするマクロでは、ホスト毎にログインマクロを作成する必要がありましたが、ホスト名を指定することでログインマクロを一つにまとめることができるメリットがあります。デメリットは、ログイン可能なホストがファイル毎で分割されていないため、csvファイルで確認する必要がある点です。
csvファイルからホスト名を「filestrseek3」で検索し、ヒットした文字列から行の最後まで読み込みます。csvファイルにパラメータを記載する際は、行の初めはホスト名から記載することが必要です。

[multi-secpass-csv.ttl]

csvfile = 'sample.csv'
separator = ','
sshpasswd = 'multi-id-passwd.dat'
enablepasswd = 'multi-id-passwd.dat'

; ログイン機器ホスト名を入力
inputbox "ログイン機器ホスト名を入力してください。" "Input network device name"
hostname = inputstr

; 入力チェック(空白は終了)
strlen hostname
if result = 0 then
    messagebox 'hostname is not input.' 'Input Error'
    end
endif

; ログインユーザ名を入力
loginhostname = hostname
strconcat loginhostname ":ログインユーザ名を入力してください。"
inputbox loginhostname "Input username"
username = inputstr

; 入力チェック(空白は終了)
strlen username
if result = 0 then
    messagebox 'username is not input.' 'Input Error'
    end
endif

; ユーザ名からパスワードを検索
getpassword sshpasswd username userpasswd

; ログ取得
loghostname = hostname
strconcat loghostname ":ログファイル名を入力してください。(拡張子は不要)"
inputbox loghostname "ログファイル入力"
logname = inputstr

; 入力チェック(空白は終了)
strlen logname
if result = 0 then
    messagebox 'logfile name is not input.' 'Input Error'
    end
endif

; ログファイル格納ディレクトリのパラメータ
Getdir dir
Strconcat dir '\Log\'

; 対象フォルダが存在しない場合は作成
filesearch dir
if result=0 then
    foldercreate 'Log'
endif

; ログファイル名
Strconcat dir logname
Strconcat dir '.log'

; 読み取り専用でCSVファイルを開く
fileopen fhandle csvfile 0 0

; CSVファイルから文字列を検索(見つかった場合はシステム変数 result に 1、見つからなかった場合はシステム変数 result に 0 が格納される)
filestrseek fhandle hostname
; 見つからなかった場合は、「not_founud」ラベルに移動
if result=0 end
; 見つかった検索文字からその行の終わりまでを読み込む
filereadln fhandle str

; CSVファイルから文字列を検索したパラメータ
strsplit str separator
host = groupmatchstr1
ipaddr = groupmatchstr2
portnum = groupmatchstr3

; SSH接続
sprintf2 conbuf '%s:%s /ssh /auth=password /user=%s /passwd=%s' ipaddr portnum username userpasswd
connect conbuf

; ログ取得開始
logopen dir 0 1

; [Cisco]特権モードへ移行
Wait '>'
Sendln 'enable'
Wait 'assword:'
getpassword enablepasswd 'enablepassword' enbpasswd
Sendln enbpasswd
Wait '#'
Sendln 'terminal length 0'

; 読み取り専用のCSVファイルを閉じる
fileclose fhandle
end

以下のファイルは、ログイン対象のホスト名、IPアドレス、ポート番号を記載しています。対象ホストを追加する場合は、下にパラメータを記載していくことで可能です。

[sample.csv]

Router,192.168.10.1,22
Switch,192.168.20.1,22

以下のファイルは、「getpassword」コマンドで登録されたパスワードが記載されています。登録されたパスワードはランダムな文字列で記載されています。例として、ユーザ名「test1」と特権モードへ移動するためのパスワードがそれぞれホモづいています。

[multi-id-passwd.dat]

[Password]
test1=/1og#s_?zS**********E!}6%Ea
enablepassword=^G|p~c"/`E!************M>1ICn0&IBf}e(r

3. 参考資料

  1. Tera Termマクロ - パスワード認証のSSH自動ログイン
  2. Tera Term Macroで湯婆婆: ホスト名もユーザー名もパスワード ...
  3. TeraTermマクロサンプル-SSH自動ログイン(接続ホスト入力版)
  4. 【Cisco】SSHログインマクロ - NW検証ブログ
  5. CSVファイルを使ってTera Termマクロにパラメータを渡す方法