Tera Term ログインマクロ(Linuxサーバ用)

始めに

サーバにログインして作業を行う場合、大体は同じようなお作法をいつも繰り返すことが多いと思います。
Tera Termを使う作業環境でLinuxサーバへのログインを効率化できるように、ログインマクロを作ってみました。

前提条件

本マクロは、接続先サーバがRHEL / CentOSの場合を前提としています。その他の一般的なLinuxディストリビューションでも動作する想定です。以下の処理を行い、その後作業者がシェルを操作できる状態にします。

  1. SSH接続(パスワード認証)
  2. 所定のフォルダにログ取得開始
  3. ログイン後の情報取得
  4. root昇格

動作環境はWindows 10 ProTera 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]

参考文献

Tera Term-自動ログインマクロ(SSH/TELNET)のまとめ

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です