国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

SSH 隧道簡明教程

這篇具有很好參考價值的文章主要介紹了SSH 隧道簡明教程。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

本章主要介紹了什么是 SSH 隧道以及如何使用 SSH 隧道,包括 SSH 隧道加密數(shù)據(jù)傳輸以及繞過防火墻。

1. 什么是 SSH 隧道

SSH 隧道是 SSH 中的一種機制,它能夠將其他 TCP 端口的網(wǎng)絡數(shù)據(jù)通過 SSH 連接來轉發(fā),并且自動提供了相應的加密及解密服務。因為 SSH 為其他 TCP 鏈接提供了一個安全的通道來進行傳輸,因此這一過程也被叫做“隧道”(tunneling)。

SSH 隧道也可以叫做端口轉發(fā)

SSH 隧道能夠提供兩大功能:

  • 1)加密 SSH Client 端至 SSH Server 端之間的通訊數(shù)據(jù)。

  • 2)突破防火墻的限制完成一些之前無法建立的 TCP 連接。

本地轉發(fā)和遠程轉發(fā)

SSH 端口轉發(fā)自然需要 SSH 連接,而 SSH 連接是有方向的,從 SSH Client 到 SSH Server 。而我們的應用也是有方向的,比如需要連接 MySQL Server 時,MySQL Server 自然就是 Server 端,我們應用連接的方向也是從應用的 Client 端連接到應用的 Server 端。如果這兩個連接的方向一致,那我們就說它是本地轉發(fā)。而如果兩個方向不一致,我們就說它是遠程轉發(fā)。

相關參數(shù)

  • “-L選項”:local,表示使用本地端口轉發(fā)創(chuàng)建 ssh 隧道

  • “-R選項”:remote,表示使用遠程端口轉發(fā)創(chuàng)建 ssh 隧道

  • “-D選項”:dynamic,表示使用動態(tài)端口轉發(fā)創(chuàng)建 ssh 隧道

  • “-N選項”: 表示創(chuàng)建隧道以后不連接到 sshServer端,通常與”-f”選項連用

  • “-f選項”:表示在后臺運行ssh隧道,通常與”-N”選項連用

  • “-g選項”:表示 ssh 隧道對應的轉發(fā)端口將監(jiān)聽在主機的所有IP中,不使用”-g選項”時,轉發(fā)端口默認只監(jiān)聽在主機的本地回環(huán)地址中,”-g” 表示開啟網(wǎng)關模式,遠程端口轉發(fā)中,無法開啟網(wǎng)關功能

2. 演示

本地轉發(fā)

客戶端:192.168.172.131

服務端:192.168.172.133

一般是 server 端有 IP 能訪問時用本地轉發(fā)。

將服務器 192.168.172.133 上的 8888 端口映射到本地[192.168.172.131]的 18888 端口,即將本地 18888 端口流量轉發(fā)到服務器 192.168.172.133 上的 8888 端口。

比如不能直接訪問 server 的 8888 端口,此時就可以使用 ssh 隧道來突破該限制。

在服務器 192.168.172.133 上啟動一個 http server:

[root@localhost ~]# python -m SimpleHTTPServer 8888
Serving HTTP on 0.0.0.0 port 8888 ...

然后在本地執(zhí)行以下命令,開啟 ssh 隧道。

命令1

[root@davytestcentos ~]# ssh -N -L 18888:localhost:8888 root@192.168.172.133
root@192.168.172.133's password:
#這里隧道建立后,會正常進行,進程沒有退出   -f 后臺運行

該命令表示在本地和 192.168.172.133 之間建立 ssh 隧道,由 ssh 客戶端監(jiān)聽本地的 8888 端口并將流量轉發(fā)到 192.168.172.133 的 sshServer,最終由 sshServer 在轉發(fā)到 8888 端口

每部分參數(shù)具體含義如下:

  • “-N選項”:表示創(chuàng)建隧道以后不連接到 sshServer 端

  • “-L選項”:local,表示使用本地端口轉發(fā)創(chuàng)建 ssh 隧道

  • 18888:localhost:8888:遠端的 8888 端口會被轉發(fā)到 localhost:8888 端口上去。

  • 這里的 localhost 實際上指監(jiān)聽【192.168.172.133 】的本地回環(huán)地址,如果要監(jiān)聽其他 IP 也可以手動指定

  • root@192.168.172.133 :我們創(chuàng)建的 ssh 隧道是連接到 192.168.172.133 上的 root 用戶的

