Ssh

從伺服器到筆記型電腦的反向 ssh 隧道

  • November 6, 2015

問題我想知道如何使用 ssh 隧道將伺服器(debian)上的請求通過隧道傳輸到筆記型電腦上的埠 80。

問題我可以使用以下命令打開一條隧道,但它的行為並不像我想要的那樣:

ssh -R 4445:localhost:80 sam@example.com

在 example.com 上執行並獲取 shell 後,以下命令按預期執行,返回託管在我的筆記型電腦上的網頁:

wget localhost:4445

但是,當嘗試使用 example.com:4445 而不是 localhost:4445 執行相同的命令時,連接被拒絕。

**額外資訊:**我還嘗試使用shorewall編寫轉發規則:

DNAT            net             $FW:127.0.0.1:4445        tcp     4446

然後嘗試

wget example.com:4446

當 wget 在上述任何情況下失敗時,我會得到:

--2011-02-16 13:48:26--  http://example.com:4446/
Resolving example.com... 70.90.XXX.XX
Connecting to example.com|70.90.XXX.XX|:4446... failed: Connection refused.

關於從這裡去哪裡的任何想法?此外,如果有不同/更好的方法來實現這種效果,我完全願意接受這個想法。

編輯感謝您的建議!嘗試了以下方法:

ssh -R example.com:4445:localhost:80 sam@example.com

ssh -R :4445:localhost:80 sam@example.com

然後,當執行與上面相同的 wget 時,返回相同的錯誤。我也許應該提到這個伺服器有兩個介面(eth0 public eth1 private)。

編輯

我是個白痴:(必須設置

GatewayPorts yes

在 sshd_config 中。感謝大家的幫助!

出於安全原因配置 ssh 以使新隧道在 localhost 上偵聽。你必須使用:

ssh -R :4445:localhost:80 sam@example.com

從 openssh 的手冊頁:

 -R [bind_address:]port:host:hostport

指定將遠端(伺服器)主機上的給定埠轉發到本地端的給定主機和埠。這通過分配一個套接字來偵聽遠端端的埠來工作,並且每當與該埠建立連接時,該連接都會通過安全通道轉發,並從本地電腦建立與主機埠 hostport 的連接。

埠轉發也可以在配置文件中指定。只有在遠端電腦上以 root 身份登錄時才能轉發特權埠。IPv6 地址可以通過將地址括在方括號中或使用其他語法來指定:

$$ bind_address/ $$主機/埠/主機埠。 預設情況下,伺服器上的監聽套接字將只綁定到環回介面。這可以通過指定一個 bind_address 來覆蓋。空的 bind_address 或地址“*”表示遠端套接字應偵聽所有介面。只有啟用了伺服器的 GatewayPorts 選項(請參閱 sshd_config(5)),指定遠端 bind_address 才會成功。

引用自:https://serverfault.com/questions/236388