分層 ssh 連接 - 第二個 ssh 命令在錯誤目錄中查找密鑰
我登錄了一個名為 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>
proxycommand
orProxyJump
配置指令也可以放在 ssh 配置文件中以獲得相同的效果