測試一下,請求本地[curl http://localhost:18888] 18888 端口能否訪問到 遠程服務器上的 http server。

[root@davytestcentos ~]# curl http://localhost:18888
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"><html>
<title>Directory listing for /</title>
<body>
。。。。。。。。。
</body>

這時轉發(fā)數(shù)據(jù)流是: client 上的應用客戶端將數(shù)據(jù)發(fā)送到本地的 18888 端口上, client 上的 ssh 客戶端將本地 18888 端口收到的數(shù)據(jù)加密后發(fā)送到 server 端的 ssh server上,ssh server 會解密收到的數(shù)據(jù)并將之轉發(fā)到監(jiān)聽的 8888 端口 最后再將從 http server 返回的數(shù)據(jù)原路返回以完成整個流程。

可以看到,本地已經(jīng)開啟的 18888 端口的監(jiān)聽。

[root@davytestcentos ~]# netstat -tunlp|grep 18888
tcp        0      0 127.0.0.1:18888         0.0.0.0:*               LISTEN      7306/ssh
tcp6       0      0 ::1:18888               :::*                    LISTEN      7306/ssh

命令2

命令1執(zhí)行后,沒有執(zhí)行本地地址,默認是在監(jiān)聽本地回環(huán)地址??梢栽O置監(jiān)聽非本地回環(huán)地址,比如執(zhí)行下面這個命令就可以在 ip 192.168.172.131 上監(jiān)聽:

[root@davytestcentos ~]# ssh -N -L 192.168.172.131:18888:192.168.172.133:8888 root@192.168.172.133
root@192.168.172.133's password:

訪問網(wǎng)址:

[root@davytestcentos ~]# curl http://localhost:18888
curl: (7) Failed connect to localhost:18888; 拒絕連接
[root@davytestcentos ~]# curl http://192.168.172.131:18888
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"><html>
<title>Directory listing for /</title>
<body>
。。。。。。。
</html>

本地端口監(jiān)聽如下:

[root@davytestcentos ~]# netstat -tunlp|grep 18888
tcp        0      0 192.168.172.131:18888   0.0.0.0:*               LISTEN      7400/ssh

命令3

如果你覺得這還不夠,希望所有 IP 地址的 18888 端口都被監(jiān)聽,那么可以在建立隧道時開啟”網(wǎng)關功能”,使用”-g”選項可以開啟”網(wǎng)關功能”:

[root@davytestcentos ~]# ssh -g -N -L 18888:192.168.172.133:8888 root@192.168.172.133
root@192.168.172.133's password:

訪問網(wǎng)址:

[root@davytestcentos ~]# curl http://localhost:18888
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"><html>
<title>Directory listing for /</title>
<body>
。。。。。。。。。
</body>
</html>
[root@davytestcentos ~]# curl http://192.168.172.131:18888
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"><html>
<title>Directory listing for /</title>
<body>
。。。。。。。。。。
</body>
</html>

本地監(jiān)聽情況如下:

[root@davytestcentos ~]# netstat -tunlp|grep 18888
tcp        0      0 0.0.0.0:18888           0.0.0.0:*               LISTEN      7513/ssh
tcp6       0      0 :::18888  

至此,我們已經(jīng)了解 ssh 本地轉發(fā)功能了,接下來看一下遠程轉發(fā)。

遠程轉發(fā)

客戶端:192.168.172.131

服務端:192.168.172.133

當 server 端沒有可以直接訪問的 IP 時就無法使用本地轉發(fā)了,如果本地有 IP 可以直接訪問那么還可以使用遠程轉發(fā),也就是在服務端設置遠程轉發(fā)。

在服務器 192.168.172.133 上啟動一個 http server:

[root@localhost ~]# python -m SimpleHTTPServer 8888
Serving HTTP on 0.0.0.0 port 8888 ...

然后假設本地有一個 server (192.168.172.133)端能訪問的IP地址 192.168.172.131 ,然后在 服務端(192.168.172.133)上執(zhí)行以下命令將端口轉發(fā)到本地端口

[root@localhost ~]# ssh -N -R 18888:localhost:8888 root@192.168.172.131
root@192.168.172.131's password:

可以看做是在 server 端執(zhí)行的一個本地轉發(fā),因為 server 端沒有 ip 所以需要反過來操作。

端口監(jiān)聽都是在本地發(fā)生,但是執(zhí)行命令的機器卻變成了 server 端。

命令執(zhí)行后會在本地(192.168.172.131)監(jiān)聽端口,并將流量轉發(fā)到我們的 server 端。之前本地轉發(fā)時也是在本地監(jiān)聽端口

將本地服務器(192.168.172.131) 的 18888 端口轉發(fā)到 server 端的 8888 端口。

唯一區(qū)別是遠程轉發(fā)模式下 只能監(jiān)聽本地回環(huán)地址,不能監(jiān)聽其他IP,也不能開啟網(wǎng)關模式,即無法讓其他機器通過本地服務器(192.168.172.133) 來訪問 server。

由于是在 server 端執(zhí)行的命令,因此該場景中 server端扮演的是 ssh client 的角色,而 client 端則是 ssh server。

此時的數(shù)據(jù)流向為:client 端數(shù)據(jù)發(fā)送到 18888 端口,client 端上的 ssh server 監(jiān)聽該端口并對數(shù)據(jù)進行加密后轉發(fā)到 server 端的 ssh client,ssh client 解密數(shù)據(jù)后轉發(fā)到 server 節(jié)點的 8888 端口。

擴展-跨機器轉發(fā)

ServerAIP:192.168.172.135

ServerBIP:192.168.172.131

ServerBIP:192.168.172.133

具體場景如下圖所示:
ssh隧道,運維,操作性系統(tǒng),Rundeck,ssh,運維

如上圖所示,我們想要在A與B之間創(chuàng)建隧道,最終通過隧道訪問到ServerC中的 http 服務。

ServerA與ServerB上沒有開啟任何 http 服務,ServerC中開啟了 http 服務,監(jiān)聽了 8888 端口。

我們需要在 ServerA 192.168.172.135上執(zhí)行以下命令開啟 ssh 隧道:

[root@localhost ~]# ssh -N -L 18888:192.168.172.133:8888 root@192.168.172.131
root@192.168.172.131's password:

執(zhí)行后 ServerA 上已經(jīng)開始監(jiān)聽 8888 端口了,默認是在本地回環(huán)地址上,需要其他機器訪問的話可以指定 ip 或者增加 -g 參數(shù)開啟網(wǎng)關模式。在本地轉發(fā)篇講過

[root@localhost ~]# netstat -tunlp|grep 18888
tcp        0      0 127.0.0.1:18888         0.0.0.0:*               LISTEN      1608/ssh
tcp6       0      0 ::1:18888               :::*                    LISTEN      1608/ssh

然后測試一下

[root@localhost ~]# curl http://localhost:18888
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"><html>
<title>Directory listing for /</title>
<body>
。。。。。。。。。
</body>
</html>

注意

上述場景中存在一個問題,就是數(shù)據(jù)安全性的問題,我們之所以使用ssh隧道,就是為了用它來保護明文傳輸?shù)臄?shù)據(jù),從而提升安全性,不過,在上例的場景中,只有ServerA與ServerB之間的傳輸是受ssh隧道保護的,ServerB與ServerC之間的傳輸,仍然是明文的,所以,如果想要在上述場景中使用ssh隧道進行數(shù)據(jù)轉發(fā),首先要考慮ServerB與ServerC之間的網(wǎng)絡是否可靠。

