
Tera Termマクロでサーバ運用を自動化する方法とは?
Tera Termを利用したことがある方は多いと思いますが、Tera Termマクロを使うとTera Term運用がより便利になります。ぜひこの記事を参考にしてTera Termマクロを学んでみませんか?
日々のテストや運用の効率性を高め、あなたの負担を減らしてくれるかもしれません。新人のエンジニアにも分かるように基礎から丁寧に説明しますので、この機にTera Termマクロの道への第一歩を踏み出しましょう!
TeraTermマクロとは
Tera Termマクロを一言で言うと、Tera Termにおける操作を自動化するための機能です。
Tera Termモジュールの中に標準で用意されているので、Tera Termの使用準備さえできていれば、簡単にマクロ機能を使うことができます。
Tera Termマクロを使い始めるのは非常に簡単です。次のことを行うだけです。
- Tera Termをインストールする
- 自動化したいTera Termの処理をTTLファイルに記載して保存する
- 2で作成したTTLファイルを実行する
お手元にTera Termがあれば誰でも利用することができます。この記事の後半でTera Termマクロの具体的な作成方法も説明していますので、是非最後までお読みください。
Tera Termマクロで何ができる?
Tera Termマクロを使用することで、例えば次のようなことを自動化できます。
以下は、Tera Termモジュールにサンプルとして用意されているTTLファイル の内容です。
- パスワードファイル内のパスワードを削除
- ダイヤルアップ、telnet、sshでのログイン
- 画面の内容をキャプチャしてファイルに書き出す
この例の中にログインがありますが、接続のための環境準備さえ整っていれば、Linuxサーバやネットワーク機器、Windowsサーバへの接続およびログインも可能です。ログインした後は、接続先のコマンドを実行することも当然可能です。
要するに、ログイン後に接続先サーバで実行したいコマンドも含めて、TeraTermマクロで自動化できるということになります。
ここまで聞くと便利そうだなというイメージが膨らんできますよね。
他のTera Termマクロ活用例
- 複数台あるサーバへの疎通確認(pingやtraceroute)処理
- ネットワーク機器のconfig取得
- 複数台あるサーバの構成情報取得
- ソフトウェアの一斉インストール、パッチモジュールの一斉適用
Tera Termマクロの動作イメージ
Tera Termマクロの動作イメージを確認してみましょう。
今回は、AWSクラウド上にあるAmazon Linux2インスタンスにsshログインする処理を想定してみます。

図の内容を補足も入れつつ説明します。
①SSHクライアントPCでTTLファイルを実行します。
次の画像は、Tera Termをインストールした場合にインストール先に展開されるTTLファイルのサンプルです。

これらファイル拡張子が「.ttl」のファイル(Tera Term Macro File)を実行することで、Tera Termマクロの処理が開始されます。
②Tera Term Macro InterpreterがTTLファイルの処理を実行
TTLファイルは、Tera Term Macro Interpreterというアプリケーションによって実行されます。このアプリケーションは、Tera Termをインストールする際に同梱される形でインストールされます。

TTLファイルを実行するアプリとしてTera Term Macro Interpreter が関連付けられていることで、TTLファイルを実行するとTera Term Macro Interpreter がTTLファイルの中身を上から順に1行ずつ処理し始めます(ソースコードを1行ずつ処理するプログラムをインタプリタと言います)。
ちなみに、Tera Termインストール時、次に示す画像の「.ttl ファイルをttpmacro.exe に関連付ける」にチェックを入れることで、TTLファイルとTera Term Macro Interpreterが関連付けられます。

Tera Term Macro Interpreterが、TTLファイルの中のEC2ログインに関する処理を1行ずつ読み込んで実行します。その過程でTera Term が起動し、ログインに必要な操作を自動実行します。
③Tera Term Macro Interpreter が接続先EC2のコマンドを実行
EC2ログインに関する処理を実行し、特に問題なくEC2にログインできた場合、続けてTTLファイルに記載したEC2のコマンドを実行します。
冒頭に掲載した動作イメージのように、”cat /etc/amazon-linux-release”というコマンドを実行する場合、Amazon Linux EC2インスタンスのOSバージョンを表示します。
④Tera Term が終了し操作履歴がログファイルとして保存される
Tera Term実行時に操作ログを取る設定をしておくと、Tera Termが起動したタイミングで空のログファイルを作成し、Tera Term Macro InterpreterでEC2のプロンプトにコマンドを打ち込むごとに、このログファイルに実行コマンドと出力結果を都度上書き記録します。
Tera Termマクロの作成方法
それでは、実践編としてTera Termマクロを作成してみましょう。
この手順をそっくりそのまま真似ても、Tera Termマクロの便利さを実感できると思います。
作成するTera Termマクロの概要
今回は、先述の動作イメージと同じく、AWSクラウド上にあるAmazon Linux2インスタンスにsshログインする処理をTera Termマクロで実現します。

