使用金鑰的 ssh 內聯代理跳轉不起作用

使用金鑰的 ssh 內聯代理跳轉不起作用

我需要透過代理跳轉建立到遠端伺服器的連線。我正在嘗試使用 -J 標誌來做到這一點。據我了解,語法如下:

ssh -J A B

但我需要對兩個連接使用密鑰檔案。所以我嘗試過這個:

ssh -J -i /path/proxy.pem user@proxy_host -i /path/target.pem user@target_host

顯然它不起作用,我得到了

option requires an argument -- i
usage: ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]
           [-D [bind_address:]port] [-E log_file] [-e escape_char]
           [-F configfile] [-I pkcs11] [-i identity_file]
           [-J [user@]host[:port]] [-L address] [-l login_name] [-m mac_spec]
           [-O ctl_cmd] [-o option] [-p port] [-Q query_option] [-R address]
           [-S ctl_path] [-W host:port] [-w local_tun[:remote_tun]]
           [user@]hostname [command]
ssh_exchange_identification: Connection closed by remote host

在這種情況下,在不編輯 ssh 設定的情況下,正確的內聯語法是什麼?在這種情況下,密鑰儲存在哪個伺服器上沒有區別。

答案1

據我了解,語法如下:

ssh -J A B

是的,但這還不是故事的全部。-J不是一個獨立的標誌 - 它不會只是讓您在同一命令列中指定兩組獨立的連接選項,就像您嘗試做的那樣。

相反,該-J標誌採用中間主機的名稱作為參數,所以就像-i <keyfile>永遠在一起一樣,-J <proxy>也必須永遠在一起。

即使您使用此選項,整體「ssh」語法也不會改變 - 仍然沒有將哪些選項屬於主機 A 和哪些屬於主機 B 進行分組。兩個都進行兩個連接時的按鍵。

然而,後一部分應該不是問題,因為每個伺服器只會表明它不接受該金鑰,並且 SSH 將嘗試另一個。所以以下應該有效:

ssh -J user@proxy_host -i /path/proxy.pem -i /path/target.pem user@target_host
    └────────────────┘ └────────────────┘ └─────────────────┘

但是,如果其中一台主機不喜歡嘗試多個金鑰的事實,則需要將 -J 轉換為長格式的 ProxyCommand:

ssh -o ProxyCommand="ssh -i /path/proxy.pem -W %h:%p user@proxy_host" -i /path/target.pem user@target_host

相關內容