其實,當我們在創(chuàng)建隧道時如果開啟了網(wǎng)關功能,那么應用客戶端與Client之間的通訊也會面臨同樣的問題。

ssh隧道,運維,操作性系統(tǒng),Rundeck,ssh,運維

其實一般這種場景主要是為了繞過防火墻。

ssh隧道,運維,操作性系統(tǒng),Rundeck,ssh,運維

動態(tài)轉發(fā)

對于本地端口轉發(fā)和遠程端口轉發(fā),都存在兩個一一對應的端口,分別位于 SSH 的客戶端和服務端,而動態(tài)端口轉發(fā)則只是綁定了一個本地端口,而目標地址:目標端口則是不固定的。目標地址:目標端口是由發(fā)起的請求決定的,比如,請求地址為192.168.1.100:3000,則通過 SSH 轉發(fā)的請求地址也是192.168.1.100:3000。

在本地執(zhí)行以下命令,

ssh -N -D localhost:2000 root@192.168.172.133

會在本地開啟一個 socks 代理,監(jiān)聽 2000 端口

[root@kc-1 tmp]# netstat -tunlp|grep 2000                                           
tcp        0      0 127.0.0.1:2000          0.0.0.0:*               LISTEN      25496/ssh
tcp6       0      0 ::1:2000                :::*                    LISTEN      25496/ssh

我們只需要在本地配置上 socks 代理,localhost:2000 即可把所有請求通過 ssh 2000 端口轉發(fā)到 192.168.172.133 這臺機器上去了。

3. 通過跳轉主機建立 SSH 隧道

許多大公司為了保障安全,會實施嚴格的規(guī)則來訪問托管應用程序的服務器。其中一種安全措施是在客戶端和需要訪問的服務器之間放置一個網(wǎng)關,也被稱為跳轉服務器、跳轉主機或跳轉盒。

