Linux

分層 ssh 連接 - 第二個 ssh 命令在錯誤目錄中查找密鑰

  • September 20, 2017

我登錄了一個名為 Walnut 的伺服器,我嘗試從該伺服器登錄到另一個名為 Hazelnut 的伺服器。

local machine (mac) ---ssh---> Walnut ---ssh---> Hazelnut

第一個 ssh(從我的本地機器到 Walnut)執行良好。

然而,第二個 ssh 命令給了我權限被拒絕。

當我這樣做時,這就是日誌所說的內容ssh -v -A Haezlnut

debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to Hazelnut [address] port [port].
debug1: Connection established.
debug1: identity file /home/username/.ssh/id_rsa type -1
debug1: identity file /home/username/.ssh/id_rsa-cert type -1
debug1: identity file /home/username/.ssh/id_dsa type -1
debug1: identity file /home/username/.ssh/id_dsa-cert type -1
debug1: identity file /home/username/.ssh/id_ecdsa type -1
debug1: identity file /home/username/.ssh/id_ecdsa-cert type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_6.7p1 Debian-5+deb8u2
debug1: match: OpenSSH_6.7p1 Debian-5+deb8u2 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.0p1 Debian-4+deb7u2
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-sha1 none
debug1: kex: client->server aes128-ctr hmac-sha1 none
debug1: sending SSH2_MSG_KEX_ECDH_INIT
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host key: [Host key]
debug1: Host 'Hazelnut' is known and matches the ECDSA host key.
debug1: Found key in /home/username/.ssh/known_hosts:1
debug1: ssh_ecdsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Trying private key: /home/username/.ssh/id_rsa
debug1: Trying private key: /home/username/.ssh/id_dsa
debug1: Trying private key: /home/username/.ssh/id_ecdsa
debug1: No more authentication methods to try.
Permission denied (publickey).

所以我認為日誌清楚地表明它最終無法找到密鑰文件。令人困惑的是,由於私鑰駐留在本地 mac 機器中,它應該在 中查找文件/Users/username/.ssh/,而不是/home/username/.ssh/. 第一個 ssh 命令(從本地到 Walnut)可以很好地執行此操作,但第二個命令(從 Walnut 到 Hazelnut)以某種方式將其搞砸了。

更令人困惑的是,完全相同的過程在許多其他看似相同的 mac 機器上執行得非常好。如果您嘗試使用任何其他 mac 機器從 Walnut SSH 進入 Hazelnut,它會嘗試在正確的 ( /Users/username/.ssh) 目錄中查找密鑰文件。

以前有人遇到過這個問題嗎?

你需要讓你的 ssh 代理在walnut你的 mac 上使用這個命令時可用:ssh -A walnut然後 ssh 到 hazelnut。

但是,這樣做被認為是一種不好的做法,因為它會將您的代理暴露給遠端機器。如果攻擊者使用核桃,他們可能會竊取您的私鑰。

或隧道到榛子。雖然有很多方法可以做到這一點……

使用-J選項 - 選項的快捷方式ProxyJump( openssh 版本 7.3+ 必需):

ssh -J <jumphost> <target>

在跳轉主機上使用 netcat 的 ProxyCommand 選項:

ssh -o ProxyCommand="ssh %h nc <target> 22" <jumphost>

或帶有 -W 選項的 ProxyCommand:

ssh -o ProxyCommand="ssh -W %h:%p <jumphost>" <target>

proxycommandorProxyJump配置指令也可以放在 ssh 配置文件中以獲得相同的效果

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