導入: SSH接続の「待ち時間」を解消する
リモートサーバーで作業をする際、新しいターミナルを開くたびにパスワード入力や二要素認証を求められ、「またか…」とストレスを感じたことはありませんか?特にAnsibleによる構成管理や、頻繁にサーバー間を行き来する環境では、この認証プロセスが積もり積もって大きな時間的ロスになります。今回紹介する「SSH Multiplexing(ControlMaster)」は、一度確立した接続を再利用することで、2回目以降のSSH接続を瞬時に完了させるテクニックです。
基礎知識: ControlMasterとは?
SSH Multiplexingは、最初のSSH接続で確立されたTCPコネクションを「マスター」として維持し、後続の接続をそのコネクション経由でトンネルさせる仕組みです。通常、SSH接続ごとに暗号化アルゴリズムのネゴシエーションや認証処理(ハンドシェイク)が発生しますが、この技術を使えばそれらをスキップできるため、接続が「爆速」になります。
実装/解決策: 設定方法
設定は非常に簡単です。ユーザーのホームディレクトリにある ~/.ssh/config ファイルに設定を記述するだけです。以下の設定を行うことで、接続情報がローカルのソケットファイルに保存され、再利用されるようになります。
サンプルプログラム: ~/.ssh/configへの追記例
以下の設定をコピーし、~/.ssh/config に貼り付けてください。
すべてのホストに対してMultiplexingを有効化する
Host
# 接続情報を保持するソケットファイルのパス(%r:ユーザ名, %h:ホスト名, %p:ポート番号)
ControlPath ~/.ssh/sockets/%r@%h-%p
# マスター接続を自動的に作成し、既存の接続があれば再利用する
ControlMaster auto
# マスター接続がアイドル状態のとき、何秒間維持するか(10分に設定)
ControlPersist 600
※設定前にソケット保存用のディレクトリを作成してください。
$ mkdir -p ~/.ssh/sockets
応用・注意点: 現場で役立つ運用Tips
1. 接続の終了方法
マスター接続が生きている間はプロセスが残り続けます。明示的に切断したい場合は、以下のコマンドを実行してください。
$ ssh -O exit ホスト名
2. セキュリティへの配慮
ControlPathに指定したディレクトリ(~/.ssh/sockets)には、他のユーザーがアクセスできないよう権限(chmod 700)を厳格に管理してください。また、共有サーバー等で利用する場合は、接続情報が漏洩しないよう細心の注意を払う必要があります。
3. 陥りやすい罠
ControlPersistを非常に長い時間(例: 数日)に設定すると、サーバー側のSSH設定(ClientAliveIntervalなど)によって強制切断された際に、ローカル側で「接続中」と誤認されることがあります。基本的には数分〜数時間の運用が推奨されます。
この設定一つで、日々の運用効率は格段に上がります。ぜひ導入して、快適なターミナルライフを手に入れてください!

コメント