次のような流れでTera Termマクロが動作することを想定しています。
- TTLファイルをダブルクリックで実行する
- Tera Term Macro Interpreterが処理を開始する
- 接続先EC2インスタンスのIPアドレスを入力する
- 3で指定した接続先にTera Termが接続する
- ログイン処理を自動で行う
- ログインに成功後、操作ログの自動保存を設定する
- EC2にてコマンドを実行する$ cat /etc/amazon-linux-release
- Tera Termが終了し、操作ログが保存される
手順3で接続先EC2インスタンスのIPアドレスを入力するのは、今回接続するEC2インスタンスが固定IPアドレスを持っていないためです。
固定IPアドレスを持っているインスタンスの場合、TTLファイル内で指定してあげると自動処理の中でIPアドレス指定も行うため、この操作は省くことができます。
Tera Termマクロの環境準備
Tera Termマクロの実行環境を準備します。まずは、SSHクライアントとして使用するPCの準備です。ハードウェアのスペックはTera Termが動けば何でも良いです(Tera Termのシステム要件は、公式情報を参考にしてください)。
OSは、Windows10 Homeエディション22H2 のものを用意しました。
Tera Termは、2024年11月25日時点最新版の5.3 をインストールしています。ttlファイルとTera Term Macro Interpreterはインストール時に関連付け済みです。関連付けが出来ていない場合、手動で関連付けを設定して挙げる必要があります。
Windows10の場合は、「設定」→「アプリ」→「既定のアプリ」→「ファイルの種類ごとに既定のアプリを選ぶ」より関連付けを設定できます。

また、接続するAWS環境についても紹介しておきます。
EC2インスタンスはAmazon Linux 2 で作成し、インスタンスタイプは無料枠のt2.microです。全ての設定値を既定値で作成し、接続に必要なキーペアファイルは作成しました。ちなみに、インスタンス名はtest-linux-server01 です。

Tera Termマクロで自動ログイン
ここからはTTLファイルの作成です。初めに自動ログインする仕組みを作りましょう。
Tera Termをインストールすると、インストール先に自動ログイン処理に関するTTLファイルのサンプルが格納されるので、これをカスタマイズして作りましょう。
サンプルファイル(ssh2login.ttl)(※サンプル内のコメントは省略します)は、以下の通りです。
username = 'nike'
hostname = '192.168.1.3'
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
msg = 'Enter password for user '
strconcat msg username
passwordbox msg 'Get password'
msg = hostname
strconcat msg ':22 /ssh /auth=password /user='
strconcat msg username
strconcat msg ' /passwd='
strconcat msg inputstr
connect msg
冒頭の2行は変数をセットしています。
username = 'nike'
hostname = '192.168.1.3'
変数は後の処理によって用意するものが決まるため、とりあえず後回しにします。
変数定義の後は、Tera Termへの接続設定を行っています。
特にmsg という変数が重要で、この変数に格納した値を基に接続処理が行われます。strconcat というTera Termのコマンドが、msg変数に次々と文字列を継ぎ足す処理を行い、最終行のconnect msg という処理で接続が行われるという仕組みです。
このサンプルの内容だと、以下の処理でパスワード認証でSSH接続しています。
strconcat msg ':22 /ssh /auth=password /user='
ログインパスワードを手入力させる内容であり、以下の2行でinputstrに手入力したパスワードが格納される仕組みです。
strconcat msg ' /passwd='
strconcat msg inputstr
今回は接続先がEC2インスタンスであるため、次のように変えます。
msg = hostaddr
strconcat msg ':22 /ssh /2 /auth=publickey /user='
strconcat msg username
strconcat msg ' /keyfile='
strconcat msg keyfile
connect msg
EC2インスタンスにはパスワードではなくキーペアファイルで接続するため、auth=publickey とします。
それに従い、’/passwd=’ を‘/keyfile=’ に変えています。パスワード入力は使わないので、サンプルの以下行は削除しました。
strconcat msg inputstr
さて、この接続処理に合わせる形で、後回しにしていた変数定義を記述します。
getdir dir
inputbox 'IPアドレスの入力' '接続情報'
key = 'SSH_TEST.pem'
makepath keyfile dir key
hostaddr = inputstr
username = 'ec2-user'
分かり易いものから説明するので順番が前後しますが、hostaddrは接続先インスタンスのIPアドレスです。今回は手入力で指定するためinputstrとしてます。
usernameは、ログインに使用するEC2インスタンスのユーザ名です。Amazon Linux2 のインスタンスの初期ユーザec2-user を指定しています。
次の処理はディレクトリのフルパスを作成するTeraTermマクロのコマンドです。
makepath keyfile dir key
変数dirと変数keyを組み合わせてkeyfile変数(フルパス)を作っています。getdir dir というTera Termマクロのコマンドを使うことで、実行するTTLファイルが配置されたディレクトリパスを取得できます。
つまり、今回作成するttlファイル名をec2_ssh2login.ttlとし、C:\ec2_ssh2login.ttlを実行する場合、keyfile変数には “C:\SSH_TEST.pem” が格納されることになります。
また、今回はIPアドレスを手入力で指定しますが、Tera Termマクロのコマンドinputboxを使うことで、inputstrという元々用意されている変数に入力値が格納されます。
inputbox には文法があり、コマンドに続く最初の引数は「ダイアログボックスに表示されるメッセージ」、2つ目の引数は「ダイアログボックスのタイトル」で必ず指定する必要があります。
inputbox 'IPアドレスの入力' '接続情報'
これを実行した場合、次のようなウィンドウが作られます。

