5,SSH 端口轉發

SSH 端口轉發

簡介

SSH 除了登錄服務器,還有一大用途,就是作為加密通信的中介,充當兩臺服務器之間的通信加密跳板,使得原本不加密的通信變成加密通信。這個功能稱為端口轉發(port forwarding),又稱 SSH 隧道(tunnel)。

端口轉發有兩個主要作用:

(1)將不加密的數據放在 SSH 安全連接里面傳輸,使得原本不安全的網絡服務增加了安全性,比如通過端口轉發訪問 Telnet、FTP 等明文服務,數據傳輸就都會加密。

(2)作為數據通信的加密跳板,繞過網絡防火墻。

端口轉發有三種使用方法:動態轉發,本地轉發,遠程轉發。下面逐一介紹。

動態轉發

動態轉發指的是,本機與 SSH 服務器之間創建了一個加密連接,然后本機內部針對某個端口的通信,都通過這個加密連接轉發。它的一個使用場景就是,訪問所有外部網站,都通過 SSH 轉發。

動態轉發需要把本地端口綁定到 SSH 服務器。至于 SSH 服務器要去訪問哪一個網站,完全是動態的,取決于原始通信,所以叫做動態轉發。

$ ssh -D local-port tunnel-host -N

上面命令中,-D表示動態轉發,local-port是本地端口,tunnel-host是 SSH 服務器,-N表示這個 SSH 連接只進行端口轉發,不登錄遠程 Shell,不能執行遠程命令,只能充當隧道。

舉例來說,如果本地端口是2121,那么動態轉發的命令就是下面這樣。

$ ssh -D 2121 tunnel-host -N

注意,這種轉發采用了 SOCKS5 協議。訪問外部網站時,需要把 HTTP 請求轉成 SOCKS5 協議,才能把本地端口的請求轉發出去。

下面是 SSH 隧道建立后的一個使用實例。

$ curl -x socks5://localhost:2121 http://www.example.com

上面命令中,curl 的-x參數指定代理服務器,即通過 SOCKS5 協議的本地2121端口,訪問http://www.example.com

如果經常使用動態轉發,可以將設置寫入 SSH 客戶端的用戶個人配置文件(~/.ssh/config)。

DynamicForward tunnel-host:local-port

本地轉發

本地轉發(local forwarding)指的是,創建一個本地端口,將發往該端口的所有通信都通過 SSH 服務器,轉發到指定的遠程服務器的端口。這種情況下,SSH 服務器只是一個作為跳板的中介,用于連接本地計算機無法直接連接的遠程服務器。本地轉發是在本地計算機建立的轉發規則。

它的語法如下,其中會指定本地端口(local-port)、SSH 服務器(tunnel-host)、遠程服務器(target-host)和遠程端口(target-port)。

$ ssh -L -N -f local-port:target-host:target-port tunnel-host

上面命令中,有三個配置參數。

  • -L:轉發本地端口。
  • -N:不發送任何命令,只用來建立連接。沒有這個參數,會在 SSH 服務器打開一個 Shell。
  • -f:將 SSH 連接放到后臺。沒有這個參數,暫時不用 SSH 連接時,終端會失去響應。

舉例來說,現在有一臺 SSH 服務器tunnel-host,我們想要通過這臺機器,在本地2121端口與目標網站www.example.com的80端口之間建立 SSH 隧道,就可以寫成下面這樣。

$ ssh -L 2121:www.example.com:80 tunnel-host -N

然后,訪問本機的2121端口,就是訪問www.example.com的80端口。

$ curl http://localhost:2121

注意,本地端口轉發采用 HTTP 協議,不用轉成 SOCKS5 協議。

另一個例子是加密訪問郵件獲取協議 POP3。

$ ssh -L 1100:mail.example.com:110 mail.example.com

上面命令將本機的1100端口,綁定郵件服務器mail.example.com的110端口(POP3 協議的默認端口)。端口轉發建立以后,POP3 郵件客戶端只需要訪問本機的1100端口,請求就會通過 SSH 服務器(這里是mail.example.com),自動轉發到mail.example.com的110端口。

上面這種情況有一個前提條件,就是mail.example.com必須運行 SSH 服務器。否則,就必須通過另一臺 SSH 服務器中介,執行的命令要改成下面這樣。

$ ssh -L 1100:mail.example.com:110 other.example.com

