Tera Termマクロ入門:SSHログインの自動化ガイド

Tera Termマクロ入門:SSHログインの自動化ガイド

当ページのリンクには広告が含まれています。

記事の文字数:3363

本記事では、Tera Termマクロ(TTL)を使用してSSH経由でリモートサーバーへ自動ログインする方法を詳しく解説します。基本的なマクロ構文から、具体的なログインスクリプト例やセキュリティ対策まで紹介します。Tera Termを使った作業の自動化に興味のあるエンジニアやネットワーク管理者に向けて、すぐに実践できる内容となっています。


スポンサーリンク

Tera Termは、シリアル通信やSSH、Telnetなど多様なプロトコルに対応したターミナルエミュレータであり、ネットワーク機器やサーバーの管理において広く利用されています。Tera Termの魅力の一つが、Tera Termマクロ(TTL: Tera Term Language)を用いた作業の自動化機能です。

本記事では、「TeraTermマクロ ログイン」に焦点を当て、特にSSHを使ってリモートサーバーに自動ログインする方法について詳しく解説します。初心者でも理解しやすいよう、具体的なコード例とともに丁寧に説明していきます。

自動ログインマクロ(TTL)の作り方

Tera Termマクロは、.ttlという拡張子を持つスクリプトファイルで作成します。Windows環境でTera Termをインストールすると、マクロの実行に必要なttpmacro.exeというツールが同梱されており、これを使ってマクロスクリプトを実行します。マクロはテキストエディタ(たとえばメモ帳やVSCodeなど)で簡単に作成・編集でき、Windowsバッチファイルやスケジューラと組み合わせることで、定期的なログイン処理なども自動化できます。

実行するTTLスクリプトの概要

以下のマクロスクリプトは、次のような処理を自動で行います。

  1. マクロがあるフォルダを取得
  2. 指定ホストにSSHでログイン
  3. ログ保存用のフォルダを作成(なければ自動で作成)
  4. 接続ログをファイルに保存
  5. サーバーでコマンドを実行し、その結果をログに記録

自動ログインマクロの実装例

以下は、Tera Termマクロを用いて指定のサーバーにSSH接続を行い、コマンドを実行する基本的な例です。(L5-L7は環境に応じて修正してください)

login.ttl
; Teratermマクロ配置ディレクトリを取得
getdir DIR
; 接続情報(環境に応じて修正)
HOSTADDR = '127.0.0.1'
USERNAME = 'test-user'
PASSWORD = 'passw0rd'
; 接続オプション組み立て
COMMAND = HOSTADDR
strconcat COMMAND ':22 /ssh /2 /auth=password /user='
strconcat COMMAND USERNAME
strconcat COMMAND ' /passwd='
strconcat COMMAND PASSWORD
; 接続実行
connect COMMAND
; ファイル保存フォルダーのパスを決定
; フォルダーが存在していなければ作成する
FOLDER = DIR
strconcat FOLDER '\log\'
foldersearch FOLDER
if result = 0 then
foldercreate FOLDER
endif
; ログファイル生成
LOGFILE = FOLDER
gettime LOGTIME "%Y%m%d%H%M%S.log"
strconcat LOGFILE HOSTADDR
strconcat LOGFILE '_'
strconcat LOGFILE LOGTIME
; ログ開始
logopen LOGFILE 0 0
; コマンド実行
wait '$'
sendln 'uname -n'
wait '$'
sendln 'date'
wait '$'
sendln 'whoami'
wait '$'
end

このスクリプトをlogin.ttlなどの名前で保存し、ttpmacro.exeと関連付けて実行することで、自動的にSSH接続して処理を実行できます。

TTLファイルの実装内容解説

TTLファイルのポイントは以下の通りです。

  • getdir:このマクロファイルが存在するフォルダのパスを取得します。ログ保存先のベースになります。
  • connect:SSH接続を実行します。ここではパスワード認証方式を使用して解説します。
  • foldersearch / foldercreate:ログ保存用のlogフォルダが存在するかを確認し、なければ自動で作成します。
  • gettime:現在時刻を「年月日時分秒」の形式で取得し、ログファイル名に付加します。
  • logopen:ログファイルの出力を開始します。
  • sendln / wait:コマンドを送信し、プロンプトが表示されるまで待ちます。

このTera Termマクロ(TTLスクリプト)は、SSHを使用してリモートホストにログインし、いくつかのコマンド(uname -ndatewhoami)を順に実行するスクリプトです。以下で各行の意味を詳しく解説します。

ディレクトリパス取得

getdirでスクリプトを実行しているTTLファイルが置かれているディレクトリのパスを取得して、変数DIRに格納します。ログファイルの保存先としてこのディレクトリを基準にします。

Terminal window
; Teratermマクロ配置ディレクトリを取得
getdir DIR

接続情報設定

SSH接続に使用する情報を変数に代入しています。接続先ホストのアドレス、ユーザー名、パスワードをそれぞれ変数に設定し、SSH接続時に使用します。

Terminal window
; 接続情報
HOSTADDR = '127.0.0.1'
USERNAME = 'test-user'
PASSWORD = 'passw0rd'

接続コマンド組み立て

connectコマンドで使う接続文字列を組み立てます。 COMMANDlocalhost:22 /ssh /2 /auth=password /user=test-user /passwd=passw0rdという文字列を追加します。このCOMMAND文字列をconnectに渡して実行します。

Terminal window
; 接続オプション組み立て
COMMAND = HOSTADDR
strconcat COMMAND ':22 /ssh /2 /auth=password /user='
strconcat COMMAND USERNAME
strconcat COMMAND ' /passwd='
strconcat COMMAND PASSWORD
  • :22:ポート番号22で接続(SSHのデフォルトポート)
  • /ssh:SSH接続を指定
  • /2:SSHバージョン2を明示
  • /auth=password:パスワード認証を使用
  • /user=:ユーザー名を指定
  • /passwd= :パスワードを指定