ここまでで、作成途中のTTLファイルは以下のようになっています。
getdir dir
inputbox 'IPアドレスの入力' '接続情報'
key = 'SSH_TEST.pem'
makepath keyfile dir key
hostaddr = inputstr
username = 'ec2-user'
msg = hostaddr
strconcat msg ':22 /ssh /2 /auth=publickey /user='
strconcat msg username
strconcat msg ' /keyfile='
strconcat msg keyfile
connect msg
Tera Termマクロでログ保存設定
EC2インスタンスへのログインに加えて、Tera Termの操作ログをログファイルに保存する処理もTera Termマクロに組み込みます。
操作ログの保存を有効化するサンプルファイルは用意されていないので、他サイトなどを調べて用意してみました。必要な処理は以下の通りです。
getdate logdate '%Y%m%d_%H%M%S'
strconcat logname logsdir
strconcat logname ‘test-linux-server01’
strconcat logname '_'
strconcat logname logdate
strconcat logname '.log'
logopen logname 0 0
仕組みは接続処理と似ています。lognameという変数にログに関する設定を次々と格納していき、最終行にある次のコマンドを実行することでログファイルが作成されてログの記録が開始します。
logopen logname 0 0
ログファイルの設定内容について見ていきましょう。とはいっても、ログファイルのファイル名を決めているだけで複雑な処理はしていません。1行目にあるgetdateというTera Termマクロのコマンドで、現在日時を取得しlogdate変数に格納しています。
getdate logdate '%Y%m%d_%H%M%S'
あとはファイル名に入れたい値をstrconcatでどんどん継ぎ足しています。strconcatは接続処理でも説明しましたね。今回はホスト名と日付および時間をファイル名に入れるようにしてみました。拡張子は.logで作成しています。
このログファイルを作成する過程で注意する点は、ログファイルの格納先となるパスもファイル名に含めて指定することです。以下の部分になります。
strconcat logname logsdir
つまり、このlogsdir変数を定義する必要がありますが、今回は次のように変数を定義してみました。
logsdir = dir
strconcat logsdir '\ec2_opelog\'
1行目で利用するdir変数は、接続処理で使用したdir変数を使います。
2行目ですが、今回はログファイルを格納するフォルダもTera Termマクロで作成することにしました。2行目はただの変数定義ですが、次の処理を併せて実行することで、実行するttlファイルが配置されたパスにec2_opelogというフォルダを作ります。
foldersearch logsdir
if result = 0 then
foldercreate logsdir
endif
3行目のfoldercreateというTera Termコマンドで、ec2_opelog フォルダを作ります。その前の1行目、2行目は分岐処理になっていて、既にec2_opelogフォルダが作成されている場合はec2_opelogフォルダの作成処理がスキップされます。
さて、ここまでの段階でTTLファイルは次のようになりました。
getdir dir
inputbox 'IPアドレスの入力' '接続情報'
logsdir = dir
strconcat logsdir '\ec2_opelog\'
foldersearch logsdir
if result = 0 then
foldercreate logsdir
endif
key = 'SSH_TEST.pem'
makepath keyfile dir key
hostaddr = inputstr
username = 'ec2-user'
msg = hostaddr
strconcat msg ':22 /ssh /2 /auth=publickey /user='
strconcat msg username
strconcat msg ' /keyfile='
strconcat msg keyfile
connect msg
getdate logdate '%Y%m%d_%H%M%S'
strconcat logname logsdir
strconcat logname ‘test-linux-server01’
strconcat logname '_'
strconcat logname logdate
strconcat logname '.log'
logopen logname 0 0
Tera Termマクロでコマンド実行
TTLファイルの作成はこれで最後です。EC2インスタンスにログイン後、実行するコマンドを記述します。今回実行するコマンドは次を想定しています。
cat /etc/etc/amazon-linux-release
exit
1行目は、Amazon Linux 2023 をOSとするマシンで、OSバージョン情報を参照します。
2行目は、EC2インスタンスからログアウトするコマンドで、ログアウトと同時にEC2インスタンスとの接続も切れるため、Tera Termも終了します。
接続先マシンでのコマンドの実行は、sendln というTera Termマクロのコマンドを使用することで実現できます。sendlnは接続先に文字列やデータを送信できるコマンドです。
以下に処理を記載してみました。
wait '$'
sendln 'cat /etc/amazon-linux-release'
sendln 'exit'
1行目のwait ‘$’ はプロンプトを待機する処理で、この処理が記述されていないとコマンドが実行できません。
プロンプトというのは、以下の画像で赤線で示した箇所に表示される記号です。別名で入力促進記号とも称され、この記号が出るとコマンドを入力することができます。画像の場合は$ ですが、$以外にも種類があります。

