情境
我正在運行 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
並且它使用2222
ssh 連接埠。remote_server
是192.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 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?如果您有需要並且應該訪問伺服器,我不明白為什麼您的請求會被拒絕。