データセンター業務では時に数百台あるサーバの設定を一つ一つ確認しなければならないことがあります。
作業内容はコマンドを2~3個実行し、結果をまとめる単純な作業です。
この作業を効率化できないかと調査したところ、TeraTermマクロが浮上しました。
今回はTeraTermのマクロでどの程度効率化を図れるか検証してみたので、
興味がありましたらご確認ください。
目次
要件
今回は下記の内容で作業依頼があったと想定してマクロを作成していきます。
- 現在開いているポートの確認
- 25番ポートでListenしているプロセスの確認
- OSの確認
- 確認内容をまとめる
成果物
これから紹介するマクロを使用することで、コマンドの出力結果をファイルに記録することができます。
マクロの内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
; サーバのログイン情報を記述したファイルのパスを記載 LIST = "path\to\input.txt" LOG = "path\to\output.txt" ; ファイルの読み込み fileopen fhandle LIST 0 while 1 ; ファイルを1行ずつ読み込み変数lineに代入 filereadln fhandle line ; 最終行まで読み込んだらwhile文から離脱 if result = 1 then break endif ; 1行をカンマ区切り strsplit line "," ; 結果は変数groupmatchstrに代入される ip = groupmatchstr1 username = groupmatchstr2 password = groupmatchstr3 ; ssh接続 conn = ip strconcat conn ":22 /ssh /2 /nosecuritywarning /auth=password /user=" strconcat conn username strconcat conn " /passwd=" strconcat conn password connect conn ; 0は改行コードなどエスケープしない、次の1は追記を表す logopen LOG 0 1 pause 1 ; コマンド実行 sendln "nmap localhost | grep -e PORT -e open" wait "$" pause 1 sendln "cat /etc/redhat-release" wait "$" pause 1 sendln "sudo ss -nltp | grep :25" sendln password wait "$" pause 2 ; " "$13$10 は空白と改行コードを表す logwrite " "#13#10 logwrite "=========================================="#13#10 sendln "exit" logclose pause 1 endwhile fileclose fhandle |
マクロの詳細
これから実行するTeraTermマクロの構成についてご説明します。
より詳細な機能を知りたい方はTeraTermのTTLコマンドリファレンスをご確認ください。
https://teratermproject.github.io/manual/5/ja/macro/command/index.html
サーバのログイン情報を用意
テスト用のサーバを2つ用意し、それぞれのログイン情報を記述したinput.txtを作成します。
※サーバIPとユーザ名とパスワードをカンマ区切りで分割していますので、パスワードにはカンマを含まない文字列で設定しました。
1 2 |
192.168.0.10,alma-user,w56RyGY3Y9Tm(n9Z 192.168.0.20,fedora-user,LU-aaQ!7Ang-_ncB |
ファイルを開く
1 |
fileopen fhandle LIST 0 |
fileopenでinput.txtを開きます。
繰り返しと離脱
1 2 3 4 5 |
while 1 filereadln fhandle line if result = 1 then break endif |
whileとendwhile間のコマンドを繰り返します。
input.txtの内容を1行ずつ読み込み、読み終わったらwhileから離脱するようにしています。
SSH接続
1 2 3 4 5 6 7 8 9 10 11 12 |
strsplit line "," ip = groupmatchstr1 username = groupmatchstr2 password = groupmatchstr3 conn = ip strconcat conn ":22 /ssh /2 /nosecuritywarning /auth=password /user=" strconcat conn username strconcat conn " /passwd=" strconcat conn password connect conn |
読み込んだ内容をstrsplitでカンマ区切りにし、connectでSSH接続を行っています。
ログを開く
1 2 |
logopen LOG 0 1 pause 1 |
logopenの最後の1は追記を表しています。
1 |
の最後の1は追記を意味しています。 |
コマンド実行
1 2 3 4 5 6 7 8 9 10 |
sendln "nmap localhost | grep -e PORT -e open" wait "$" pause 1 sendln "cat /etc/redhat-release" wait "$" pause 1 sendln "sudo ss -nltp | grep :25" sendln password wait "$" pause 2 |
要件を満たすためのコマンドを実行しています。
ログに区切り線を挿入
1 2 3 4 5 |
logwrite " "#13#10 logwrite "=========================================="#13#10 sendln "exit" logclose pause 1 |
logwriteでログに文字を挿入できます。
” “#13#10は空白と改行を表しており、サーバとサーバの間に===を区切り線として挿入しています。
まとめ
まだ改善の余地はありますが、要件を満たすような作業は自動化できました。
数百台のサーバを調査するとなると数人で手分けして作業するとことになりますが、
マクロを用いれば時間も人手も削減できますし、コピペを間違える可能性もありません。
個人的な見解としては複雑な処理を行うのは難しそうだなと感じました。
また、見ての通りTeraTermの画面に表示されている文字をそのままファイルに出力しているので
出力結果を整形ができたら尚良かったという印象です。
以上、TeraTermマクロの紹介でした。
この記事を読んだ方はこちらも読まれています
カレンダー
- 6月 2025
- 4月 2025
- 3月 2025
- 2月 2025
- 1月 2025
- 12月 2024
- 11月 2024
- 10月 2024
- 9月 2024
- 8月 2024
- 7月 2024
- 6月 2024
- 5月 2024
- 4月 2024
- 3月 2024
- 2月 2024
- 12月 2023
- 11月 2023
- 10月 2023
- 9月 2023
- 8月 2023
- 7月 2023
- 6月 2023
- 5月 2023
- 4月 2023
- 3月 2023
- 2月 2023
- 1月 2023
- 12月 2022
- 11月 2022
- 10月 2022
- 9月 2022
- 8月 2022
- 7月 2022
- 6月 2022
- 5月 2022
- 4月 2022
- 3月 2022
- 12月 2021
- 11月 2021
- 10月 2021
- 9月 2021
- 8月 2021
- 7月 2021
- 6月 2021
- 5月 2021
- 4月 2021
- 3月 2021
- 2月 2021
- 1月 2021
- 12月 2020
- 11月 2020
- 8月 2020
- 6月 2020
- 5月 2020
- 4月 2020
- 3月 2020
- 2月 2020
- 1月 2020
- 12月 2019
- 11月 2019
- 10月 2019
- 9月 2019
- 8月 2019
- 7月 2019
- 6月 2019
- 5月 2019
- 4月 2019
- 3月 2019
- 2月 2019
- 1月 2019
- 12月 2018
- 11月 2018
- 10月 2018
- 9月 2018
- 8月 2018
- 7月 2018
- 6月 2018
- 5月 2018
- 4月 2018
- 3月 2018
- 2月 2018
- 1月 2018
- 12月 2017
- 11月 2017
- 10月 2017
- 9月 2017
- 8月 2017
- 7月 2017
- 6月 2017
- 5月 2017
- 4月 2017
- 2月 2017
- 1月 2017
- 12月 2016
- 11月 2016
- 8月 2016
- 7月 2016
- 6月 2016
- 5月 2016
- 4月 2016
- 3月 2016
- 2月 2016
- 1月 2016
- 12月 2015
- 11月 2015
- 10月 2015
- 9月 2015
- 5月 2015
- 4月 2015
- 3月 2015
- 2月 2015
- 1月 2015
- 12月 2014
- 11月 2014
- 10月 2014
- 9月 2014
- 8月 2014
- 7月 2014
- 6月 2014
- 5月 2014
- 4月 2014
- 2月 2014
- 1月 2014
- 12月 2013
- 11月 2013
- 10月 2013
- 9月 2013
- 8月 2013
- 7月 2013