上面命令中,本機的1100端口還是綁定mail.example.com的110端口,但是由于mail.example.com沒有運行 SSH 服務器,所以必須通過other.example.com中介。本機的 POP3 請求通過1100端口,先發給other.example.com的22端口(sshd 默認端口),再由后者轉給mail.example.com,得到數據以后再原路返回。

注意,采用上面的中介方式,只有本機到other.example.com的這一段是加密的,other.example.commail.example.com的這一段并不加密。

這個命令最好加上-N參數,表示不在 SSH 跳板機執行遠程命令,讓 SSH 只充當隧道。另外還有一個-f參數表示 SSH 連接在后臺運行。

如果經常使用本地轉發,可以將設置寫入 SSH 客戶端的用戶個人配置文件(~/.ssh/config)。

Host test.example.com
LocalForward client-IP:client-port server-IP:server-port

遠程轉發

遠程轉發指的是在遠程 SSH 服務器建立的轉發規則。

它跟本地轉發正好反過來。建立本地計算機到遠程 SSH 服務器的隧道以后,本地轉發是通過本地計算機訪問遠程 SSH 服務器,而遠程轉發則是通過遠程 SSH 服務器訪問本地計算機。它的命令格式如下。

$ ssh -R remote-port:target-host:target-port -N remotehost

上面命令中,-R參數表示遠程端口轉發,remote-port是遠程 SSH 服務器的端口,target-hosttarget-port是目標服務器及其端口,remotehost是遠程 SSH 服務器。

遠程轉發主要針對內網的情況。下面舉兩個例子。

第一個例子是內網某臺服務器localhost在 80 端口開了一個服務,可以通過遠程轉發將這個 80 端口,映射到具有公網 IP 地址的my.public.server服務器的 8080 端口,使得訪問my.public.server:8080這個地址,就可以訪問到那臺內網服務器的 80 端口。

$ ssh -R 8080:localhost:80 -N my.public.server

上面命令是在內網localhost服務器上執行,建立從localhostmy.public.server的 SSH 隧道。運行以后,用戶訪問my.public.server:8080,就會自動映射到localhost:80

第二個例子是本地計算機local在外網,SSH 跳板機和目標服務器my.private.server都在內網,必須通過 SSH 跳板機才能訪問目標服務器。但是,本地計算機local無法訪問內網之中的 SSH 跳板機,而 SSH 跳板機可以訪問本機計算機。

由于本機無法訪問內網 SSH 跳板機,就無法從外網發起 SSH 隧道,建立端口轉發。必須反過來,從 SSH 跳板機發起隧道,建立端口轉發,這時就形成了遠程端口轉發。跳板機執行下面的命令,綁定本地計算機local2121端口,去訪問my.private.server:80

$ ssh -R 2121:my.private.server:80 -N local

上面命令是在 SSH 跳板機上執行的,建立跳板機到local的隧道,并且這條隧道的出口映射到my.private.server:80

顯然,遠程轉發要求本地計算機local也安裝了 SSH 服務器,這樣才能接受 SSH 跳板機的遠程登錄。

執行上面的命令以后,跳板機到local的隧道已經建立了。然后,就可以從本地計算機訪問目標服務器了,即在本機執行下面的命令。

$ curl http://localhost:2121

本機執行上面的命令以后,就會輸出服務器my.private.server的 80 端口返回的內容。

如果經常執行遠程端口轉發,可以將設置寫入 SSH 客戶端的用戶個人配置文件(~/.ssh/config)。

Host remote-forwardHostName test.example.comRemoteForward remote-port target-host:target-port

完成上面的設置后,執行下面的命令就會建立遠程轉發。

$ ssh -N remote-forward# 等同于
$ ssh -R remote-port:target-host:target-port -N test.example.com

實例

下面看兩個端口轉發的實例。

簡易 VPN

VPN 用來在外網與內網之間建立一條加密通道。內網的服務器不能從外網直接訪問,必須通過一個跳板機,如果本機可以訪問跳板機,就可以使用 SSH 本地轉發,簡單實現一個 VPN。

$ ssh -L 2080:corp-server:80 -L 2443:corp-server:443 tunnel-host -N

上面命令通過 SSH 跳板機,將本機的2080端口綁定內網服務器的80端口,本機的2443端口綁定內網服務器的443端口。

兩級跳板

端口轉發可以有多級,比如新建兩個 SSH 隧道,第一個隧道轉發給第二個隧道,第二個隧道才能訪問目標服務器。

首先,在本機新建第一級隧道。

$ ssh -L 7999:localhost:2999 tunnel1-host

