TeraTermマクロ(TTL)の基本|SSH操作を自動化するスクリプトの書き方

Automation

概要

前回の記事では、複数のLinuxサーバーの構築作業を自動化する方法として TeraTermマクロ を紹介しました。
サーバー台数が増えてくると、次のような作業を何度も繰り返すことになります。

  • SSHログイン
  • コマンド実行
  • 設定確認
  • ログ取得

これらを手作業で行うのは時間がかかるだけでなく、人的ミスの原因にもなります。
TeraTermマクロ(TTL)を使うと、これらの操作を スクリプトとして自動実行できます。
今回はそんなTeraTermマクロ(TTL)の基本的な書き方を紹介します。

この記事では 以下の内容を整理します。

  • TeratermマクロによるサーバーへのConnect
  • Teratermマクロによるサーバーへのコマンド送信
  • Teratermマクロによるログ出力

TeraTermマクロ(TTL)とは

TeraTermマクロは、TeraTermの操作を自動化するためのスクリプトです。
拡張子は「.ttl」になります。

このスクリプトを実行すると、TeraTermが自動的に次の操作を行います。

  • サーバー接続
  • コマンド送信
  • 出力待ち
  • ログ取得

基本的な考え方はシンプルです。

ターミナル操作  
↓  
そのままスクリプト化

つまり、普段ターミナルで行っている作業をそのまま自動化できます。


最もシンプルなTeraTermマクロ

まずは最も簡単なマクロを見てみます。

connect '192.168.1.10:22 /ssh /auth=password /user=***** /passwd=*****'  
wait '$'  
sendln 'ls'  
wait '$'

このマクロは次の処理を行います。

  1. SSH接続
  2. プロンプト待ち
  3. ls コマンド実行

非常にシンプルですが、これだけで SSH操作の自動化が可能です。


connectコマンド(サーバー接続)

connect コマンドは、サーバーに接続するための命令です。

connect '192.168.1.10:22 /ssh /auth=password /user=***** /passwd=*****'

パラメータの意味は次の通りです。

項目内容
192.168.1.10接続先IP
22SSHポート
/sshSSH接続
/auth=passwordパスワード認証
/userユーザー名
/passwdパスワード

TeraTermマクロでは、この文字列を指定するだけでSSH接続が可能です。


sendlnコマンド(コマンド送信)

sendln はコマンドを送信する命令です。

sendln 'ls -l'

これはターミナルで次の操作をするのと同じです。

ls -l  
Enter

つまり、「コマンド + Enter」を送信します。


waitコマンド(出力待ち)

wait は特定の文字列が表示されるまで待機する命令です。

wait '$'

これは

$

が表示されるまで待機します。
Linuxのプロンプトは通常、$または#なので、これを待つことで コマンド実行完了を確認できます。


ログ取得(logopen)

TeraTermマクロでは簡単にログを取得できます。

logopen 'output.log' 0 1 1 0

ログを取得すると、ターミナルの内容がファイルとして保存されます。

ログ取得には次のメリットがあります。

  • 作業証跡を残せる
  • エラー確認ができる
  • トラブルシュートが容易

実際の作業では ログ取得はほぼ必須です。


TeraTermマクロの作り方

マクロは次の手順で作ると簡単です。

  1. 手作業でコマンド実行
  2. ログ取得
  3. TTL化(マクロ作成)

この方法を使うと、実際の操作をそのままスクリプト化できます。


TeraTermログ再生機能

TeraTermには ログ再生(Replay Log) という機能があります。
単純な作業を再実行するのであれば、この機能でも十分に使えることもあります。

ただ、この機能は単純にログをそのまま再生するのみのため、以下のような問題点があります。

  • 実行がタイミング依存になるため正確にWaitできない
  • 対話式のコマンドに対応できない
  • マクロではないので条件分岐やループができない
  • といった問題点があります。

実際に複数サーバーで実行したり、似たような処理を繰り返したりする場合は、ログを元にマクロを作成したほうが確実です。


実運用でのマクロ構成

実際の運用では、マクロを次のように分けると管理しやすくなります。

接続マクロ  
+  
処理マクロ

役割は次の通りです。

マクロ役割
接続マクロSSH接続・ログ取得
処理マクロ設定処理

この構造にすることで、以下が可能になります。

  • 接続処理の共通化
  • 処理マクロの再利用

複雑な処理はシェルスクリプトにする

TeraTermマクロは便利ですが、処理が複雑になると読みにくくなります。

例えば、以下をTeratermマクロで書いてしまうと、読みにくくなる場合があります。

  • 条件分岐
  • ループ処理
  • ファイル操作

このような場合は Linux側でシェルスクリプトを作る方が管理しやすくなります。

構成は次のようになります。

TeraTerm  
↓  
SSH接続  
↓  
シェルスクリプト実行

マクロ側は次のようにシンプルになります。

sendln '/root/setup.sh'

この方法を使うと、マクロの管理が簡単になります。


まとめ

TeraTermマクロ(TTL)は、ターミナル操作を自動化するためのシンプルなスクリプトです。

基本的なコマンドは次の4つです。

  • connect
  • sendln
  • wait
  • logopen

これらを組み合わせることで、SSH操作を自動化できます。


次回

次の記事では、TeraTermマクロでSSH接続を自動化する方法を解説します。

実際に使用している接続マクロを例に、

  • 引数を使ったマクロ設計
  • 接続処理の共通化

など、実運用で使えるマクロの作り方を紹介します。


このシリーズ

https://infratechnote.com/teraterm-macro/

次の記事

前の記事

https://infratechnote.com/teraterm-linux-multi-server-automation/