Tera Term ログインマクロ(Linuxサーバ用)
Contents
始めに
サーバにログインして作業を行う場合、大体は同じようなお作法をいつも繰り返すことが多いと思います。
Tera Termを使う作業環境でLinuxサーバへのログインを効率化できるように、ログインマクロを作ってみました。
前提条件
本マクロは、接続先サーバがRHEL / CentOSの場合を前提としています。その他の一般的なLinuxディストリビューションでも動作する想定です。以下の処理を行い、その後作業者がシェルを操作できる状態にします。
- SSH接続(パスワード認証)
- 所定のフォルダにログ取得開始
- ログイン後の情報取得
- root昇格
動作環境はWindows 10 Pro
、Tera Term 4.105
exeインストーラ版で検証しています。
ログインマクロ
マクロファイルは、<任意の名前>.ttl
という名で作成します。
実行するときは、ファイルをダブルクリックします。
.ttl
拡張性にファイルの関連付けが行われていない場合は、予めttpmacro.exe
と関連付けを行ってから実行してください。
マクロの内容は以下の通りです。
;=======================
; 変数定義
;=======================
; 接続情報
HOST = '192.168.0.1'
USER = 'example'
PASSWD = 'P@ssword'
PASSWD_ROOT = 'RootP@ssword'
; プロンプト文字
PROMPT_USER = '$ '
PROMPT_ROOT_PASSWD = 'Password: '
PROMPT_ROOT = '# '
; ログファイル
LOGDIR = 'C:\Users\hoshino\teratermlog\'
getdate DATETIME '%Y%m%d_%H%M%S'
sprintf2 LOGFILE '%s%s_%s.log' LOGDIR HOST DATETIME
;=======================
; SSH接続
;=======================
sprintf2 ARGS '%s:22 /ssh /2 /auth=password /user=%s /passwd=%s' HOST USER PASSWD
connect ARGS
;=======================
; ログ取得開始
;=======================
logopen LOGFILE 0 0
;=======================
; 情報取得コマンド実行
;=======================
wait PROMPT_USER
sendln 'hostname'
wait PROMPT_USER
sendln 'date'
wait PROMPT_USER
sendln 'w'
;=======================
; root昇格
;=======================
wait PROMPT_USER
sendln 'LANG=C su -'
wait PROMPT_ROOT_PASSWD
sendln PASSWD_ROOT
wait PROMPT_ROOT
sendln 'id'
end
処理のバリエーション
前述のマクロをベースとして、一部内容を変更することで目的に応じた処理を追加することができます。
IPアドレスをテキストボックスに入力
ダイアログを表示して、接続先のIPアドレスをテキストボックス入力したい場合は、HOST
変数を定義する前後を以下のように変更します。
inputbox
でIPアドレスを入力し、内容が空でない場合はHOST
変数に値を代入します。
; IPアドレス入力画面の表示
inputbox '接続先のIPアドレスを入力してください。' '接続先情報の入力'
; IPアドレスの文字数が0の場合はエラーメッセージを表示してマクロを終了
strlen inputstr
if result > 0 then
HOST = inputstr
else
messagebox '入力内容が空です。' '入力エラー'
end
endif
接続先サーバをリストから選択
ダイアログを表示して、リストの中から接続先サーバを選択したい場合は、HOST
変数を定義する前後を以下のように変更します。
strdim
で接続先サーバの選択肢となるHOSTNAME
配列、およびHOSTNAME
と同じ添字の要素に対応するIPアドレスを持つIPADDR
配列を定義します。
listbox
で接続先サーバの選択肢を画面に表示し、選択結果の添字が格納されたresult
を使用して、HOST
変数に接続先のIPアドレスを格納します。
; 接続先リストの定義
strdim HOSTNAME 3
HOSTNAME[0] = 'Webサーバ'
HOSTNAME[1] = 'APサーバ'
HOSTNAME[2] = 'DBサーバ'
; 接続先リストに対応するIPアドレスの定義
strdim IPADDR 3
IPADDR[0] = '192.168.0.1'
IPADDR[1] = '192.168.0.2'
IPADDR[2] = '192.168.0.3'
; 接続先リストの表示
listbox '接続先を選択してください。' '接続先情報の選択' HOSTNAME
; キャンセルボタンが押された場合はマクロを終了
if result >= 0 then
HOST = IPADDR[result]
else
end
endif
公開鍵認証を使用
公開鍵認証を行う場合は、PASSWD
変数のコメントアウト、KEYFILE
変数の追加、ARGS
変数の変更を行います。
KEYFILE
変数に秘密鍵ファイルのパスを格納します。
ARGS
変数内の文字列で、/auth=
で指定している認証方式をpasswd
からpublickey
に変更します。また、/passwd=
の代わりに/keyfile=
で秘密鍵ファイルのパスを指定します。
; PASSWD = 'P@ssword'
; 秘密鍵ファイル
KEYDIR = 'C:\Users\hoshino\'
sprintf2 KEYFILE '%sid_rsa' KEYDIR
;=======================
; SSH接続
;=======================
sprintf2 ARGS '%s:22 /ssh /2 /auth=publickey /user=%s /keyfile=%s' HOST USER KEYFILE
connect ARGS
処理が終わったら自動ログアウト
情報取得を自動化する目的のマクロの場合、end
の手前にexit
コマンドを入れることでログアウトを自動化できます。
rootユーザになっている場合は、一旦rootユーザ用のプロンプト文字を待ち受けてexit
で一般ユーザに降格します。その後一般ユーザのプロンプト文字を待ち受け、exit
でログアウトします。
;=======================
; ログアウト
;=======================
wait PROMPT_ROOT_PASSWD
sendln 'exit'
wait PROMPT_USER
sendln 'exit'
end
コマンドラインでマクロを実行
Tera Termマクロは、コマンドライン上から実行することもできます。PowerShellと組み合わせることで、引数を使用して複数の接続対象サーバに対して連続でマクロの実行を行うことができます。
PowerShell上での実行例は以下の通りです。
> & 'C:\Program Files (x86)\teraterm\ttpmacro.exe' 'C:\Users\hoshino\sample.ttl' '192.168.0.1'
& 'C:\Program Files (x86)\teraterm\ttpmacro.exe'
は、exeファイルを実行するための記述です。
'C:\Users\hoshino\sample.ttl'
は、ttpmacro.exe
の引数として渡す実行対象マクロファイルのパスです。
'192.168.0.1'
は、ttpmacro.exe
の引数として渡す接続先サーバのIPアドレスです。システム変数params[2]
に格納されます。
さらに引数を加えると、params[3]
、params[4]
という具合に、システム変数param
配列に順次格納されます。
マクロファイルの内部では、コマンドライン引数params[2]
をHOST
変数に格納します。
; 接続情報
HOST = params[2]