跳轉主機:多跳 SSH
建造一個三虛擬機器實驗室,並透過 Mac 上的兩個 SSH 跳轉主機連接到目標。
執行前須知
使用私有測試環境。將範例 IP 位址替換為實際 VM 位址。在信任每個 SSH 主機金鑰之前,請透過 Multipass 驗證它。 ProxyJump 驗證來自 Mac 的每一跳;它不需要跳轉主機上的私鑰。跳轉主機必須允許 TCP 轉發,且每一跳必須能夠到達下一跳。在更改防火牆規則之前保持恢復會話可用。
使用範例
安裝Multipass,建立三個Ubuntu VM,並記錄它們的實際IP位址。
brew install --cask multipass
multipass launch --name jump1
multipass launch --name jump2
multipass launch --name target
multipass list在 Mac 上建立專用密鑰。選擇一個密碼並且不要覆蓋現有密鑰。
ssh-keygen -t ed25519 -f ~/.ssh/securepipes_lab_ed25519僅將公鑰複製到每個虛擬機器。這些命令在每個 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透過Multipass取得每個伺服器主機金鑰指紋。在接受新的主機金鑰之前,請將其與 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中,為目標連線配置相同的兩個跳轉主機。
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位址的兩個規則,然後再次驗證存取。
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 日