利用SSH端口轉發實現跨機器直接訪問

在實際項目測試中經常會遇到數據庫操作,但是因爲公司安全問題,訪問數據庫往往需要通過跳板機。但通過跳板機,測試效率大打折扣,因此通過使用SSH端口轉發,從而達到跨機器直接訪問數據庫。實際項目中的應用會比下面內容相對複雜一些,但萬變不離其宗,基本原理是一樣的。

SSH簡介

SSH是什麼?

SSH是一種協議,是一種有關如何在網絡上構建安全通信的規範。SSH的協議涉及認證、加密、網絡上傳輸數據的完整性。具體而言,SSH具有客戶端/服務器(C/S)結構,SSH在計算機之間建立網絡連接,並充分保障連接的雙方是真實可信的(認證),該連接傳輸的所有數據不會被竊聽(加密),不會被修改(完整)。

基於SSH的產品(即實現了SSH協議的產品)可能包含客戶端或服務器,也可能都包含。Unix通常都包含有客戶端和服務端;其他平臺一般僅包含客戶端。

術語:SSH協議和產品

經常會見到SSH、SSH-1、SSH-2、ssh等等各種特別相似的詞彙,很容易讓大家有誤解,這裏就將這些進行簡單說明,方便後續大家理解。

SSH:通用的術語,泛指SSH協議或SSH軟件產品

SSH-1:SSH協議版本1

SSH-2:SSH協議版本2

SSH1:實現SSH-1 的一個產品(軟件),也是最早的SSH軟件

SSH2:實現了SSH-2的一個商業產品

OpenSSH:是OpenBSD項目的產品,它同時實現了SSH-1協議和SSH-2協議

ssh:運行安全終端會話和遠程命令的客戶端程序,是產品的一個子集,即客戶端部分

SSH的功能

1、 安全遠程登錄
說到遠程登錄不得不提起來Telnet協議,下面就對telnet和ssh進行簡單對比,從而幫助大家理解ssh的安全遠程登錄功能。

  • Telnet:Telnet爲用戶提供了在本地計算機上完成遠程主機工作的能力。但Telnet不是一種安全通信協議,因爲它並不使用任何安全機制,通過網絡/互聯網傳輸明文格式的數據,包括密碼,所以誰都能嗅探數據包,獲得這個重要信息。
  • SSH:SSH是一種非常安全的協議,因爲它共享併發送經過加密的信息,從而爲通過互聯網等不安全的網絡訪問的數據提供了機密性和安全性,SSH = Telnet + 安全機制。

2、安全文件傳輸
傳統的文件傳輸程序(ftp、rcp等)都不能提供安全解決方案,使用SSH,只需要使用一個安全拷貝命令(scp)就可以在計算機之間安全傳輸文件。

3、 安全執行遠程命令。例如 ssh [email protected] "pwd; cat hello.txt"

4、訪問控制
假設用戶允許另外一個人使用自己的計算機賬號,但他只能用於特定目的。例如,在你出差時,允許祕書使用你的賬號替你閱讀email,但不能執行其他操作。使用SSH,你不用把密碼告訴祕書,也不用修改密碼就可以授權祕書訪問自己的賬號,並限定他只能運行郵件程序。

5、端口轉發
SSH能爲另外一個應用程序的數據流提供透明的加密措施,從而保護其他TCP/IP應用程序,後面會詳細解釋關於SSH的端口轉發功能。

常見的SSH產品

詳解SSH端口轉發

SSH使用的傳輸機制是TCP/IP,通常使用的是服務器的TCP端口22,並對經過連接傳輸的數據進行加密/解密操作。SSH端口轉發就是SSH對其他應用程序在別的TCP端口上建立的TCP/IP傳輸進行加密和解密。Telnet、SMTP、IMAP和其他一些基於TCP/IP的不安全協議都可以將其連接通過SSH轉發變得安全。SSH端口轉發也叫做隧道傳輸,因爲SSH連接提供了一條安全的“隧道”,其他TCP/IP連接可由此經過。

如上圖所示,使用了端口轉發之後,TCP 端口 A 與 B 之間現在並不直接通訊,而是轉發到了 SSH 客戶端及SSH服務端來通訊,從而自動實現了數據加密並同時繞過了防火牆的限制。

有一點需要注意的是,SSH端口轉發 是TCP使用的一種通用代理機制,而且只能用於TCP/IP協議。如果協議不是基於TCP的,比如基於UDP的DNS、DHCP的,就不能使用端口轉發機制。

