ジャンプホスト: マルチホップ SSH
3 つの VM ラボを構築し、Mac から 2 つの SSH ジャンプ ホストを介してターゲットに接続します。
実行前の確認
プライベート テスト環境を使用します。サンプルの IP アドレスを実際の VM アドレスに置き換えます。各 SSH ホスト キーを信頼する前に、Multipass を通じて検証してください。 ProxyJump は Mac からの各ホップを認証します。ジャンプ ホストに秘密キーは必要ありません。ジャンプ ホストは TCP 転送を許可する必要があり、各ホップが次のホップに到達できる必要があります。ファイアウォール ルールを変更する前に、回復セッションを利用できるようにしてください。
使用例
Multipass をインストールし、3 つの Ubuntu VM を作成し、実際の IP アドレスを記録します。
brew install --cask multipass
multipass launch --name jump1
multipass launch --name jump2
multipass launch --name target
multipass listMac 上で専用のキーを作成します。パスフレーズを選択し、既存のキーを上書きしないでください。
ssh-keygen -t ed25519 -f ~/.ssh/securepipes_lab_ed25519公開キーのみを各 VM にコピーします。これらのコマンドは、各 Ubuntu ホーム ディレクトリに一時ファイル securepipes-lab.pub を作成します。実行する前に、それがまだ存在しないことを確認してください。
for vm in jump1 jump2 target; do
multipass exec "$vm" -- test ! -e /home/ubuntu/securepipes-lab.pub || break
multipass transfer ~/.ssh/securepipes_lab_ed25519.pub "${vm}:/home/ubuntu/securepipes-lab.pub" || break
multipass exec "$vm" -- sh -c 'umask 077; mkdir -p "$HOME/.ssh"; chmod 700 "$HOME/.ssh"; cat "$HOME/securepipes-lab.pub" >> "$HOME/.ssh/authorized_keys" && chmod 600 "$HOME/.ssh/authorized_keys" && rm "$HOME/securepipes-lab.pub"' || break
done公開キーのフィンガープリントをインストールされているキーと比較します。 authorized_keys ファイルには他のキーも含まれる場合があります。
ssh-keygen -lf ~/.ssh/securepipes_lab_ed25519.pub
multipass exec jump1 -- ssh-keygen -lf /home/ubuntu/.ssh/authorized_keys
multipass exec jump2 -- ssh-keygen -lf /home/ubuntu/.ssh/authorized_keys
multipass exec target -- ssh-keygen -lf /home/ubuntu/.ssh/authorized_keysマルチパスを通じて各サーバーのホスト キーのフィンガープリントを取得します。新しいホスト キーを受け入れる前に、SSH によって表示されるフィンガープリントと比較します。
multipass exec jump1 -- sudo ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub
multipass exec jump2 -- sudo ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub
multipass exec target -- sudo ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub実際の VM IP を使用して、これらのエントリを Mac の ~/.ssh/config に追加します。既存のエントリを保持します。これらを、一致する Host * デフォルトの前に配置します。別のキー パスを選択した場合は、IdentityFile を調整します。
Host jump1
HostName 192.168.252.2
User ubuntu
IdentityFile ~/.ssh/securepipes_lab_ed25519
IdentitiesOnly yes
Host jump2
HostName 192.168.252.3
User ubuntu
IdentityFile ~/.ssh/securepipes_lab_ed25519
IdentitiesOnly yes
Host target
HostName 192.168.252.4
User ubuntu
IdentityFile ~/.ssh/securepipes_lab_ed25519
IdentitiesOnly yesまず直接アクセスをテストしてから、両方のジャンプ ホスト経由で接続します。ホスト キーは、指紋を検証した後にのみ受け入れてください。 Secure Pipes で、ターゲット接続用に同じ 2 つのジャンプ ホストを順番に設定します。
ssh jump1
ssh jump2
ssh target
ssh -J jump1,jump2 targetオプションの管理されたラボ テスト: ターゲットが Mac ソース IP を Jump2 と区別でき、既存の UFW ポリシーで SSH が許可されている場合にのみ、実際の Mac ソース IP を拒否する前に Jump2 を許可します。両方のプレースホルダーを置き換えます。この例に基づいて運用ファイアウォールを有効にしたり変更したりしないでください。コンソールへのアクセスを維持し、テスト後にルールを削除します。
# On the target VM, replace the placeholders first:
sudo ufw status numbered
sudo ufw insert 1 allow from <JUMP2_IP> to any port 22 proto tcp
sudo ufw insert 2 deny from <MAC_SOURCE_IP> to any port 22 proto tcpオプションのファイアウォール ルールの後は、直接 SSH は失敗しますが、ProxyJump は成功します。同じ実際の IP アドレスを使用する 2 つのルールを削除し、アクセスを再度確認します。
ssh target
ssh -J jump1,jump2 target
# On target, remove the lab rules:
sudo ufw delete deny from <MAC_SOURCE_IP> to any port 22 proto tcp
sudo ufw delete allow from <JUMP2_IP> to any port 22 proto tcp公式リファレンス
確認日:2026年10月27日