概要
Linuxサーバーを複数台運用していると、同じ設定を複数のサーバーに適用する作業が頻繁に発生します。 例えば次のような作業です。
- ユーザー設定
- SSH鍵の配布
- 設定ファイルの変更
- パッケージインストール
- ログ収集
サーバーが数台であれば手作業でも問題ありませんが、台数が増えると現実的ではなくなります。 この記事では、設定作業を簡単に自動化する方法として、TeraTermマクロ(TTL)を使って複数Linuxサーバーの構築設定を自動化した方法を紹介します。
この記事では次の内容を整理します。
- 設定作業の自動化の必要性
- Linuxサーバーの設定作業自動化の手段としてのTeratermの有効性
- Teratermによる自動化の概要
手作業での構築作業の問題
手作業で設定を行う場合、一般的な手順は次のようになります。
1. SSHでログイン
2. 設定コマンドを実行
3. 結果を確認
4. 次のサーバーへ
設定対象が複数台ある場合は、これをサーバー台数分繰り返すことになります。 つまり、例えば20台の場合は、同じ作業を20回繰り返すことになります。
この方法には次の問題があります。
- 作業時間が長い
- 人的ミスが発生しやすい
- 作業証跡を残しにくい
このような理由から、構築作業は自動化する方が安全で確実です。
構築作業の自動化
Linuxサーバーの構築作業を自動化する方法はいくつかあります。 代表的なものとしては次のような方法があります。
- Ansible
- Shellスクリプト
- Expect
- TeraTermマクロ
今回は TeraTermマクロ(TTL) を利用しました。
TeraTermマクロを使った理由
今回TeraTermマクロを採用した理由は次の通りです。
- Windows端末から実行できる
- SSH接続に対応している
- ログ取得が簡単
- 追加ツールのインストールが不要
運用端末がWindowsの場合、TeraTermマクロは非常に手軽に使える自動化手段です。 会社のWindows端末の場合は、新規ツールを好き勝手にインストールできないことも多いので、既存の基本的なツールだけで自動化ができたほうが望ましいことが多いです。
自動化の仕組み
今回の構成は次のようになっています。
Windows端末
↓
TeraTermマクロ
↓
SSH接続
↓
Linuxサーバー
マクロの構造は次の2つに分けています。
接続マクロ
+
処理マクロ
役割は次の通りです。
- 接続マクロ:SSH接続とログ取得、処理マクロの起動
- 処理マクロ:実際の設定処理
この構造にすることで、接続処理を共通化できます。
接続用マクロ
接続処理は次のマクロで行います。
| ファイル名 | exec_ttmacro.ttl |
コードの一部を紹介します。
TTLNAME=param2
HOSTADDR=param3
USERNAME=param4
PASSWORD=param5
LOGNAME=param6
このマクロでは、引数として次の情報を受け取ります。
TTLマクロの場合、第1引数はマクロ自身のパスが格納されるため、実際に引数として使用できるのはparam2以降です。
※param1からparam9はTTLマクロでは引数を示す定数です。
| 引数 | 内容 |
| param1 | 実行されたマクロ自身のパス |
| param2 | 処理後に実行するTTLファイルのパス |
| param3 | 接続先IP |
| param4 | 接続ユーザー |
| param5 | 接続ユーザーのパスワード |
| param6 | 出力するログファイルのパス |
SSH接続処理
SSH接続は次のコードで行います。
msg=HOSTADDR
strconcat msg ':22 /ssh /auth=password /user='
strconcat msg USERNAME
strconcat msg ' /passwd='
strconcat msg PASSWORD
connect msg
このコードでは、SSH接続用の文字列を組み立てて connect コマンドで接続しています。
ログ取得
ログ取得は次のコマンドで行います。
logopen LOGNAME 0 1 1 0
ログを取得することで次のメリットがあります。
- 作業証跡を残せる
- エラーの確認ができる
- トラブルシュートが容易になる
構築や設定変更の作業ではログ取得は非常に重要です。
実際の設定処理
接続後は、別のTTLマクロで設定処理を実行します。
例えば次のような処理です。
- SSH鍵設定
- ディレクトリ作成
- パーミッション変更
この処理マクロを include することで実行します。
実行方法
マクロは次のように実行します。
exec_ttmacro.ttl setting.ttl 192.168.1.10 root password log1.txt
このコマンドをサーバーリスト分実行することで、複数サーバーに対して同じ設定を適用できます。
自動化の効果
手作業の場合、1台5分くらいだとしても、20台あれば100分かかります。 また、手作業でミスをしている可能性もあるので、もう一度、設定を確認したほうが良いかもしれません。 自動化した場合、1台あたりは30秒もかからず、設定後の確認も実行する処理に入れておけば、出力されたログを20台分確認するだけです。
処理にもよりますが、1台分の設定が10秒、ログファイルの確認が30秒とすると、20台実施しても15分もかかりません。 結果として作業時間は短縮され、精度も上がります。 証跡も残っているので、後から確認もできますし、再実行もすぐにできます。
まとめ
サーバー台数が増えてくると、同じ作業を繰り返す運用が増えてきます。 このような作業は人間が手作業で行うよりも、スクリプトで自動化する方が安全で効率的です。 TeraTermマクロを使えば、Windows環境でも簡単にSSH操作を自動化できます。
このシリーズ
次の記事