雖然是一個簡單的問題,但我已經搜尋了幾天沒有成功。
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.
答案1
問題在於,當它應該使用 J 的金鑰時,它卻試圖使用我的金鑰 (M) 在 S 中進行身份驗證。我無法指定與 IdentityFile 一起使用的金鑰,因為它位於 J 上而不是我的電腦上。
好吧,那是你的問題。在此設定中,與跳轉主機和最終目的地的連線直接從您的用戶端啟動。您的客戶端必須擁有兩個系統的正確密鑰。
代理命令中的命令ssh jump -W %h:%p
啟動到跳轉主機的 ssh 會話,但不建立 shell,它只是建立直接到目標主機的隧道。然後你的客戶端透過 ssh 連接到隧道。在這種類型的設定中,跳轉主機上啟動的 shell 絕不會允許您存取儲存在該中間主機上的任何金鑰。亂搞轉發沒有任何作用。不使用轉發來啟動連線。
答案2
您不登入防火牆,那是限制資料包的網路設備。在這種情況下基本上是看不見的。它必須配置為允許您的封包到達您的堡壘主機(jumphost)伺服器,該伺服器是連接埠 22 輸入,可能是高範圍連接埠輸出。
您直接登入伺服器,因此需要對其進行配置以允許這樣做。從同一網路上的另一台機器進行測試。從這個堡壘主機,您可以登入您的私人子網路中受其保護的電腦。
根據進一步資訊更新 您不需要目標伺服器中的堡壘/跳轉主機金鑰,您需要您的金鑰。嘗試存取伺服器的不是堡壘,而是用戶,即您。
退後一步。確保您可以使用您的金鑰從同一子網路中的另一台伺服器透過 ssh 存取目標伺服器。然後從堡壘主機嘗試。