一種典型實現(xiàn)如下:首先需要使用您的憑據(jù)打開與 Jump 主機的 SSH 連接。然后,從 Jump 主機內部打開第二個 SSH 連接,以訪問需要使用另一個帳戶訪問的實際服務器。通常,這個帳戶是用于部署和運行應用程序的用戶,而不是個人帳戶。

假設您在這樣的公司工作,并且想要創(chuàng)建一個 SSH 隧道,讓連接到只能從App Server訪問的 Oracle DB Server的端口 1521。您需要做的是創(chuàng)建一個如下所示的 SSH 隧道:

ssh隧道,運維,操作性系統(tǒng),Rundeck,ssh,運維

以下命令通過跳轉主機創(chuàng)建此 SSH 隧道(系統(tǒng)將提示您輸入用戶密碼):

$ ssh -v -N appusr@appserver -J myusr@jumphost -L 1521:dbserver:1521

命令解釋:

將本地主機的端口 1521 通過和DB Server的端口 1521建立了隧道。包含以下參數(shù):

  • -v:表示啟用詳細模式,輸出詳細的連接信息,這對于調試很有用,并且不返回appserver的 shell 提示符

  • -N:表示禁用遠程命令執(zhí)行,只連接到遠程主機,不執(zhí)行任何命令,也是就是只做轉發(fā)端口。

  • appusr@appserver:表示要連接的遠程主機的用戶名和主機名。

  • -J:表示使用代理命令連接到跳板機。

  • myusr@jumphost:其中,myusr 是跳板機的用戶名,jumphost 是跳板機的主機名。

  • -L :local,表示使用本地端口轉發(fā)創(chuàng)建 ssh 隧道。

  • 1521:dbserver:1521:表示將本地端口 1521 映射到遠程主機的端口 1521。其中,1521 是本地端口號,dbserver 是遠程主機的主機名,1521 是遠程主機的端口號。

命令的作用:使用 appusr 用戶名連接到 appserver 主機,并通過跳板機 jumphost 連接到 dbserver 主機,將本地端口 1521 映射到遠程主機的端口 1521。

換句話說:您首先使用用戶myusr與jumphost建立SSH連接,然后使用用戶appusr與appserver建立另一個SSH連接,最后將端口1521從本地主機轉發(fā)到dbserver。

建立后效果: 您可以使用SQL 客戶端工具連接到遠程數(shù)據(jù)庫服務器,就像它在 localhost:1521 上運行一樣。

4. 小結

SSH 有以下功能:

  • 1)保護 tcp 會話,保護會話中明文傳輸?shù)膬热荨?/p>

  • 2)繞過防火墻或者穿透到內網(wǎng),訪問對應的服務。

常用命令:

創(chuàng)建本地轉發(fā)模式的ssh隧道,命令如下

ssh -g -N -L forwardingPort:targetIP:targetPort user@sshServerIP

本機上的 forwardingPort 將會被監(jiān)聽,訪問本機的 forwardingPort,就相當于訪問 targetIP 的 targetPort,ssh隧道建立在本機與 sshServer 之間。

創(chuàng)建遠程轉發(fā)模式的ssh隧道,命令如下

ssh -N -R forwardingPort:targetIP:targetPort user@sshServerIP

sshServer 上的 forwardingPort 將會被監(jiān)聽,訪問 sshServer 上的 forwardingPort,就相當于訪問 targetIP 的 targetPort,ssh 隧道建立在本機與 sshServer 之間。

5. 參考

SSH Tunneling: Examples, Command, Server Config

ssh端口轉發(fā):ssh隧道文章來源地址http://www.zghlxwxcb.cn/news/detail-739792.html

