ssh埠轉發(ssh隧道)

mi_zy發表於2021-02-06

Windows 中的 OpenSSH:<OpenSSH 在 2018 年秋季已新增至 Windows,幷包含在 Windows 10 和 Windows Server 2019 中>

openssh windows10 download 下載與安裝:

實驗室平臺:

語音引擎主機:

Linux wiseatc-HP-Pavilion-Gaming-Desktop-790-08xx 4.15.0-72-generic #81~16.04.1-Ubuntu SMP Tue Nov 26 16:34:21 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

sudo ps aux |grep ssh
[sudo] wiseatc 的密碼: 

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND

root      1119  0.0  0.0  65512  5464 ?        Ss    2019   0:01 /usr/sbin/sshd -D
wiseatc   2702  0.0  0.0  44792  3772 ?        S    20:41   0:00 ssh -C -f -N -g -R 9009:localhost:22 wiseatc@182.150.56.5 -p 9090
wiseatc   3306  0.0  0.0  44792  3912 ?        S    20:42   0:00 ssh -C -f -N -g -R 9009:localhost:22 wiseatc@182.150.56.5 -p 9090
—— 182.150.56.5來自 四川省成都市武侯區 電信

/usr/local/bin$ cat ra.sh
#!/bin/env bash
#FIEL DESCRIPTION: remote assistant demon script
#FILE AUTHOR: YangKai
#FILE VERSION: 1.0.0
#FILE UPDATE LOG: 2019.10.15, initial version
#Copyright Wisesoft co. ltd 2019
# USAGE: ra.sh serverport loginstring serversshport
#eg. ra.sh 9008 wiseatc@183.150.56.5 9090
ps -A | grep -v grep | grep "ssh -C -f -N -g -R $1:localhost:22 $2 -p $3" > /dev/null
ret=$?
if [ $ret -ne 0 ]; then
    echo "Resume remote assistant...."
    ssh -C -f -N -g -R $1:localhost:22 $2 -p $3

$crontab -e

#m h  dom mon dow   command

*/1 * * * *  /bin/bash  /usr/local/bin/ ra.sh 9009 wiseatc@182.150.56.5 9090

ssh -C -f -N -g -R 9009:localhost:22  wiseatc@182.150.56.5 -p 9090

9009/tcp,udp Pichat Server - Peer to peer chat software 官方

webshpere管理工具,預設的埠號為9090


$sudo crontab -e

18 * * * * sudo ps aux|grep SDI|awk {' print$2'}|xargs sudo kill -9

(root     23112  3.5  0.0 146428 26252 ?        Sl   20:18   1:40 python /home/wiseatc/AIsafe/PII/SDI/ SDI.py)


    SSH 會自動加密和解密所有 SSH 客戶端與服務端之間的網路資料。SSH 還同時提供了一個非常有用的功能,這就是埠轉發。它能夠將其他 TCP 埠的網路資料透過 SSH 連結來轉發,並且自動提供了相應的加密及解密服務。這一過程有時也被叫做“隧道”(tunneling),( ssh的轉發有四類: 遠端轉發、本地轉發、動態轉發和X轉發 。把TCP流重定向到ssh連線叫做“轉發”,這個ssh連線叫做“隧道”), SSH 埠轉發能夠提供兩大功能:

  1. 加密 SSH Client 端至 SSH Server 端之間的通訊資料。
  2. 突破防火牆的限制完成一些之前無法建立的 TCP 連線。

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

SSH基本用法

ssh -p 22 user@host
引數:
-p:指定埠號。
user:登入的使用者名稱。
host:登入的主機。

    SSH 不僅僅能夠自動加密和解密 SSH 客戶端與服務端之間的網路資料,同時,SSH 還能夠提供了一個非常有用的功能,那就是埠轉發,即將TCP 埠的網路資料,轉發到指定的主機某個埠上,在轉發的同時會對資料進行相應的加密及解密。如果工作環境中的防火牆限制了一些網路埠的使用,但是允許 SSH 的連線,那麼也是能夠透過使用SSH轉發後的埠進行通訊。轉發,主要分為本地轉發與遠端轉發兩種型別。

    SSH 埠轉發自然需要 SSH 連線,而 SSH 連線是有方向的,從 SSH Client 到 SSH Server 。而我們的應用也是有方向的,比如需要連線 LDAP Server 時,LDAP Server 自然就是 Server 端,我們應用連線的方向也是從應用的 Client 端連線到應用的 Server 端。如果這兩個連線的方向一致,那我們就說它是本地轉發。而如果兩個方向不一致,我們就說它是遠端轉發。

