如何透過 ssh 連接到我無法直接存取的伺服器?

如何透過 ssh 連接到我無法直接存取的伺服器?

情境

我正在運行 Ubuntu Desktop 作為我的主計算機,我將其稱為 D。

我可以透過非常繁瑣的路徑存取伺服器S,涉及Windows虛擬機器和油灰。這使得使用該伺服器變得非常煩人:完全不同的環境,複製/貼上不起作用,連接到它時無法正確使用我的桌面(Alt-Tab 被虛擬機破壞)等

我已經驗證我可以從伺服器 S ssh 到我的桌上型電腦 D (與我需要的相反)。

我能否以某種方式從伺服器啟動「連接埠轉送」或類似功能,以便我可以從桌面 ssh 到伺服器?

答案1

您可以使用下列命令設定從遠端伺服器到本機的 SSH 隧道:

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

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

$ ssh -p 1234 user@localhost

請注意,您需要設定 ssh 密鑰才能自動登入(無密碼提示)。如果您想以互動方式建立 SSH 隧道,您可以刪除這些選項-f -N。欲了解更多信息,man ssh.

答案2

如果您正在執行較新版本的 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並且它使用2222ssh 連接埠。remote_server192.168.0.110從IP開始windows_server,然後你可以寫:

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

仍然跑去ssh remote_server那裡就可以了。


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

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

這使用 SSH-W選項,這是更神秘的縮寫網路貓語法

請注意,當您運行時,ssh remote_server您現在windows_machine需要確保使用該 IPremove_server 從跳箱而不是您機器上的 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.

答案3

與其試圖規避一些事情並創建一條複雜的路徑,不如直接請求允許從桌面到伺服器的 SSH?如果您有需要並且應該訪問伺服器,我不明白為什麼您的請求會被拒絕。

相關內容