我家裡有一台電腦(家庭伺服器)運行 irssi、rtorrent 等。
我希望能夠登入家庭伺服器的外殼來自任何遠端電腦(在 NAT 後面)。
我在某處有 shell 帳戶(沒有 root 存取權限),這可能會有一些用處。
這是描述情況的圖表:
是否可以存取我的 shell家庭伺服器?我聽說過一些有關 ssh 隧道的信息,但我找不到任何與此案例匹配的教程。
答案1
在家庭伺服器上(從第三方到家庭的隧道):
ssh -R 20000:127.0.0.1:22 thirdparty.org
這會將您的 home box 連接到第三方 shell,然後開始將第三方 shell 上連接埠 20000 的所有連線轉送至您 home box 上的連接埠 22(SSH 連接埠)。
在遠端電腦上(從遠端到第三方的隧道):
ssh -L 20000:127.0.0.1:20000 thirdparty.org
這會將您的遠端設備連接到第三方 shell,然後開始將遠端設備上的連接埠 20000 轉送到第三方 shell 上的連接埠 20000。
然後在遠端電腦上(透過隧道連接):
ssh 127.0.0.1:20000
並輸入家庭伺服器的憑證
這將嘗試 ssh 到遠端機器上的連接埠 20000。由於我們設定了到第三方的隧道,#2 指令有效地將連線嘗試轉送到第三方 shell 上的 127.0.0.1:20000。然後,第一個命令再次將連線轉送到您的家庭裝置上的連接埠 22,此時 ssh 伺服器將接收該連線。
答案2
我試圖更好地解釋下面接受的解決方案。讓我們假設「機器 A」和「機器 B」都位於 NAT 防火牆後面。雖然兩者都可以透過 ssh 存取遠端「機器 R」(例如 VPS)。
R->A
ssh -R 20000:127.0.0.1:22 user@RemoteHost
以上命令在機器上執行A。
從以下位置建立隧道右(R的20000端口) 到A(A 的連接埠 22)(反向隧道)
B -> R
ssh -L 8000:127.0.0.1:20000 user@RemoteHost
上述命令執行於乙。
從創建隧道乙(B的8000端口) 到右(R的20000端口)
乙->甲
ssh 127.0.0.1 -p 8000
實際連接正在進行右, 那是乙(端口8000)-> 右(端口20000)-> 一個(連接埠 22)
使用 PuTTY 和 Windows 相同:
R->A
putty.exe -R 20000:127.0.0.1:22 -ssh RemoteHost -P port -l user -pw password
B -> R
putty.exe -L 8000:127.0.0.1:20000 -ssh RemoteHost -P port -l user -pw password
乙->甲
putty.exe -ssh 127.0.0.1 -P 8000 -l user -pw password
答案3
或者您也可以使用 HE.net 設定一些 IPv6 隧道並直接連接...(許多 VPN 解決方案也可以使用。)