
スポンサーリンク
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スクリプトの概要
以下のマクロスクリプトは、次のような処理を自動で行います。
- マクロがあるフォルダを取得
- 指定ホストにSSHでログイン
- ログ保存用のフォルダを作成(なければ自動で作成)
- 接続ログをファイルに保存
- サーバーでコマンドを実行し、その結果をログに記録
自動ログインマクロの実装例
以下は、Tera Termマクロを用いて指定のサーバーにSSH接続を行い、コマンドを実行する基本的な例です。(L5-L7は環境に応じて修正してください)
; Teratermマクロ配置ディレクトリを取得getdir DIR
; 接続情報(環境に応じて修正)HOSTADDR = '127.0.0.1'USERNAME = 'test-user'PASSWORD = 'passw0rd'
; 接続オプション組み立てCOMMAND = HOSTADDRstrconcat COMMAND ':22 /ssh /2 /auth=password /user='strconcat COMMAND USERNAMEstrconcat COMMAND ' /passwd='strconcat COMMAND PASSWORD
; 接続実行connect COMMAND
; ファイル保存フォルダーのパスを決定; フォルダーが存在していなければ作成するFOLDER = DIRstrconcat FOLDER '\log\'foldersearch FOLDERif result = 0 thenfoldercreate FOLDERendif
; ログファイル生成LOGFILE = FOLDERgettime LOGTIME "%Y%m%d%H%M%S.log"strconcat LOGFILE HOSTADDRstrconcat 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 -n
、date
、whoami
)を順に実行するスクリプトです。以下で各行の意味を詳しく解説します。
ディレクトリパス取得
getdir
でスクリプトを実行しているTTLファイルが置かれているディレクトリのパスを取得して、変数DIR
に格納します。ログファイルの保存先としてこのディレクトリを基準にします。
; Teratermマクロ配置ディレクトリを取得getdir DIR
接続情報設定
SSH接続に使用する情報を変数に代入しています。接続先ホストのアドレス、ユーザー名、パスワードをそれぞれ変数に設定し、SSH接続時に使用します。
; 接続情報HOSTADDR = '127.0.0.1'USERNAME = 'test-user'PASSWORD = 'passw0rd'
接続コマンド組み立て
connect
コマンドで使う接続文字列を組み立てます。
COMMAND
にlocalhost:22 /ssh /2 /auth=password /user=test-user /passwd=passw0rd
という文字列を追加します。このCOMMAND
文字列をconnect
に渡して実行します。
; 接続オプション組み立てCOMMAND = HOSTADDRstrconcat COMMAND ':22 /ssh /2 /auth=password /user='strconcat COMMAND USERNAMEstrconcat COMMAND ' /passwd='strconcat COMMAND PASSWORD
:22
:ポート番号22で接続(SSHのデフォルトポート)/ssh
:SSH接続を指定/2
:SSHバージョン2を明示/auth=password
:パスワード認証を使用/user=
:ユーザー名を指定/passwd=
:パスワードを指定
サーバ接続実行
作成した接続オプション付きのコマンド文字列を使って、Tera TermでSSH接続を実行します。
; 接続実行connect COMMAND
操作ログ出力
ログ保存用のサブフォルダ log
を、スクリプトと同じ場所に設定します。
; ファイル保存フォルダーのパスを決定; フォルダーが存在していなければ作成するFOLDER = DIRstrconcat FOLDER '\log\'
foldersearch
で指定フォルダが存在するかチェックします。result = 0
の場合は、フォルダが存在しないので foldercreate
で作成します。
foldersearch FOLDERif result = 0 then foldercreate FOLDERendif
gettime
で現在の日時(例:20250528121230.log)を取得し、LOGFILE
にホストアドレスと日時を連結し、ログファイル名を作成します。(ファイル例:log\127.0.0.1_20250528121230.log
)
; ログファイル生成LOGFILE = FOLDERgettime LOGTIME "%Y%m%d%H%M%S.log"strconcat LOGFILE HOSTADDRstrconcat LOGFILE '_'strconcat LOGFILE LOGTIME
ログファイルを開いて以降のセッション出力を保存開始します。
; ログ開始logopen LOGFILE 0 0
- logopenの引数補足
- 第一引数:ログファイル名を指定
- 第三引数(
0
):受信した漢字、改行文字は変換してファイルに書き込む。エスケープシーケンスは書き込まない。 - 第二引数(
0
):ファイルが存在する場合、追記せず新規ファイルで開始。
コマンドの実行
各 wait '$'
は、プロンプト(例:$
)が表示されるのを待機し、コマンド実行のタイミングを同期するための処理です。
; コマンド実行wait '$'sendln 'uname -n'wait '$'sendln 'date'wait '$'sendln 'whoami'wait '$'
コマンド実行中にプロンプトが異なる場合は wait '$'
を調整してください(たとえば #
や >
)。
-
sendln
は、対象のコマンドを送信して Enter を押す動作を自動化します。uname -n
:ホスト名の表示date
:システム日付の表示whoami
:現在ログインしているユーザーの表示
TeraTermマクロの終了
end
でTeraTermマクロのスクリプトを終了します。
end
自動ログインマクロ(公開鍵認証版)
このTTLスクリプトには平文でパスワードが記述されているため、以下の対策を検討するのが望ましいです。
- 公開鍵認証(
/auth=publickey
)を使い、パスワードを記述しない運用に変更する - パスワードは別ファイルに格納し、スクリプト内で読み込むようにして、パスワードファイルのアクセス権限を制限する
- バージョン管理システムにアップロードする際には、機密情報を含まないように注意する
公開鍵認証を行う場合の、ログインマクロ例を以下に示します。
; Teratermマクロ配置ディレクトリを取得getdir DIR
; 接続情報(環境に応じて修正)HOSTADDR = '127.0.0.1'USERNAME = 'test-user'KEYFILE = DIRstrconcat KEYFILE '\id_rsa' ; 秘密鍵ファイルのパス(必要に応じて拡張子を .ppk や .pem に)
; 接続オプション組み立てCOMMAND = HOSTADDRstrconcat COMMAND ':22 /ssh /2 /auth=publickey /user='strconcat COMMAND USERNAMEstrconcat COMMAND ' /keyfile='strconcat COMMAND KEYFILE
; 接続実行connect COMMAND
; ファイル保存フォルダーのパスを決定; フォルダーが存在していなければ作成するFOLDER = DIRstrconcat FOLDER '\log\'foldersearch FOLDERif result = 0 then foldercreate FOLDERendif
; ログファイル生成LOGFILE = FOLDERgettime LOGTIME "%Y%m%d%H%M%S.log"strconcat LOGFILE HOSTADDRstrconcat 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 | 現在の日時を指定フォーマットで文字列として取得する。 |
logopen | Tera Termのセッションログの保存を開始する。 |
wait | 指定した文字列がホストから出力されるまで待機する。 |
sendln | 指定したコマンドを送信し、改行(Enter)を自動的に付加する。 |
end | マクロの終了を明示する。 |
Tera Termマクロは、日常的なサーバーログイン作業や機器の設定業務を効率化することができます。マクロを一度作っておけば、誰が実行しても同じ処理が自動で行えるため、ヒューマンエラーの防止にもつながります。まずはシンプルな自動ログインマクロから始め、徐々に条件分岐やループ処理、ログ取得、エラーハンドリングなどを加え、より実用的なスクリプトに育てていきましょう。
以上で本記事の解説を終わります。
よいITライフを!