上面命令在本地7999端口與tunnel1-host之間建立一條隧道,隧道的出口是tunnel1-hostlocalhost:2999,也就是tunnel1-host收到本機的請求以后,轉發給自己的2999端口。

然后,在第一臺跳板機(tunnel1-host)執行下面的命令,新建第二級隧道。

$ ssh -L 2999:target-host:7999 tunnel2-host -N

上面命令將第一臺跳板機tunnel1-host2999端口,通過第二臺跳板機tunnel2-host,連接到目標服務器target-host7999端口。

最終效果就是,訪問本機的7999端口,就會轉發到target-host7999端口。

參考鏈接

  • An Illustrated Guide to SSH Tunnels, Scott Wiersdorf
  • An Excruciatingly Detailed Guide To SSH, Graham Helton

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/45676.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/45676.shtml
英文地址,請注明出處:http://en.pswp.cn/web/45676.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SpringCloud | 單體商城項目拆分(微服務)

為什么要進行微服務拆分? 在平常的商城項目中,我們一般的項目結構模塊都是將各種業務放在同一個項目文件夾,比如像: 用戶,購物車,商品,訂單,支付等業務都是放在一起,這樣…

thinkphp:數據庫多條件查詢

一、使用if條件限制查詢條件 $query Db::table(wip_operation_plan)->alias(d)->join([wip_jobs_all > a], a.wip_entity_name d.wip_entity_name)->join([sf_item_no > c], a.primary_itemc.item_no)->field(d.*,c.item_no as item_no,c.item_name as i…

線上觀看 3 萬+!「智能運維MeetUp」精彩回顧,探討智能體構建新方向

龍蜥社區“走進系列”第 11 期走進中興通訊-智能可觀測運維技術 MeetUp 于成都圓滿結束,由中興通訊聯合龍蜥社區系統運維聯盟(SOMA)(以下簡稱“聯盟”)共同舉辦。本次活動現場匯聚了阿里云、諧云科技、乘云數字、中興通…

MySQL數據庫day7.11

一,SQL概述 1.1 SQL語句語法 MySQL 數據庫的 SQL 語句不區分大小寫,關鍵字建議使用大寫, 以分號結尾。例如: SELECT * FROM user; 使用 /**/ 、 -- 、 # 的方式完成注釋 /* 多行注釋 */ -- 單行注釋 # 單行注釋 SELECT * FRO…

vue2 ant-design select組件自定義下拉框, dropdownRender 使用,以及遇到的坑

業務需求&#xff1a;下拉框需要滿足用戶可輸入篩選 和 點擊右側 字符按鈕 #A-Z進行用戶選擇 1、基礎頁面代碼 <div><a-selectstyle"width: 100%"placeholder"請選擇客戶"allow-clearshow-search:filter-option"false":not-found-con…

計算機硬件---如何更新自己電腦的BLOS

1找官網 例如“我使用的是HP&#xff08;惠普&#xff09;品牌的電腦”我只需要在瀏覽器上搜索“惠普官網”或“惠普-blos更新” 就可以看到&#xff0c;來自官網中更新blos的信息 2.有些品牌要查序列號該怎么辦呢&#xff1f; 有許多方法可以查詢&#xff0c;例如&#xf…

android13 frameworks里面常用的保存信息或者版本判斷的方法

總綱 android13 rom 開發總綱說明 目錄 1.前言 2. 數據庫 2.1 代碼讀取用法參考 3.prop 屬性配置 3.1 property的key值有哪些特點 4.區別 5. 其他數據存儲 6.彩蛋 1.前言 frameworks 不像我們一般開發app那樣,很多應用保存的方法都無法使用。這里記錄我們系統rom開…

Java性能優化-if-else簡化技巧

場景 Java性能優化-switch-case和if-else速度性能對比&#xff0c;到底誰快&#xff1f;&#xff1a; Java性能優化-switch-case和if-else速度性能對比&#xff0c;到底誰快&#xff1f;-CSDN博客 如果單純是做情景選擇&#xff0c;建議使用switch&#xff0c;如果必須使用i…

關于java的反射

???反射是啥呀相信許多學java的同學非常困惑在學的時候&#xff0c;總是感覺懂了卻又沒懂或者直接忽略過去了&#xff0c;那么本文就帶大家探討一下什么是反射在java中以及它的機制和運用。 ??什么是反射&#xff1a; 首先我們知道一些知識&#xff1a; 維基百科的解釋 …

武漢市集成電路領域重點產業鏈研究咨詢服務機構申報條件、時間

武漢市集成電路領域重點產業鏈研究咨詢服務機構公開遴選有關內容如下&#xff0c;武漢市的企業單位可以了解一下 一、采購內容 &#xff08;一&#xff09;項目名稱 武漢市集成電路領域重點產業鏈研究咨詢服務項目。 &#xff08;二&#xff09;項目內容 為進一步推動我市…

springboot項目 導入 maven坐標 錯誤 Could not transfer artifact XXX

1.報錯原因 當時導入的是 redis坐標 &#xff0c;導入jar 包報錯&#xff08;當時是網速太慢了&#xff0c;一直卡著不動 就關了 idea 重新下載&#xff09;結果報錯 之前的redis 項目都可以的&#xff0c;網上找了一下 都沒解決 2.解決辦法 既然說不能傳輸&#xff0c; 就說…

有用的工具

一、appuploader Appuploader home -- A tool improve ios develop efficiency such as submit ipa to appstore and manage ios certificate這是一款p12證書查看的工具&#xff0c; 需要建立一個apple ID專用密碼&#xff1a;Manage your Apple ID

redis其他類型和配置文件

很多博客只講了五大基本類型&#xff0c;確實&#xff0c;是最常用的&#xff0c;而且百分之九十的程序員對于Redis只限于了解String這種最常用的。但是我個人認為&#xff0c;既然Redis官方提供了其他的數據類型&#xff0c;肯定是有相應的考量的&#xff0c;在某些特殊的業務…

C++相關概念和易錯語法(22)(final、純虛函數、繼承多態難點)

1.final final在繼承和多態中都可以使用&#xff0c;在繼承中是指不想將自己被繼承&#xff0c;在多態中是指不想該函數被重寫&#xff0c;比較簡單&#xff0c;下面是一些使用例子。 2.純虛函數 當我們需要抽象一個類的時候&#xff0c;我們就需要用到純虛函數。所謂抽象的類…

C# 4.0 等待線程結束

在C#中&#xff0c;如果你正在使用多線程編程&#xff0c;并且想要等待一個或多個線程完成它們的工作再繼續執行&#xff0c;有幾種方式可以實現。從C# 4.0開始&#xff0c;雖然直接用于等待線程結束的特性&#xff08;如Thread.Join()&#xff09;在之前的版本中也已經存在&am…

升級版凱撒密碼加密解密器

目錄 開頭程序程序的流程圖程序加密與解密的效果例1加密的過程加密之后的文本 例2解密之后的文本解密之后的文本 例3加密之后的文本加密之后的文本 結尾 開頭 大家好&#xff0c;我叫這是我58。今天&#xff0c;我們來看一下我用C語言編譯的升級版凱撒密碼加密解密器和與之相關…

小程序 - - - - - 實現漸隱漸顯(監聽滾動距離版)

代碼如下&#xff1a; <!-- fixed-left --> <view class"fixed-box" animation"{{animationData}}">這里是漸隱漸顯的標簽 </view>.fixed-box {position: fixed;left: 0;top: 0;z-index: 999;background-color: #ccc;/* background-colo…

如何設計統計量及相關假設檢驗

一、如何設置H0和H1假設 誰做H0&#xff0c;誰做H1&#xff0c;在統計學的假設檢驗里是有約定俗成的規定的。即&#xff1a;status quo&#xff08;默認/現狀&#xff09;是H0&#xff0c;而新觀點或試圖challenge現狀的是H1。H1也叫research hypothesis&#xff0c;所以我們做…

【多個Python版本存在,使用pip+不同版本安裝庫時,windows彈出打開方式窗口的解決方法】

問題描述 電腦上存在python3.9&#xff0c;3.10&#xff0c;3.11&#xff0c;安裝順序也是先安裝3.9&#xff0c;然后3.10&#xff0c;最后3.11&#xff0c;那么直接使用pip安裝&#xff0c;會裝在3.11的位置&#xff0c;經過搜索可以通過pip版本&#xff0c;比如pip3.9 insta…

1.3- Zygote

第三節 Zygote 在Android系統中&#xff0c;Zygote是一個非常核心的組件&#xff0c;它扮演著孵化新應用程序進程的角色。Zygote是Android啟動過程中創建的第一個Java虛擬機&#xff08;JVM&#xff09;實例&#xff08;在Android中稱為Dalvik或ART虛擬機&#xff0c;取決于An…