How系列-公網如何ssh到內網的Linux系統中?

来源:https://www.cnblogs.com/pheye/archive/2018/01/06/8207378.html
-Advertisement-
Play Games

起因 最近碰到一件事:B同學在他電腦的 虛擬機中學習搭建伺服器碰到了問題,要我幫他看下。我總不能一個QQ遠程桌面連過去,那樣操作會卡到崩潰。 過去是最好的方法,不過他的電腦跟我不在一個區域網,又是虛擬機,要怎麼連過去呢? 怎麼解決? 有兩種方法: 1. 通過一臺公網伺服器,通過 命令建立反向隧道 2 ...


起因

最近碰到一件事:B同學在他電腦的Ubuntu虛擬機中學習搭建伺服器碰到了問題,要我幫他看下。我總不能一個QQ遠程桌面連過去,那樣操作會卡到崩潰。ssh過去是最好的方法,不過他的電腦跟我不在一個區域網,又是虛擬機,要怎麼連過去呢?

怎麼解決?

有兩種方法:

  1. 通過一臺公網伺服器,通過ssh命令建立反向隧道
  2. 通過第三方的ngrok服務建立tcp反向隧道

它們的原理都是使用了反向隧道,原理見下圖:

正向與反向的區別在於正向連接是使用者通過自己的客戶端操作伺服器資源;反向連接是使用者通過伺服器操作客戶端資源。結合上圖理解:

  • 客戶端1ssh連接公網伺服器時,所有的操作都在伺服器上,所以稱為正向隧道;
  • 客戶端2ssh連接公網伺服器的2244埠時,公網伺服器全部轉發客戶端1,使用者通過公網伺服器操作客戶端1,所以公網伺服器到客戶端1的連接稱為反向隧道

第一種方法

客戶端1執行一條命令即可建立反向隧道:

$ssh -N -f -R *:2244:localhost:22 106.10.10.xxx

其中-N表示不執行命令,只轉發;-f表示後臺運行;-R表示反向隧道;*:2244:localhost:22表示監聽伺服器的2244埠,所有包轉發到本地的22埠;106.10.10.xxx為伺服器IP

我只要在客戶端2執行ssh -p 2244 [email protected]就能連接客戶端1的電腦了。

實際使用中會發現,該通道會經常自動斷開,這是正常現象。可通過autossh實現斷開重連。使用autossh之前,必須確保該客戶端與伺服器連接使用了無密碼的密鑰對登陸

$autossh -M 5678 -N -f -R *:2244:localhost:22 106.10.10.xxx

其中-M 5678表示通過5678埠監聽連接狀態,有問題就重連。

第二種

使用ngrok(1.x版本)就簡單多了,一條命令搞定,也不需要知道伺服器的密碼或傳公鑰,適合第三方伺服器提供跳板服務。

$ngrok -proto=tcp 22
ngrok                                                                                                                                                                (Ctrl+C to quit)
                                                                                                                                                                                     
Tunnel Status                 online                                                                                                                                                 
Version                       1.7/1.7                                                                                                                                                
Forwarding                    tcp://106.10.10.xxx:2244 -> 127.0.0.1:22                                                                                                           
Web Interface                 127.0.0.1:4040                                                                                                                                         
# Conn                        0                                                                                                                                                      
Avg Conn Time                 0.00ms

根據上面的輸出,我只要在客戶端2執行ssh -p 2244 [email protected]就能連接客戶端1的電腦了。

預設情況下,ngrok的轉髮端口是隨機的,如果要固定,編輯~/.ngrok,按如下添加通道:

server_addr: 106.10.10.xxx:4443
trust_host_root_certs: false
tunnels:
  ssh:
    proto:
      tcp: "22"
    remote_port: 2244

然後通過以下命令啟動:

ngrok start ssh

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 知識點目錄 >傳送門 XML是什麼就不用說了文本標記語言。 主要紀錄如何對XML文件進行增刪改查。 Xml的操作類都存在System.xml命名空間下麵。 應用型的直接上代碼 這個地方主要講一下 XmlElement.InnerXml和XmlElement.InnerText的區別。代碼演示 //給 ...
  • 源碼已經運行環境已經打包下載即可 執行adb命令的函數 ...
  • 作者: "zyl910" 一、問題 今天需要調試一個SilverLight程式。運行時ie彈出了一個升級提示,於是手賤點了升級。 隨後便悲劇了,VS調試時報“無法啟動調試 未安裝 Silverlight Developer 運行時。請安裝一個匹配版本”。 打開控制面板里的“卸載或更改程式”,發現版本 ...
  • 今天給大家分享一個form表單的驗證,主要驗證範圍有姓名、性別、年齡和身份證號等一些常用的信息。說到驗證,主要是通過正則表達式來規範和驗證你所輸入的信息,用正則的約束和你所輸入的信息作比較顯示差異,從而得到驗證的結果,即“通過”或者“不通過”。在本篇中我使用了onblur事件,onblur 屬性在元 ...
  • 對於Word中的郵件合併功能,用戶可以將郵件合併後的結果文檔保存並列印,也可以通過郵件的形式發送,在很多場合需要使用到此功能。那對於編程人員,我們也可以在C#語言環境中通過代碼的形式來實現。根據需要先創建郵件合併模板後,可合併文本和圖片,在下麵的方法中,需要使用到組件Free Spire.Doc f ...
  • 常見的AOP設計都基於Remoting的RealProxy,或者基於Emit實現的動態代理,或者基於反射的Attribute掃描攔截。但是我們還有另類的攔截方案DynamicObject,只要我們繼承DynamicObject,重載幾個方法即可,話不多說,上代碼。 Demo: ...
  • 最近有項目需求,要實現在網頁上獲取伺服器信息。大家都知道,網頁程式很難獲取客戶端信息比如MAC、CPU、硬碟信息等等。當時想過一些種方案,比如:通過IE插件,但只能用IE瀏覽器。正為這事焦頭爛額時,一天回家的路上,突發靈感,能不能在客戶端放一個服務,通過JavaScript 訪問這個服務,這樣就可以 ...
  • 調用介面時報錯:WebApi 找到了與該請求匹配的多個操作,就算你的路由是唯一的,也報錯。 我已經配置了路由,如下 這時候就看看你的命名空間using裡面有沒有包含:using System.Web.Mvc; 如果有的話,就把它刪除掉,然後引用:using System.Web.Http; 出現上述 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...