2012-01-10 121 views
14

我目前正在嘗試解決如何SSH到拒絕所有傳入連接的防火牆後面的服務器。服務器可以SSH連接,所以我想知道是否有辦法讓防火牆後面的服務器創建到我的工作站的SSH隧道,然後允許我的工作站通過它向服務器發送命令?SSH到服務器後面的防火牆

我已經研究了隧道/反向隧道,但這些似乎是端口轉發解決方案,由於防火牆拒絕所有端口上的所有連接,因此這些解決方案無法正常工作。

理想情況下,我想這樣做的紅寶石(使用Net :: SSH寶石),這樣的而不是打開像一個新的連接:

Net::SSH.start('host', 'user', :password => "password") 

我能以某種方式綁定到現有的隧道。

謝謝!

回答

25

如果您有對服務器的控制權,這相當簡單。我給的命令行版本,您可以和他們說成你喜歡的任何框架:

server$ ssh -R 9091:localhost:22 client.example.egg 

client$ ssh -p 9091 localhost 

服務器建立到客戶端首先它開始於「R」表情端偵聽連接(即客戶端)在端口9091上(我剛剛創建的),並將這些連接轉發到localhost:22,即轉發到ssh服務器本身。

客戶端只需要連接到自己的本地端口9091,它透明地轉發到服務器的ssh服務器。

這通常會嚴重破壞您的公鑰檢查(和貼心的安全!),因爲客戶端的SSH客戶端不知道localhost:9091server:22相同。如果您的客戶端是Putty,那麼您可以選擇在某處提供「真實」服務器名稱,以便可以正確查找憑據。

+0

有沒有一種方法可以通配符localhost身材。我的IP地址發生變化,我希望始終能夠ssh到服務器。我有一個dns解析器已經設置了 – MichaelH 2013-05-06 11:12:23

+0

@MichaelH:我不確定我是否理解。如果其中一個對等體的IP地址發生變化,您將無法維護TCP連接... – 2013-05-06 11:49:34

+0

我們是否可以通過此隧道連接http? – Will 2014-02-04 01:35:31

0

除非您可以從首先嚐試連接的主機創建(並維護)一條隧道(這將允許您通過該隧道進行連接),否則不行。這就是防火牆的要點:防止未經授權的訪問網絡。

但是防火牆不應該阻塞隧道,儘管它完全取決於隧道的管理方式。使用ssh's tunneling features設置的端口轉發隧道將顛覆防火牆。但是,它也可能讓您遇到遠程網絡管理員的麻煩。因此,最終,您需要與網絡管理員交談,以便放寬防火牆規則,以便無需隧道或至少獲得隧道授權。

相關問題