Ssh

如何通過 ssh 連接到我無法直接訪問的伺服器?

  • February 22, 2018

語境

我將 Ubuntu Desktop 作為我的主要機器執行,我將其稱為 D。我想通過 ssh 連接到伺服器 S,但防火牆阻止了我。

我可以通過非常繁瑣的路徑訪問伺服器 S,其中涉及 Windows 虛擬機和PuTTY。這使得使用此伺服器非常煩人:完全不同的環境,複製/粘貼不起作用,連接到桌面時我無法正確使用桌面(Alt-Tab 被虛擬機破壞)等

我已經驗證我可以從伺服器 S SSH 到我的台式機 D(與我需要的相反)。

我可以從伺服器以某種方式啟動“埠轉發”或類似的東西,以便我可以從我的桌面 ssh 到伺服器嗎?

您可以使用以下命令設置從遠端伺服器到本地電腦的 SSH 隧道:

$ ssh -f -N -R 1234:localhost:22 user@your_machine_ip

設置隧道後,您可以使用以下命令簡單地 ssh 到遠端伺服器:

$ ssh -p 1234 user@localhost

請注意,您需要為自動登錄設置 ssh 密鑰(無密碼提示)。如果您想以互動方式創建 SSH 隧道,您可以刪除 options -f -N。欲了解更多資訊,man ssh.

如果您正在執行較新版本的 OpenSSH(7.3+),那麼您可以使用ProxyJump它神奇地將所有東西烘烤在一起:

ssh -J windows_machine remote_server

~/.ssh/config看起來像:

Host remote_server
       HostName remote_server
       ProxyJump windows_machine
       User myname

ProxyJump支持完整的 SSH 語法,所以如果你jim打開windows_server並且它使用 ssh 的埠2222remote_server是在 IP192.168.0.110從那windows_server你可以寫:

Host remote_server
       HostName 192.168.0.110
       ProxyJump jim@windows_machine:2222
       User myname

仍然只是跑到ssh remote_server那裡。


如果您正在執行舊版本的 SSH,請使用ProxyCommand - 這允許您告訴 SSH 在執行實際的 SSH 命令之前先執行命令以建立代理連接。

ssh -o ProxyCommand='ssh -W %h:%p windows_machine' remote_server

這使用了 SSH -W選項,它是更神秘的netcat 語法的簡寫。

請注意,當您執行時,ssh remote_server您現在windows_machine需要確保使用remove_server 來自跳轉框的 IP,而不是來自您機器的 IP - 這些很可能是相同的。

然後,您可以將此指令添加到您的~/.ssh/config文件中:

Host remote_server
 HostName remote_server
 User myname
 ProxyCommand ssh -W %h:%p windows_machine

這意味著如果remote_server 從那以後看到的另一台機器,windows_machine您可以將其放入配置中並仍然使用ssh remote_server.

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