ssh 隧道中斷以解鎖金鑰 - 尋找單一命令

ssh 隧道中斷以解鎖金鑰 - 尋找單一命令

我正在嘗試建立一個 ssh 隧道來存取只能透過另一台伺服器(B)存取的遠端伺服器(A)。我的本機電腦(L)上有一個金鑰可以到達中繼伺服器(B),中繼伺服器(B)上有另一個金鑰可以到達目標伺服器(A)。

[具有中繼伺服器(B)金鑰的本機電腦(L)] --> [具有目標伺服器(A)金鑰的中繼伺服器(B)] --> [目標伺服器(A)]

我的本機電腦上有一個 ~/.ssh/config 文件,如下所示:

Host relay.server(B)
    Hostname relay.server
    Port 22
    User me
    IdentityFile ~/.ssh/id_rsa

Host destination.server(A)
    Hostname destination.server
    Port 1122
    User me
    IdentityFile ~/.ssh/id_rsa

我可以笨拙地讓我的隧道與以下內容一起工作:

運行命令:ssh -N -L 1122:SERVER_PRIVATE_IP:22 relay.server(B)在我的本機電腦(L)上。這會提示我輸入密碼來解鎖第一個密鑰,然後似乎掛起它不會返回提示,使用該-f選項或以 結尾&會阻止我輸入密碼。但是,如果我^C在輸入密碼後執行此命令,然後輸入,ssh destination.server(A)我會收到提示,要求提供密碼以解鎖第二個金鑰,然後連接到目標伺服器(A)。

我正在尋找一個命令,它可以讓我從本地電腦(L)連接到目標伺服器(A),並提示我提供解鎖每個金鑰所需的密碼。或建議另一種組織方式,以便我可以透過中繼伺服器 (B) 從本機電腦 (L) 直接連接到目標伺服器 (A)。

答案1

簡短的回答是你需要

  • ProxyCommand用於nc連接透過
  • ForwardAgent傳遞密鑰
  • 確保您的公鑰是.ssh/authorized_keys所有伺服器上的一部分
Host relay
    Hostname        relay.server.fqdn.or.IP
    User            me
    IdentityFile    ~/.ssh/id_rsa
    ForwardAgent    yes

Host destination
    Hostname        destination.server.fqdn.or.IP
    User            me
    IdentityFile    ~/.ssh/id_rsa
    ProxyCommand    ssh -q relay "nc %h %p"
    ForwardAgent    yes

較長的部分。

每當使用該封裝時,ssh 配置中的選項ProxyCommand就會執行命令。Host它通常與ncnmap.org(也稱為 nmap.org)一起使用,ncat並且有許多選項。

在上面的Host destinationssh 配置條目中,ProxyCommand設定為ssh -q relay "nc %h %p": ssh to要安靜地中繼並運行nc destination.server.fqdn.or.IP 22

nc在傳入的 ssh 和目標之間建立連線。

告訴ForwardAgent yesssh 將金鑰新增至 ssh-agent。 ssh 代理程式會追蹤金鑰並用於根據需要自動將正確的金鑰傳遞給主機。告訴ForwardAgent yes代理將密鑰傳遞給中繼上的另一個代理,然後再次傳遞到目的地。

.ssh/authorized_keys現在,為了使這一切發揮作用,您所經過的每台伺服器以及最終的目的地都必須在其文件中具有與您的私鑰 (id_rsa) 關聯的公鑰。當您建立私鑰 id_rsa 時,也應該建立公鑰 id_rsa.pub。

如果您沒有公鑰,您可以隨時透過私鑰取得它,ssh-keygen -y -f ~/.ssh/id_rsa以便輕鬆複製/貼上。請注意,公鑰有 2 或 3 個空格分隔的字段,但線。

因此,ssh relay編輯~/.ssh/authorized_keys(可能不存在,因此mkdir -p ~/.ssh可能是必要的)並將公鑰貼到新行(如果不存在,則貼到第一行)。

在中繼伺服器上時,檢查nc/bin 或 /usr/bin 中是否存在該檔案。如果沒有,那麼您需要使用套件管理器(yum 或 apt-get)來安裝它。

從中繼伺服器,ssh destination並對 進行相同的更新~/.ssh/authorized_keys

exit一直到您的本地計算機,您應該能夠ssh destination

答案2

較新的 OpenSSH 版本ProxyJump允許.ssh/config

Host relay
    Hostname        relay.server.fqdn.or.IP
    User            me
    IdentityFile    ~/.ssh/id_rsa
    ForwardAgent    yes

Host destination
    Hostname        destination.server.fqdn.or.IP
    ProxyJump       relay
    User            me
    IdentityFile    ~/.ssh/id_rsa

相關內容