Ubuntu
無代理轉發的 SSH 跳轉主機
雖然是一個簡單的問題,但我已經搜尋了幾天沒有成功。
M = My machine J = Jump Host S = Server Jump Host has my public key on authorized_keys. Server has J's public key on authorized_keys. Allowed connections (due to key authentication): M -> J J -> S
我怎麼可能從我的機器 ssh 進入 S?
我目前的配置是:
host jump user root HostName x.x.x.x host server user root HostName x.x.x.x port 22 ForwardAgent no ProxyCommand ssh jump -W %h:%p
它不起作用,因為它嘗試使用 M 的密鑰登錄。
這是 ssh 日誌
debug1: Host 'x.x.x.x' is known and matches the ECDSA host key. debug1: Found key in /Users/xxxxx/.ssh/known_hosts:1542 ... debug1: Authentications that can continue: publickey debug1: Next authentication method: publickey debug1: Offering RSA public key: /Users/xxxxx/.ssh/id_rsa debug1: Authentications that can continue: publickey debug1: Trying private key: /Users/xxxxx/.ssh/id_dsa debug1: Trying private key: /Users/xxxxx/.ssh/id_ecdsa debug1: Trying private key: /Users/xxxxx/.ssh/id_ed25519 debug1: No more authentication methods to try. Permission denied (publickey). Killed by signal 1.
問題是它試圖使用我的密鑰(M)在 S 中進行身份驗證,而它應該使用 J 的密鑰。我無法指定與 IdentityFile 一起使用的密鑰,因為它在 J 上而不是在我的機器上。
那是你的問題。在此設置中,直接從您的客戶端啟動與跳轉主機和最終目的地的連接。您的客戶必須擁有兩個系統的正確密鑰。
代理命令中的
ssh jump -W %h:%p
ssh 會話啟動到您的跳轉主機,但不創建外殼,它只是創建直接到目標主機的隧道。然後您的客戶端對隧道進行 ssh。任何時候都不會在跳轉主機上啟動一個 shell,讓您在這種類型的設置中訪問儲存在該中間主機上的任何密鑰。亂搞轉發沒有任何作用。不使用轉發來啟動連接。