実は、接続先マシンにログイン後、このプロンプトが表示されるまでの間にわずかですが時間を要します。1行目のwait ‘$’ を入れてあげないと、プロンプトが表示されていない状態でコマンドが送信されることとなり、コマンドが入力されません。必ず1行目を記述してください。
これでTTLファイルが完成しました。最終的なファイルの内容は次の通りです。
getdir dir
inputbox 'IPアドレスの入力' '接続情報'
logsdir = dir
strconcat logsdir '\ec2_opelog\'
foldersearch logsdir
if result = 0 then
foldercreate logsdir
endif
key = 'SSH_TEST.pem'
makepath keyfile dir key
hostaddr = inputstr
username = 'ec2-user'
msg = hostaddr
strconcat msg ':22 /ssh /2 /auth=publickey /user='
strconcat msg username
strconcat msg ' /keyfile='
strconcat msg keyfile
connect msg
getdate logdate '%Y%m%d_%H%M%S'
strconcat logname logsdir
strconcat logname 'test-linux-server01'
strconcat logname '_'
strconcat logname logdate
strconcat logname '.log'
logopen logname 0 0
wait '$'
sendln 'cat /etc/amazon-linux-release'
sendln 'exit'
end
作ったTera Termマクロを動かしてみる
TTLファイルが完成したので早速動かしてみましょう。
TTLファイルと接続に使用するキーペアファイルは今回デスクトップに配置しました。ログファイルが格納されるフォルダは未作成の状態です。

「ec2_ssh2login.ttl」をダブルクリックで実行すると、次のウィンドウが起動します。

現在のEC2インスタンスのIPアドレスを確認して入力し、「OK」をクリックします。直後Tera Termが起動し、コマンドの入力操作が自動で行われますが、すぐにログアウトが行われるため終了します。ただ、TTLファイルを配置したデスクトップを確認してみると、ログファイル格納用のフォルダ「ec2_opelog」が作成されています。

作成されたフォルダの中身を見てみると、test-linux-server01_20241126_101421.log というファイル名のログファイルが格納されていました。中身を確認してみましょう。

コマンドが実行され、Amazon Linux OSのバージョン情報を参照できています。見事、Tera Termマクロで自動ログイン、ログ保存、コマンド実行ができました。
Macro for Tera Term の紹介
今回は紹介したTera Termマクロの処理は、自分がやりたい処理とは違うという方もいると思います。
そこで、自分が実現したい処理をTera Termマクロにするにはどうすればいいか、そもそも実現できるのかなど確認する際は、Tera Term公式サイトの「Macro for Tera Term」ページを参照してみてください。
また、公式情報以外にも、様々なTera Termマクロの記述例を共有しているサイト等がネット上に数多く公開されています。色々調べながらTera Termマクロの作成に挑戦してみてください。
さいごに
今回は、Tera Termマクロの作り方を説明してみました。開発、インフラ、運用監視、色々な分野のITエンジニアである皆さんに役立つ情報だったのではないでしょうか。
特に複数台あるサーバやネットワーク機器といったマシンに同じ処理を一挙に行いたい場合などに、Tera Termマクロの恩恵をより受けられると思います。
プログラミング経験がない方に向けてもハードルが低い機能かと思いますので、この記事をきっかけに処理の自動化に挑戦していただけると幸いです。