Linux

無密碼 ssh 隧道

  • December 9, 2020

我有我的本地機器(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!:-)

引用自:https://unix.stackexchange.com/questions/422223