
我正在開發一個駐留在遠端 Ubuntu 14.x 伺服器上的伺服器應用程式。該應用程式正在監聽遠端盒子上的連接埠 8000。我有一個正確的 SSH 會話,因此我通過隧道進入了盒子,我還具有 sudo 功能。
我辦公室的本機 Linux 系統上有 IntelliJ,它也運行 ubuntu 14.x。我需要將其連接到遠端機器上的連接埠 8000 以進行 IntelliJ 遠端偵錯會話。遠端盒子上的連接埠 8080 不可公開使用。
是否有實用程式或 IP 表技巧(在遠端盒子上)或 SSH 技巧等可以在我的系統上提供一個本地端口供 IntelliJ 連接,然後透過該連接埠代理/轉送來自該連接埠的流量到遠端系統上連接埠8000的SSH 隧道?換句話說,它會讓本地機器上的 IntelliJ 認為它正在直接與遠端機器上的伺服器應用程式通信,而實際上它們之間的連接是透過活動的 SSH 隧道進行的?
我記得很久以前做過類似的事情,但我完全忘記瞭如何做,當時遠端客戶端是一個 Windows 盒子,所以解決方案是針對 Windows 系統的。這次本地系統和遠端系統都是Ubuntu 14.x伺服器。
答案1
在本機上設定轉送隧道
autossh -f -N -L 0.0.0.0:8000:localhost:8000 username@remotebox
0.0.0.0:8000
是 IntelliJ 將連接的內容,它會認為 Web 應用程式在本機電腦上運行,綁定到每個本機介面並在連接埠 8000 上運行。
localhost:8000
是在遠端盒子的上下文中隧道將連接到的位置。localhost
不再是localhost
您正在處理的介面,而是localhost
Remotebox 機器內部的介面。在那裡它將從用戶的上下文連接到連接埠 8000,該連接埠實際上是您的 Web 應用程式username
。
autossh
是一個包裝器ssh
,如果連接斷開,它會自動重新連接。
如果您在遠端主機上使用非標準 ssh 端口,請使用該-P <PORT>
參數連接到它。
如果上面的內容沒有達到您想要的效果,那麼這個答案值得一看:https://unix.stackexchange.com/a/118650/61956
從那裡我剛剛向您解釋了第一個圖表。我在本地連接埠前面加上了 interface 前綴0.0.0.0
,我認為當你省略它時它是預設的localhost
,如果你願意的話你可以這樣做。刪除該0.0.0.0:
部分可能會更安全,因為如果localhost
是預設設置,那麼網路上的任何人都無法使用您的電腦來使用該 ssh 隧道。否則,如果是您正在使用的電腦的 IP,則它們192.168.10.10:8000
將是遠端 Web 應用程式的入口點。192.168.10.10