無密碼 ssh 隧道
我有我的本地機器(mac),我想訪問伺服器 B(linux)。伺服器 B 需要通過伺服器 A (linux) 訪問。我通過修改本地機器中的 .ssh/config 文件來設置隧道,如下所示:
Host serverB HostName serverB.com User Ant ProxyCommand ssh -q -Y serverA.com -W %h:%p
這曾經正常工作
$$ 0 $$. 接下來,我使用 ssh 密鑰設置從本地到 serverA 和從 serverA 到 serverB 的無密碼登錄。這意味著我可以做到
> ssh Ant@serverA.com (serverA)> ssh Ant@serverB.com (serverB)>
一切正常。現在我想要的是能夠在沒有密碼的情況下連接到伺服器 B;但如果我這樣做
> ssh Ant@severB.com
我被要求輸入伺服器 A 和 B 的密碼以繼續執行。這是的輸出
ssh -v Ant@serverB
:OpenSSH_7.6p1, LibreSSL 2.6.2 debug1: Reading configuration data /Users/Ant/.ssh/config debug1: /Users/Ant/.ssh/config line 16: Applying options for serverB debug1: Reading configuration data /etc/ssh/ssh_config debug1: /etc/ssh/ssh_config line 48: Applying options for * debug1: Executing proxy command: exec ssh -q -Y serverA.com -W serverB.com:22 debug1: identity file /Users/Ant/.ssh/id_rsa type 0 debug1: key_load_public: No such file or directory debug1: identity file /Users/Ant/.ssh/id_rsa-cert type -1 debug1: key_load_public: No such file or directory debug1: identity file /Users/Ant/.ssh/id_dsa type -1 debug1: key_load_public: No such file or directory debug1: identity file /Users/Ant/.ssh/id_dsa-cert type -1 debug1: key_load_public: No such file or directory debug1: identity file /Users/Ant/.ssh/id_ecdsa type -1 debug1: key_load_public: No such file or directory debug1: identity file /Users/Ant/.ssh/id_ecdsa-cert type -1 debug1: key_load_public: No such file or directory debug1: identity file /Users/Ant/.ssh/id_ed25519 type -1 debug1: key_load_public: No such file or directory debug1: identity file /Users/Ant/.ssh/id_ed25519-cert type -1 debug1: Local version string SSH-2.0-OpenSSH_7.6 debug1: permanently_drop_suid: 501 Ant@serverA.com's password:
我可以看到它正在嘗試使用密鑰登錄,但是出了點問題。我還要補充一點,我的 RSA 密鑰保存在一個非標準位置,所以我將它添加到我的 .ssh/config 文件中:
IdentityFile ~/.ssh/key_serverA
有什麼想法嗎?
$$ 0 $$:由於某種原因,這不再起作用,因為使用者名錯誤。它提示我在 local_username@serverA.com 而不是 Ant@serverA.com 上輸入密碼
部分中的
User
選項Host
僅適用於與該主機匹配的連接,不一定適用於為代理等啟動的任何命令,將獨立應用 ssh 配置設置。所以
ProxyCommand
應該明確地有Ant@serverA
,或者應該有另一個匹配的Host
塊,為它設置。serverA``User Ant
該解決方案是由問題的作者提出的:
我找到了解決方案。問題是,由於某種原因,ssh 嘗試使用 local_username 而不是 Ant(serverA 和 serverB 上的使用者名)訪問 serverA。為了解決這個問題,我通過顯式添加我的使用者名修改了 config tunnel 命令:
Host serverB HostName serverB.com User Ant ProxyCommand ssh -q -Y Ant@serverA.com -W %h:%p
這解決了問題,現在無密碼登錄也適用於 serverB!:-)