Ubuntu

無代理轉發的 SSH 跳轉主機

  • January 19, 2017

雖然是一個簡單的問題,但我已經搜尋了幾天沒有成功。

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:%pssh 會話啟動到您的跳轉主機,但不創建外殼,它只是創建直接到目標主機的隧道。然後您的客戶端對隧道進行 ssh。任何時候都不會在跳轉主機上啟動一個 shell,讓您在這種類型的設置中訪問儲存在該中間主機上的任何密鑰。亂搞轉發沒有任何作用。不使用轉發來啟動連接。

引用自:https://serverfault.com/questions/827361