Tera Termのマクロ機能を使ってSSHSSH [エスエスエイチ]Secure Shell。暗号化されたリモート接続プロトコルの自動ログインを行いたいけれど、マクロファイルのソースコードにパスワードをそのまま(平文で)書き込むのはセキュリティ上不安、と感じていませんか?
「業務効率化のために自動化したいけれど、万が一マクロファイルが流出したときのことを考えると怖い」「平文パスワードをソースに残さない方法が知りたい」といったお悩みを抱えている方は多いでしょう。
この記事を読むことで、Tera Termの標準機能である getpassword コマンドを使ったパスワード暗号化ファイルの仕組みを理解し、平文パスワードをマクロソースに記述せずにSSH自動ログインを行うマクロを作成できるようになります。
確認した環境
本記事の手順およびサンプルコードは、以下の環境で動作を確認しています。
- OSOS [オーエス]Operating System。基本ソフトウェア: Windows 11 (64bit)
- ターミナルエミュレータ: Tera Term (バージョン 5.3)
※本記事ではTera Term 5.3で検証しています。Tera Termのバージョン(例えば最新の5.7.0など)によって利用できるマクロコマンドや仕様が異なる場合があります。特に
getpassword2は5.3以降の機能です。
TeraTermマクロのパスワード管理と暗号化の必要性
Tera Termのマクロによる自動ログインは日々の運用を効率化する非常に便利な機能ですが、実装方法を誤ると重大なセキュリティリスクを招くことになります。ここでは、パスワード管理における危険性と、それを回避するための仕組みについて解説します。
平文パスワードをマクロに直書きする危険性
従来の基本的な自動ログインマクロでは、以下のように connect コマンドや sendln コマンドにパスワードをそのまま文字列として記述していました。
; 危険な記述例(平文)username = "root"password = "MySecretPassword123"connect '192.168.1.10:22 /ssh /2 /auth=password /user=' + username + ' /passwd=' + passwordこの方法には、以下のようなセキュリティリスクが存在します。
- ファイル流出時のリスク: マクロファイル(
.ttl)がPCの紛失や誤送信、共有フォルダの設定ミスなどによって第三者の目に触れた場合、パスワードがそのまま漏洩します。 - 暗号化しても残るセキュリティリスク:
.ttlファイルを閲覧できるだけではパスワードそのものを直接確認できないように対策できます。ただし、暗号化ファイルへのアクセス権や、実行中のPCへの不正アクセスなど、別の経路による漏洩リスクは残る点に注意が必要です。
このような平文パスワードをマクロに記述するリスクを低減する方法の一つとして、パスワードを暗号化してファイルに保存し、マクロ実行時に読み出す方法があります。
getpasswordコマンドによるパスワード暗号化の仕組み
Tera Termのマクロ(TTL)には、パスワードを暗号化してファイルに保存し、次回以降はそこから安全に読み出すことができる getpassword コマンドが用意されています。
このコマンドを使用すると、パスワードファイルが存在しない場合や、指定したパスワード識別子が保存されていない場合にパスワード入力用のダイアログが表示され、入力した内容が専用のファイル(例: password.dat)に暗号化されて保存されます。保存済みの場合は暗号化ファイルから自動的に復号されて変数に格納されるため、マクロのソースコード上に平文のパスワードを一切記述せずに自動ログインを実現できます。
TeraTermマクロでパスワード暗号化を設定する手順
それでは実際に、getpassword コマンドを使って平文パスワードをソースに残さない自動ログインマクロを作成する手順を解説します。
1. getpasswordコマンドを記述する
実際の自動ログインマクロ内で getpassword コマンドを使用し、暗号化ファイル名とパスワードの識別子を指定します。
; パスワード暗号化保存用のファイル名PASSFILE = 'password.dat'; 保存するパスワードの識別子(ユーザー名など)PASSKEY = 'ec2-user'
; パスワードを取得(初回はダイアログ表示、2回目以降はファイルから自動読み込み)getpassword PASSFILE PASSKEY PASS
; パスワードの保存に失敗した場合のエラーハンドリングif result = 0 then messagebox 'パスワードファイルへの保存に失敗しました。' 'エラー' endendifこの記述により、実行時に PASS 変数にパスワードが格納されます。ソースコードに平文パスワードを書く必要はありません。
2. SSH接続コマンドと組み合わせる
次に、取得したパスワード変数を使ってSSH接続コマンドを組み立てます。変数と文字列を連結(strconcat)して、最終的な接続コマンドを作成します。
【実践】パスワード暗号化を組み込んだTeraTermマクロのサンプルコード
これまでの手順をまとめた、平文パスワードをソースに記述しないSSH自動ログインマクロの完全なサンプルコードを提示します。社内の環境に合わせてホスト名やユーザー名などを書き換えて使用してください。
; ==================================================; Tera Term 暗号化自動ログインマクロ; ==================================================
; 接続設定の変数定義HOST = '192.168.1.50:22'USER = 'ec2-user'; パスワードを保存する暗号化ファイルPASSFILE = 'password.dat'
; ==================================================; 1. パスワードの取得(暗号化ファイルから読み込み); 初回実行時やファイルがない場合は入力ダイアログが表示されます; ==================================================getpassword PASSFILE USER PASSif result = 0 then messagebox 'パスワードファイルへの保存に失敗しました。' 'エラー' endendif
; ==================================================; 2. SSH接続コマンドの構築と実行; ==================================================COMMAND = HOSTstrconcat COMMAND ' /ssh /2 /auth=password /user='strconcat COMMAND USERstrconcat COMMAND ' /passwd='strconcat COMMAND PASS
; Tera Termで接続connect COMMAND
; ==================================================; 3. 接続後の処理(必要に応じて追加); ==================================================; wait '$'; sendln 'uptime'
endこのマクロを実行することで、ソースコードに平文パスワードを書くことなく、SSHサーバーへ自動ログインすることができます。
パスワード暗号化マクロ運用時の注意点とトラブルシューティング
自動ログインマクロをより適切に運用するために、知っておくべき注意点と、よくあるトラブルの対処法を解説します。
暗号化ファイルの有効範囲とアクセス管理
getpassword コマンドを使用すると、パスワードを暗号化してパスワードファイルに保存できます。
ただし、暗号化ファイル自体のアクセス管理は自動的には行われません。パスワードファイルを第三者が取得できないよう、保管場所やファイルのアクセス権にも注意が必要です。具体的には、共有フォルダに置かない、GitGit [ギット]ソースコードの変更履歴を管理する分散型バージョン管理システムなどのリポジトリにコミットしない、などの対策が重要です。また、マクロ内で password.dat のように相対パスを指定した場合は、実行環境のカレントディレクトリを基準にファイルが作成されるため、必要に応じて絶対パスを使用するなど保存場所を明確に管理するとよいでしょう。
Tera Term 5.3以降の getpassword2 コマンド
Tera Term 5.3以降では、AES-256-CTRCTR [シーティーアール]Click Through Rate。クリック率。広告やリンクが表示された回数に対してクリックされた割合を使用してパスワードを暗号化する getpassword2 / setpassword2 コマンドが追加されています。
getpassword2 では暗号化に使用する文字列を指定できるため、従来の getpassword とは異なる保護方法を利用できます。ただし、暗号化に使用する文字列自体をマクロに平文で記述する場合は、マクロファイルと暗号化されたパスワードファイルの両方を第三者に取得されると、パスワードを復号される可能性があります。そのため、暗号化に使用する文字列も適切に管理する必要があります。
接続エラー時の確認ポイント
暗号化マクロを実行した際に接続エラーや認証失敗が発生する場合は、以下のポイントを確認してください。
- パスワードの入力ミス: 初回ダイアログでパスワードを間違えて入力した可能性があります。その場合は、生成された暗号化ファイル(例:
password.dat)を削除するか、delpassword 'password.dat' 'ec2-user'のように特定の識別子だけを削除するマクロを実行してから再入力してください。 - ログインパスワードの変更: 接続先サーバー側でログインパスワードを変更した場合は、古い暗号化パスワードを削除または
delpasswordで削除してから、新しいパスワードを登録します。 - 認証方式の不一致: サーバー側でパスワード認証が無効化されていないか、SSHの設定(
/auth=passwordなど)が正しいかを確認します。
まとめ
本記事では、Tera Termマクロで平文パスワードをソースに記述せずにSSH自動ログインを行うための手法について解説しました。
- ソースコードへの平文パスワードの直書きは、ファイル流出時のセキュリティリスクが大きいため避けるべきです。
getpasswordコマンドを使用することで、マクロ内に平文を記述せず、別ファイルに暗号化して保存・運用できます。- 初回実行時や、指定したパスワードが暗号化ファイルに保存されていない場合にダイアログでパスワードを入力し、保存済みの場合は暗号化ファイルから自動的に読み込まれるため、日々の運用も非常にスムーズです。
- Tera Term 5.3以降をお使いの場合は、AES-256-CTRを利用できる
getpassword2コマンドの利用も検討してください。
パスワードファイルの適切なアクセス管理などを徹底し、効率的なインフラ管理を実現しましょう。
以上で本記事の解説を終わります。
よいITライフを!
人気記事
- 1
- 2
- 3
- 4
- 5
思考の整理というテーマを、実務ですぐに使える具体的な「技術」として落とし込んだ一冊です。