今回は、SSH接続を劇的に高速化する方法をご紹介します。たった3行の設定を追加するだけで、接続時間を10分の1に短縮できます。しかも、2回目以降の接続では認証も自動的に行われるので、パスワードやパスフレーズの入力も不要になります。
要点
.ssh/config
ファイルのHost *
セクションに以下の3行を追加するだけです。
Host *
ControlMaster auto
ControlPath ~/.ssh/mux-%r@%h:%p
ControlPersist 4h
詳しい説明
1. ControlMaster auto
この設定で、1つのSSH接続で複数のセッションを共有できるようになります。新しくSSH接続を確立するたびに認証情報を入力し直す手間が省けて、接続がぐっと速くなります。具体的には:
- 初回の接続時のみ認証が必要
- 2回目以降は既存の接続を再利用するため、認証プロセスをスキップ
- パスワードやパスフレーズの入力が不要になり、接続がほぼ瞬時に完了
2. ControlPath ~/.ssh/mux-%r@%h:%p
ControlPathは、共有接続のソケットファイルの場所を指定します。%r
はリモートのユーザー名、%h
はホスト名、%p
はポート番号を表します。これで、異なるホストやユーザーごとに個別の共有接続を維持できます。
3. ControlPersist 4h
この設定があると、最後のセッションが終了した後も、指定した時間(ここでは4時間)バックグラウンドで接続を保持し続けます。その間の再接続なら、認証も接続もほぼ一瞬で完了します。
効果はこんな感じ
この設定を適用すると、2回目以降の接続が驚くほど速くなります。僕の環境では、最初の接続に500ミリ秒かかっていたのが、2回目以降はたったの50ミリ秒になりました。
さらに、認証の手間も省けるので、体感的な速さはもっと向上します。パスワードやパスフレーズを入力する時間を考えると、作業効率が格段に上がります。
特に効果を実感できるのは、こんな場合です:
- よくSSH接続する人
- 同時にたくさんのSSH接続を開く人
- ネットワークが不安定な環境でSSHを使う人
- 複雑なパスワードやパスフレーズを使っている人
ssh -O コマンド
ssh -O
コマンドを使えば、制御接続(ControlMaster接続)を操作できます。主なオプションはこんな感じ:
-
ssh -O check <ホスト名>
: 指定したホストへの制御接続があるか確認 -
ssh -O stop <ホスト名>
: 指定したホストへの制御接続を停止 -
ssh -O exit <ホスト名>
: 指定したホストへの制御接続を終了
これらのコマンドを使えば、長時間維持されている接続を手動で管理できます。例えば、セキュリティを重視する場合は、作業終了時にssh -O exit
で確実に接続を閉じることができます。