如何通過 ssh 連接到我無法直接訪問的伺服器?
語境
我將 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 的埠2222
。remote_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
.