到了這里,關于SSH 隧道簡明教程的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • dig 簡明教程

    dig 簡明教程

    哈嘍大家好,我是咸魚 不知道大家在日常學習或者工作當中用 dig 命令多不多 dig 是 Domain Information Groper 的縮寫,對于網(wǎng)絡管理員和在域名系統(tǒng)(DNS)領域工作的小伙伴來說,它是一個非常常見且有用的工具。 無論是簡單的 DNS 解析查找還是更高級的故障排除和分析, dig 都能夠

    2024年02月08日
    瀏覽(49)
  • mpack簡明教程

    mpack簡明教程

    本文先簡單介紹MessagePack的基本概念。 然后,介紹一個MessagePack C API - MPack的通常使用。 接著嘗試對MPack截斷數(shù)據(jù)的讀取。 注:本文完整代碼見倉庫。 如果你使用過C/C++的json庫,那么上手MessagePack是比較容易的。關于C/C++ Json庫的使用可見:C++ JSON庫的一般使用方法-CSDN博客。

    2024年02月20日
    瀏覽(40)
  • Docker入門簡明教程

    Docker入門簡明教程

    Docker 是基于 Go 語言實現(xiàn)的云開源項目,是基于 Linux 的多項開源技術提供高效、敏捷和輕量級的容器方案。創(chuàng)建于 2013 年初,自從開源后就受到了廣泛的關注,從長遠的眼光來看,Docker 是未來虛擬化的一個發(fā)展的趨勢。帶來了更輕量快捷的的體驗,一臺主機可以同時運行數(shù)千

    2024年01月23日
    瀏覽(21)
  • AI繪畫工具簡明教程

    AI繪畫工具簡明教程

    官方地址 首先需要郵箱注冊,等待邀請(可能需要等待一兩天) 能成功登錄后會進入這樣一個界面 https://app.scenario.com/generators 創(chuàng)建模型 提供的圖片集上傳的時候得是jpg,還需要裁剪成正方形。批量修改圖片在線網(wǎng)站:https://www.birme.net/ 根據(jù)圖集生成圖片 官方網(wǎng)址:https://

    2024年02月11日
    瀏覽(28)
  • shell簡明教程3函數(shù)

    shell簡明教程3函數(shù)

    在本章中,您將了解為什么以及何時需要使用函數(shù)。 你將學習如何創(chuàng)建函數(shù)以及如何使用函數(shù)。 我們將討論變量及其作用域。 學習如何使用參數(shù)訪問傳遞給函數(shù)的參數(shù)。 最后,您還將學習如何使用函數(shù)處理退出狀態(tài)和返回代碼。 計算機編程和應用程序開發(fā)中有一個概念叫

    2024年02月11日
    瀏覽(28)
  • WebGPU開發(fā)簡明教程【2023】

    WebGPU開發(fā)簡明教程【2023】

    WebGPU 是一種全新的現(xiàn)代 API,用于在 Web 應用程序中訪問 GPU 的功能。 在 WebGPU 之前,有 WebGL,它提供了 WebGPU 功能的子集。 它啟用了新一類豐富的網(wǎng)絡內容,開發(fā)人員用它構建了令人驚嘆的東西。 然而,它基于 2007 年發(fā)布的 OpenGL ES 2.0 API,而該 API 又基于更舊的 OpenGL API。

    2024年02月16日
    瀏覽(26)
  • Blender骨骼動畫簡明教程

    Blender骨骼動畫簡明教程

    Blender 是首選的開源3D動畫軟件之一。 令人驚訝的是,開始創(chuàng)建簡單的角色動畫并不需要太多時間。 一旦獲得最終的 3D 角色模型,你就可以使用該軟件的眾多動畫功能和工具將其變?yōu)楝F(xiàn)實。 推薦:用 NSDT編輯器 快速搭建可編程3D場景 例如,Blender 的綁定工具將幫助你實現(xiàn)角色

    2024年02月07日
    瀏覽(22)
  • 電商3D產(chǎn)品渲染簡明教程

    電商3D產(chǎn)品渲染簡明教程

    3D 渲染讓動作電影看起來更酷,讓建筑設計變得栩栩如生,現(xiàn)在還可以幫助營銷人員推廣他們的產(chǎn)品。 從最新的《阿凡達》電影到 Spotify 的上一次營銷活動,3D 的應用讓一切變得更加美好。 在營銷領域,3D 產(chǎn)品渲染可幫助品牌創(chuàng)建產(chǎn)品的高分辨率圖像和視頻,這些圖像和視

    2024年02月13日
    瀏覽(19)
  • stable diffusion使用簡明教程

    stable diffusion使用簡明教程

    controlNet模塊使用 上面骨骼圖是通過Openpose Editor調整姿勢然后send to txt2img到這里的,使用Openpose Edito中姿勢生成需要將Openpose Editor指定為none狀態(tài)。 Preprocessor選項: Preprocessor部分選項使用教程 官方教程鏈接:Control human pose in Stable Diffusion Stable Diffusion Art (stable-diffusion-art.com) 1.

    2024年02月02日
    瀏覽(18)
  • 匯編語言簡明教程習題答案

    (2)判斷題 AX被稱為累加器,在8086程序中使用很頻繁。(?) 指令指針I(yè)P寄存器屬于通用寄存器。(?) 8086具有8個32位通用寄存器。(×) 解析:8086的寄存器有8個16位通用寄存器、4個16位段寄存器、1個16位標志寄存器和1個16位指令指針寄存器 8086編程使用邏輯地址,將其中

    2023年04月08日
    瀏覽(74)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包