本地轉發分析

假設你在家裏有一臺電腦名主機H,上面運行着某個支持IMAP的email閱讀器,你想連接到服務器主機S上的IMAP服務器,從而讀取併發送郵件。通常,這個連接是不安全的,你的郵箱賬號、密碼在IMAP服務器和客戶端之間明文傳輸,我們可以使用SSH端口轉發,透明地將IMAP連接重新路由,使其通過SSH安全地對連接上的數據進行加密。

語法是這樣的:ssh -L <本地監聽端口號>:<目的主機>:<目的服務的端口號> <隧道終點主機>

具體到該例子:ssh –L 端口Y : S : 端口143 S

-L 表示是本地轉發,此時該TCP服務的客戶端與SSH客戶端同在H上。後面接着三個值,由冒號分開,分別表示:需要監聽的本地端口Y,目的主機(S),目的服務的端口號143(IMAP服務端通用的端口號是143)。

這個命令可分開下面兩個步驟理解:

  1. Hi,本地的ssh客戶端,請你在本地建立一個監聽端口,凡是到這個端口的數據,都請你通過ssh 通道傳給ssh服務端
  2. Hi,隧道終點主機,請你收到我的數據之後,把數據轉到我制定的目的主機和目的服務端口上

通過端口轉發,整個數據鏈路由原來(H,X)--> (S,143)轉爲下面幾步

  1. (H,X)--> (H,Y),家中H上的IMAP客戶端向本地的Y端口發送數據,其中Y就是本地端口轉發時SSH客戶端新建立的本地監聽端口
  2. (H,Z)--> (S,22),家中H上的SSH客戶端讀Y端口數據,加密數據,利用SSH通道,將加密後數據發送到S
  3. (S,W)-->(S,143),SSH服務端將收到的加密數據解密,然後將其傳給S的143端口上監聽IMAP的服務器

除了本地轉發還有遠程轉發,本次解決項目中實際問題時未涉及使用遠程轉發技術,因此不做詳細介紹,感興趣的可私下了解。

利用本地轉發技術實現跨機器直接訪問

現在很多公司爲了加強網絡安全,都會使用跳板機,所謂跳板機就是一臺服務器,維護人員在維護過程中,首先要統一登錄到這臺服務器(跳板機)上,然後從這臺服務器(跳板機)再登錄到目標設備進行維護。於是我們面臨一個情況,本機ssh->跳板機->目標機器,而跳板機一般作爲通道,提供的權限很低,很多命令無法執行,這個限制會讓我們工作效率大大降低。我們利用前面的SSH本地端口轉發技術來徹底解決該問題吧!

我們將上面的描述圖形化,見下圖。

圖中的“我”,現在是要訪問內部網站的192.168.1.0/24網段裏面的服務器,然而由於不在一個網段,我是不可以直接ssh到內部網絡的服務器。通常的做法是先ssh到“SSH Server”,然後再在ssh server上訪問內部網站的服務器。我能不能不用上ssh server就直接ssh到內部服務器呢?

結合前面的SSH本地端口轉發,我可以這樣做:

  1. 挖隧道

ssh –L 11125 : 192.168.1.2 : 22 [[email protected]](mailto:[email protected])

在本地電腦創建監聽端口:11125,192.168.1.2:22就是我們無法直接訪問到目的主機及端口號,10.1.1.1就是我們這次挖隧道的終點主機,即可訪問的SSH服務端

2、使用隧道

如果我們希望繼續使用的TCP服務還是ssh客戶端,因此我們就需要再打開一個ssh客戶端。

ssh –p 11125 localhost

這行命令看起來是說,用ssh連接到本地電腦的端口11125上。結合剛纔步驟1建立的隧道,這條命令就會被轉發到跳板機10.1.1.1,然後跳板機會把這個ssh命令轉發到目的主機192.168.1.2。

當然我們還可以使用其他服務,例如連接數據庫,我們只需要連接當前主機11125端口即實現了連接在服務器192.168.1.2的數據庫了。

到此,我們已經完美的實現了跨機器直接訪問的目的。


作者:桃子媽咪
鏈接:https://www.jianshu.com/p/b22d765ec9ef

來源:簡書

插播:金融壹賬通質量開放平臺現提供測試一站式解決方案,包括UI自動化、測試過程管理、app評測、接口自動化、接口壓測、輿情監控等測試服務,歡迎訪問:http://fit-stg1.jryzt.com/Hyperion-server/html/index.html。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章