——另一個方便記憶的方法是,Server 端的埠都是預定義的固定埠(SSH Server 的埠 22,LDAP 的埠 389),而 Client 端的埠都是動態可供我們選擇的埠(如上述例子中選用的 7001 埠)。如果 Server 端的兩個埠都在同一臺機器,Client 端的兩個埠都在另一臺機器上,那麼這就是本地連線;如果這四個埠 交叉分佈在兩個機器上,每臺機器各有一個 Server 端埠,一個 Client 端埠,那就是遠端連線。

—————————— ——————————————

https://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/

https://blog.csdn.net/randyleonard/article/details/9049335

ssh -C -f -N -g -L listen_port:DST_Host:DST_port user@Tunnel_Host 

ssh -L < local port>:< remote host>:< remote port> < SSH hostname>

*本地轉發命令中的 <remote host> 和 <SSH hostname> 可以是不同的機器

ssh -C -f -N -g -R listen_port: DST_Host:DST_port user@ Tunnel_Host 

ssh -R < local port>:< remote host>:< remote port> < SSH hostname>

ssh -C -f -N -g -D listen_port user@Tunnel_Host

ssh -D < local port> < SSH Server>

只能在建立 SSH 連線的同時建立埠轉發,而不能給一個已經存在的 SSH 連線增加埠轉發。

    引數:
    -C:壓縮資料-f :後臺認證使用者/密碼,通常和-N連用,不用登入到遠端主機。-N :不執行指令碼或命令,通常與-f連用。-g :在-L/-R/-D引數中,允許遠端主機連線到建立的轉發的埠,如果不加這個引數,只允許本地主機建立連線。-L : 本地埠:目標IP:目標埠-D : 動態埠轉發-R : 遠端埠轉發-T :不分配 TTY 只做代理用-q :安靜模式,不輸出 錯誤/警告 資訊

    建立隧道時的常用選項有:

    "-L選項":表示使用本地埠轉發建立ssh隧道

    "-R選項":表示使用遠端埠轉發建立ssh隧道

    "-N選項": 表示建立隧道以後不連線到sshServer端,通常與"-f"選項連用

    "-f選項":表示在後臺執行ssh隧道,通常與"-N"選項連用

    "-g選項":表示ssh隧道對應的轉發埠將監聽在主機的所有IP中,不使用"-g選項"時,轉發埠預設只監聽在主機的本地迴環地址中, "-g"表示開啟閘道器模式,遠端埠轉發中,無法開啟閘道器功能。 本地埠轉發繫結的是 lookback 介面,這意味著只有 localhost 或者 127.0.0.1 才能使用本機的埠轉發 , 其他機器發起的連線只會得到“ connection refused. ”。好在 SSH 同時提供了 GatewayPorts 關鍵字,我們可以透過指定它與其他機器共享這個本地埠轉發。

    保持長時間連線:有些路由器會把長時間沒有通訊的連線斷開。SSH客戶端的TCPKeepAlive選項可以避免這個問題的發生( 一種方法是,去掉-N引數,加入一個定期能產生輸出的命令。例如: top或者vmstat),在 ssh的命令上加上-o TCPKeepAlive=yes來開啟。PuTTY的設定如下:

     如果想要能夠正常的使用ssh埠轉發,我們還需要做出正確的配置才行,之前一直沒有說明,是因為openssh預設的配置就是支援埠轉發的。

    如果想要ssh埠轉發能夠正常工作,需要在ssh服務端的配置檔案中將AllowTcpForwarding的值設定為yes。

    此處所指的ssh服務端即ssh隧道中的一頭,扮演ssh服務端角色的那臺主機。

    當隧道建立以後,經過一段時間後,ssh隧道連結可能會被斷開,這有可能是因為ssh客戶端和ssh服務端長時間沒有通訊,於是ssh服務端主動斷開了連結,如果想要解決這個問題,可以在ssh服務端進行配置,調整ssh服務端的ClientAliveInterval配置和ClientAliveCountMax配置即可。


    1、本地埠轉發:

        指定到本地(客戶端)主機上給定TCP埠或Unix套接字的連線將轉發到遠端端的給定主機和埠或Unix套接字。這是透過 分配一個套接字來偵聽本地端的TCP埠(可選地繫結到指定的bind地址)或Unix套接字來實現的。無論何時連線到本地埠或套接字,都會透過安全通道轉發連線,並從遠端計算機連線到主機埠hostport或Unix套接字remote socket。

    埠轉發也可以在配置檔案中指定。只有超級使用者才能轉發特權埠。IPv6地址可以透過將地址括在方括號中來指定。預設情況下,根據GatewayPorts設定繫結本地埠。但是,可以使用顯式繫結地址將連線繫結到特定地址。“localhost”的bind地址表示偵聽埠只能繫結為本地使用,而空地址或“*”表示埠應該可以從所有介面使用。

    應用 :在實驗室主用ATC系統APP-FDO2席位的firefox瀏覽器開啟168.192.11.24:15672,顯示語音識別電腦168.192.11.99的RabbitMQ介面(user:mqadmin;pw:wiseatc123)

    只需在 APP-FDO2執行:ssh -f -N -L   168.192.11.24:15672:168.192.11.99:15672 wiseatc@168.192.11.99

    ssh -L  [本地地址:]本地埠:遠端地址:遠端埠 遠端使用者@遠端地址

    將本地WIN10-WAN(192.168.5.100/127.0.0.1)的某個埠,對映到RHEL5.8 DB(192.168.5.60 安裝了二所mysql)機器上面的,在 192.168.5.100執行當訪問本地 192.168.5.100埠3306時,通訊資料會被轉發(透過 建立的ssh隧道)到目標主機 192.168.5.60的埠3306,這就是本地轉發。

      ssh -L 127.0.0.1:3306:192.168.5.60:3306 root@192.168.5.60

      因為本地網路卡地址是可以省略的,上面的轉發,可以簡寫為:

        ssh -L 3306:192.168.5.60:3306 root@192.168.5.60

        當然,ssh連線的時候,若兩臺機器的使用者名稱相同,也是可以省略的,即命令可以簡寫為:

          ssh -L 3306:192.168.5.60:3306 192.168.13.142

          例如: ssh -f -N -L 192.168.5.100:9906:192.168.5.60:3306 TWR1@192.168.5.60

          "-N選項",當配合此選項建立ssh隧道時,並不會開啟遠端shell連線到目標主機; 9906埠已經被監聽

          "-f"選項表示後臺執行ssh隧道,即使我們關閉了建立隧道時所使用的ssh會話,對應的ssh隧道也不會消失

          "-g"選項( Win10中必須在-L引數之前)可以開啟"閘道器功能",開啟後, 192.168.5.100中的 所有IP(多網路卡情況)都會監聽對應埠 -ok

          本地WIN10-WAN(192.168.5.100/127.0.0.1)執行mysql -h127.0.0.1 -P9906 -uroot可連線192.168.5.60主機的二所資料庫; 辦公網其它主機訪問 WIN10-WAN(多網路卡: 192.168.5.100/辦公網IP192.168.6.200的9906埠,即訪問mysql; 另考慮埠177, 二樓辦公網的主機使用 Xbrowser透過實驗室WIN10主機訪問川大RHEL6.5主機圖形桌面)

          2、SSH的遠端操作

          將機器A(192.168.13.148)中test資料夾複製到B機器(192.168.13.149)。

          在A機器上面,執行如下命令:
            tar -cz test | ssh dequan@192.168.13.149 'tar -xz'

            在機器A(192.168.13.148)處檢視B機器(192.168.13.149)是否監聽了1080埠。

            在A機器上面,執行如下命令:
              ssh dequan@192.168.13.149 'netstat -tln |grep 1080'

              3、SSH的遠端轉發

                  指定要將到遠端(伺服器)主機上給定TCP埠或Unix套接字的連線轉發到本地端。 這是透過分配一個套接字來偵聽遠端端的TCP埠或Unix套接字來實現的。無論何時連線到此埠或Unix套接字,都會透過安全通道轉發連線,並從本地計算機連線到由主機埠hostport或本地套接字指定的顯式目標,如果未指定顯式目標,ssh將充當SOCKS 4/5代理,並將連線轉發到遠端SOCKS客戶端請求的目的地。埠轉發也可以在配置檔案中指定。只有以root使用者身份登入遠端計算機時,才能轉發特權埠。IPv6地址可以透過將地址括在方括號中來指定。預設情況下,伺服器上的TCP偵聽套接字將僅繫結到環回介面。這可以透過指定繫結地址來覆蓋。空的bind地址或地址'*',表示遠端套接字應該偵聽所有介面。只有啟用了伺服器的GatewayPorts選項(請參閱sshd config(5)),才能成功指定遠端繫結地址。如果port引數為“0”,則偵聽埠將在伺服器上動態分配,並在執行時報告給客戶端。當與-O forward一起使用時,分配的埠將列印到標準輸出。

              場景( 只要訪問公司外網 ServerA的對應IP埠,即可訪問到內網ServerB中的mysql服務):

                  公司有一臺伺服器ServerB,ServerB處於公司的內網中,公司內網中的所有主機都透過路由器訪問網際網路(典型的NAT網路),ServerB中有提供mysql服務; 公司在公網上有另外一臺伺服器ServerA,ServerA有自己的公網IP,你有權控制ServerA,這時,我們就可以利用ServerA達到目的。由於 我們無法從ServerA中使用ssh命令連線到ServerB,但是,我們可以從ServerB(辦公內網 192.169.7.199)中使用ssh命令連線到ServerA(公網 139.196.99.48)。 我們現在需要一種方法,能夠從ServerB中建立SSH隧道連線到ServerA,並且,隧道建立後,ServerA中會監聽9906埠,以便別人能夠透過外網訪問,也就是說,我們需要一種方法,能夠滿足如下兩個條件

              條件1:從ServerB中主動連線到ServerA,即 在ServerB中執行建立隧道的命令,連線到ServerA。

              條件2:隧道建立後,轉發埠需要 監聽在ServerA中,以便利用ServerA訪問到內網的ServerB。

              這種方法就是"遠端轉發"。

              ssh -C -f -N -g -R 39009:localhost:28080 uav@139.196.99.48

              ServerA的IP為 168.192.11.223(假設此IP為公網IP); ServerB(語音識別)的辦公網IP為 168.192.11.99

                                                                          ssh -C -f -N -g -R listen_port: DST_Host: DST_port user@ Tunnel_Host  

              *測試?:

              在APP-FDO-2主機168.192.11.24執行: ssh -C -f -N -g -R 3333:168.192.11.99:15672 hp@168.192.11.223

              ——在Win10主機 168.192.11.223開啟( 其它IP不行)127.0.0.1:3333 可以訪問 168.192.11.99的埠15672(RabbitMQ服務)

              1)APP-FDO-2主機168.192.11.24:

              root      2011  0.0  0.0  66604  1236 ?        Ss   Feb05   0:00 /usr/sbin/sshd

              root      5283  0.0  0.0  60504  1600 ?        Ss   13:26   0:00 ssh -C -f -N -g -R *:3333:168.192.11.99:15672 hp@168.192.11.223

              [root@APP-FDO-2 ~]# netstat -tanp |grep ssh

              Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name

              tcp        0      0 168.192.11.24:59455         168.192.11.223:22           ESTABLISHED 5283/ssh

              tcp        0      0 168.192.11.24:35919          168.192.11.99:15672         ESTABLISHED 5283/ssh

              tcp        0      0 168.192.11.24:22            168.192.11.99:32850         ESTABLISHED 12143/sshd

              tcp        0     40 168.192.11.24:22            168.192.11.223:56969        ESTABLISHED 4641/sshd

              2)RabbitMQ 主機 168.192.11.99:

              wiseatc@wiseatc$ sudo ps -aux |grep ssh

              root     25690  0.0  0.0  56600  3960 pts/25   S+   2月07   0:00 sudo ssh 168.192.11.24

              root     25692  0.0  0.0  49056  6412 pts/25   S+   2月07   0:00 ssh 168.192.11.24

              root     27948  0.0  0.0  94928  6980 ?        Ss   10:04   0:00 sshd: wiseatc [priv]

              wiseatc@wiseatc$ sudo netstat  -antp |grep ssh

              tcp        0      0 168.192.11.99:22        168.192.11.223:62672    ESTABLISHED 27948/sshd: wiseatc

              tcp        0      0 168.192.11.99:32850     168.192.11.24:22        ESTABLISHED 25692/ssh

              3)Win10主機168.192.11.223:

              PS C:\WINDOWS\system32> netstat -ano -p tcp

                協議  本地地址          外部地址        狀態           PID

               TCP    168.192.11.223:22      168.192.11.24:59455    ESTABLISHED     14268

              TCP    168.192.11.223:56969   168.192.11.24:22       ESTABLISHED     14464

              TCP    168.192.11.223:62672   168.192.11.99:22       ESTABLISHED     468

               TCP    127.0.0.1:3333         0.0.0.0:0              LISTENING       6812

               TCP    127.0.0.1:3333         127.0.0.1:51647        ESTABLISHED     6812

              PS C:\WINDOWS\system32> tasklist | findstr  6812

              sshd.exe                      6812 Services                   0      7,692 K

              https://www.cnblogs.com/liujunjun/p/14212418.html

              *當使用遠端轉發的命令時,並沒有指定監聽ServerA的外網IP,也沒有使用"-g選項"開啟閘道器功能,這是因為,即使你在命令中指定了IP地址,最終在ServerA中還是會 只監聽127.0.0.1的 9906如果你一心想要透過別的主機訪問ServerA的9906埠,也可以使用其他程式去反代ServerA的9906埠,還有,我在實際的使用過程中,如果使用遠端轉發穿透到內網,ssh隧道將會非常不穩定,隧道會莫名其妙的消失或者失效,特別是在沒有固定IP的網路內,網上有些朋友提供了autossh的解決方案可以試一試。

              139.196.99.48主機執行:mysql -h127.0.0.1 -P9906 可訪問到內網的mysql。

              示例:

              目前B機器,只能在自己127.0.0.1的80埠監聽並轉發,如何讓B機器作為代理,轉發其他機器的請求到A機器上面呢?比如,現在有一臺機器C(192.168.13.143),C不能訪問A,但是能夠訪問B。如何讓C利用B來訪問A呢?
              此時,需要將B的監聽,由127.0.0.1:8081,改為0:0.0.0:8081,修改sshd的配置/etc/ssh/sshd_config。
                 vim /etc/ssh/sshd_config如果有GatewayPorts no改為GatewayPorts yes沒有,新增即可(),然後重啟sshd
                 sudo service sshd restart
                然後重新,設定動態轉發,如下:
                  ssh -f -g  -N -R 8081:127.0.0.1:80 dequan@192.168.13.149
                  可以看到,此時B機器,已經監聽了0:0.0.0:8081

                  測試:

                  curl -x 192.168.13.149:8081 127.0.0.1

                  4、SSH的動態轉發

                      本地轉發,遠端轉發,但是前提都是要求有一個固定的應用服務端的埠號。動態轉發 選擇了 7001 作為本地的埠號,其實在這裡 SSH 是建立了一個 SOCKS 代理服務。可以直接使用 localhost:7001 來作為正常的 SOCKS 代理來使用,直接在瀏覽器或 MSN 上設定即可。在 SSH Client 端無法訪問的網站現在也都可以正常瀏覽。

                      指定本地“動態”應用程式級埠轉發。這是透過分配一個套接字來監聽本地端的埠,可以選擇繫結到指定的 bind_address。無論何時連線到此埠,都會透過安全通道轉發連線,然後使用應用程式協議確定從遠端計算機連線到何處。目前支援SOCKS4和SOCKS5協議,ssh將充當SOCKS伺服器。只有root使用者可以轉發特權埠。動態埠轉發也可以在配置檔案中指定。IPv6地址可以透過將地址括在方括號中來指定。只有超級使用者才能轉發特權埠。預設情況下,根據GatewayPorts設定繫結本地埠。但是,可以使用顯式繫結地址將連線繫結到特定地址。“localhost”的bind地址表示偵聽埠只能繫結為本地使用,而空地址或“*”表示埠應該可以從所有介面使用。



                      

                  對於SSH的本地轉發和遠端轉發,都需要將本地埠和遠端埠一一繫結,格式如下:

                  ssh -D [本地地址:]本地埠號 遠端使用者@遠端地址

                  ssh -N -f -D 0.0.0.0:1080 123.123.123.123 # 將埠繫結在0.0.0.0上

                  埠繫結在0.0.0.0的介面上,方法是加上引數-b 0.0.0.0。同時還需要開啟 SSH伺服器端的一個選項-GatewayPorts。預設情況下它應當是被開啟的。如果被關閉的話,可以在/etc /sshd_config中修改GatewayPorts no為GatewayPorts yes來開啟它。

                  127.0.0.1和0.0.0.0地址的區別 比如實驗室上網電腦,一個外放地址A,一個內網地址B,如果繫結的埠指定了0.0.0.0,那麼透過內網地址或外網地址都可以訪問應用

                  • *在伺服器中, 0.0.0.0指的是本機上的所有IPV4地址,如果一個主機有兩個IP地址,192.168.1.1 和 10.1.2.1,並且該主機上的一個服務監聽的地址是0.0.0.0,那麼透過兩個ip地址都能夠訪問該服務。
                  • *在路由中,0.0.0.0表示的是預設路由,即當路由表中沒有找到完全匹配的路由的時候所對應的路由。


                  5、X協議轉發

                      我們日常工作當中,可能會經常會遠端登入到 Linux/Unix/Solaris/HP 等機器上去做一些開發或者維護,也經常需要以 GUI 方式執行一些程式,比如要求圖形化介面來安裝 DB2/WebSphere 等等。這時候通常有兩種選擇來實現:VNC 或者 X 視窗,讓我們來看看後者。

                      使用 X 視窗通常需要分別安裝:X Client 和 X Server 。在本例中我們的 X Client 就是所訪問的遠端 Linux/Unix/Solaris/HP,而我們的 X Server 則是發起訪問的本地機器(例如你面前正在使用的筆記本或桌上型電腦)。把 X Client 端的 X 視窗顯示在 X Server 端需要先行在 X Client 端指定 X Server 的位置,命令格式如下:

                  export DISPLAY=< X Server IP>:< display #>.< virtual #>

                  export DISPLAY=myDesktop:1.0     // 然後直接執行 X 應用即可,X 視窗就會自動在我們的本地端開啟。

                  一切執行正常,但是,這時候 IT 部門突然在遠端 Linux/Unix/Solaris/HP 前面加了一道防火牆。非常不幸的是,X 協議並不在允許透過的列表之內。怎麼辦?只能使用 VNC 了麼?不,其實只要使用了 SSH 埠轉發即可透過,同時也對 X 通訊資料做了加密,真是一舉兩得。

                  建立命令也很簡單,直接從本地機器(X Server 端)發起一個如下的 SSH 連線即可:

                  $ ssh -X < SSH Server>

                  建立連線之後就可以直接執行遠端的 X 應用。注意建立 X 轉發之後會自動設定 DISPLAY 環境變數,通常會被設定成 localhost:10.0,我們無需也不應該在連線之後再進行修改此環境變數。

                  一個比較常見的場景是,我們的本地機器是 Windows 作業系統,這時可以選擇開源的 XMing 來作為我們的 XServer,而 SSH Client 則可以任意選擇了,例如 PuTTY,Cygwin 均可以配置 訪問 SSH 的同時建立 X 轉發。

                  6、參考示例

                  1)有A,B,C 3臺伺服器, A,C有公網IP, B是某IDC的伺服器無公網IP. A透過B連線C的80埠(A<=>B<=>C), 那麼在B上執行如下命令即可: 

                  $ ssh -CfNg -L 6300:127.0.0.1:80 userc@C  // 將本地機(客戶機B)的6300埠轉發到遠端機器C的80埠

                  $ ssh -CfNg -R 80:127.0.0.1:6300 usera@A // 將遠端主機(伺服器A)的80埠轉發到本地端機器B的6300埠

                  伺服器A和伺服器C之間, 利用 跳板伺服器B建立了加密隧道. 在A上連線127.0.0.1:80, 就等同C上的80埠. 需要注意的是, 伺服器B上的6300埠的資料沒有加密, 可被監聽, 例: # tcpdump -s 0-i lo port 6300

                  2) 情景:在家SSH連單位內網,但是內網使用NAT,所以沒辦法連回去。

                  在單位能連外網的內網主機(LAN_ip)上執行

                  ssh -NfR 2222:localhost:22 home_ip  (前提是   home_ip需是公網IP

                  -R : 建立反向連線 將 home_ip port轉發

                  現在,到home_ip上面
                  ssh localhost -p 2222
                  就連到NAT後面的內網機器了。Destination ( LAN_ip) <- |NAT| <- Source ( home_ip)

                  3) 如何檢視隧道是否建立完善, 檢視程式:

                  ps aux | grep ssh

                  檢視埠:

                  netstat -ntl                   sudo netstat -lnput | grep ssh

                  4)、 多主機轉發應用, 本地轉發命令中的 <remote host> 和 <SSH hostname> 可以是不同的機器

                  在 SSH Client(C) 執行下列命令來建立 SSH 連線以及埠轉發:

                  1
                  $ ssh -g -L 7001:<B>:389  <D>

                       然後在我們的應用客戶端(A)上配置連線機器(C )的 7001 埠即可。注意我們在命令中指定了“ -g ”引數以保證機器(A)能夠使用機器(C)建立的本地埠轉發。而另一個值得注意的地方是,在上述連線中,(A)<-> (C) 以及 (B)<->(D) 之間的連線並不是安全連線,它們之間沒有經過 SSH 的加密及解密。

                  5)

                  來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7970627/viewspace-2756488/,如需轉載,請註明出處,否則將追究法律責任。

                  相關文章