サーバ接続実行

作成した接続オプション付きのコマンド文字列を使って、Tera TermでSSH接続を実行します。

Terminal window
; 接続実行
connect COMMAND

操作ログ出力

ログ保存用のサブフォルダ log を、スクリプトと同じ場所に設定します。

Terminal window
; ファイル保存フォルダーのパスを決定
; フォルダーが存在していなければ作成する
FOLDER = DIR
strconcat FOLDER '\log\'

foldersearchで指定フォルダが存在するかチェックします。result = 0 の場合は、フォルダが存在しないので foldercreate で作成します。

Terminal window
foldersearch FOLDER
if result = 0 then
foldercreate FOLDER
endif

gettimeで現在の日時(例:20250528121230.log)を取得し、LOGFILEにホストアドレスと日時を連結し、ログファイル名を作成します。(ファイル例:log\127.0.0.1_20250528121230.log

Terminal window
; ログファイル生成
LOGFILE = FOLDER
gettime LOGTIME "%Y%m%d%H%M%S.log"
strconcat LOGFILE HOSTADDR
strconcat LOGFILE '_'
strconcat LOGFILE LOGTIME

ログファイルを開いて以降のセッション出力を保存開始します。

Terminal window
; ログ開始
logopen LOGFILE 0 0
  • logopenの引数補足
    • 第一引数:ログファイル名を指定
    • 第三引数(0):受信した漢字、改行文字は変換してファイルに書き込む。エスケープシーケンスは書き込まない。
    • 第二引数(0):ファイルが存在する場合、追記せず新規ファイルで開始。

コマンドの実行

wait '$' は、プロンプト(例:$)が表示されるのを待機し、コマンド実行のタイミングを同期するための処理です。

Terminal window
; コマンド実行
wait '$'
sendln 'uname -n'
wait '$'
sendln 'date'
wait '$'
sendln 'whoami'
wait '$'

コマンド実行中にプロンプトが異なる場合は wait '$' を調整してください(たとえば #>)。

  • sendln は、対象のコマンドを送信して Enter を押す動作を自動化します。

    • uname -n:ホスト名の表示
    • date:システム日付の表示
    • whoami:現在ログインしているユーザーの表示

TeraTermマクロの終了

endでTeraTermマクロのスクリプトを終了します。

Terminal window
end

自動ログインマクロ(公開鍵認証版)

このTTLスクリプトには平文でパスワードが記述されているため、以下の対策を検討するのが望ましいです。

  • 公開鍵認証(/auth=publickey)を使い、パスワードを記述しない運用に変更する
  • パスワードは別ファイルに格納し、スクリプト内で読み込むようにして、パスワードファイルのアクセス権限を制限する
  • バージョン管理システムにアップロードする際には、機密情報を含まないように注意する

公開鍵認証を行う場合の、ログインマクロ例を以下に示します。

login.ttl
; Teratermマクロ配置ディレクトリを取得
getdir DIR
; 接続情報(環境に応じて修正)
HOSTADDR = '127.0.0.1'
USERNAME = 'test-user'
KEYFILE = DIR
strconcat KEYFILE '\id_rsa' ; 秘密鍵ファイルのパス(必要に応じて拡張子を .ppk .pem に)
; 接続オプション組み立て
COMMAND = HOSTADDR
strconcat COMMAND ':22 /ssh /2 /auth=publickey /user='
strconcat COMMAND USERNAME
strconcat COMMAND ' /keyfile='
strconcat COMMAND KEYFILE
; 接続実行
connect COMMAND
; ファイル保存フォルダーのパスを決定
; フォルダーが存在していなければ作成する
FOLDER = DIR
strconcat FOLDER '\log\'
foldersearch FOLDER
if result = 0 then
foldercreate FOLDER
endif
; ログファイル生成
LOGFILE = FOLDER
gettime LOGTIME "%Y%m%d%H%M%S.log"
strconcat LOGFILE HOSTADDR
strconcat LOGFILE '_'
strconcat LOGFILE LOGTIME
; ログ開始
logopen LOGFILE 0 0
; コマンド実行
wait '$'
sendln 'uname -n'
wait '$'
sendln 'date'
wait '$'
sendln 'whoami'
wait '$'
end

TeraTermマクロまとめ

利用したTTLのコマンドをまとめると下記の通りです。

コマンド説明
getdir現在のマクロファイルがあるディレクトリを取得して変数に格納する。
strconcat文字列を結合し、変数に連結して代入する。
connect指定した接続情報でTera Termセッションを開始する。
foldersearch指定フォルダが存在するか確認する。結果は result 変数に格納される。
foldercreate指定フォルダを新規作成する。
gettime現在の日時を指定フォーマットで文字列として取得する。
logopenTera Termのセッションログの保存を開始する。
wait指定した文字列がホストから出力されるまで待機する。
sendln指定したコマンドを送信し、改行(Enter)を自動的に付加する。
endマクロの終了を明示する。

Tera Termマクロは、日常的なサーバーログイン作業や機器の設定業務を効率化することができます。マクロを一度作っておけば、誰が実行しても同じ処理が自動で行えるため、ヒューマンエラーの防止にもつながります。まずはシンプルな自動ログインマクロから始め、徐々に条件分岐やループ処理、ログ取得、エラーハンドリングなどを加え、より実用的なスクリプトに育てていきましょう。


以上で本記事の解説を終わります。
よいITライフを!
Scroll to Top