ProxyJump

#ssh #network

OpenSSH 7.3で追加された、踏み台(bastion/jump host)を経由してSSH接続する機能。ssh -Jオプション、または~/.ssh/configProxyJumpディレクティブで指定する。

ssh -J jump.example.com target.internal

仕組み

クライアントはまずジャンプホストへSSH接続し、そのトンネルを通してターゲットホストへの接続を確立する。ジャンプホスト自体は中継のみを行い、SSHセッションはクライアント〜ターゲット間でエンドツーエンドの暗号化が保たれる(ターゲット側からは「バスチョン経由で接続が来た」ように見えるが、通信内容自体はバスチョンを素通りする)。

これはssh-agentssh -AによるAgent Forwardingとの重要な違いでもある。Agent Forwardingはリモートホストにagentソケット自体を転送するため、リモートホストの管理者に秘密鍵の署名機能を悪用されるリスクがあるが、ProxyJumpではローカルのsshクライアントが複数ホップ分の認証を行うだけで、agentソケットをリモートに晒さずに済む。

ProxyCommandとの関係

ProxyJumpが導入される以前は、ProxyCommandを使って同様のことを実現していた。

ssh -o ProxyCommand="ssh -W %h:%p jump.example.com" target.internal

ProxyCommandは任意のコマンドを実行してターゲットへの接続を開くための汎用的な仕組みで、上記のようにssh -W(stdioをリモートホストへの単一接続に転送するオプション)と組み合わせることで踏み台越しの接続を実現していた。ProxyJumpは内部的にこの仕組みを使いつつ、より短く分かりやすい専用構文として提供されている。

~/.ssh/configでの設定

Host jump
    HostName jump.example.com
    User alice

Host target
    HostName target.internal
    User alice
    ProxyJump jump

複数ホップ

カンマ区切りで複数のジャンプホストを指定でき、左から右へ順にホップしていく。

ssh -J jump1.example.com,jump2.example.com target.internal

出典

作成日時: 2026-08-14 12:28 / 更新日時: 2026-08-14 12:28