SSH 端口映射(一)

轉載:http://blog.csdn.net/a351945755/article/details/21785647,http://blog.csdn.net/gaoming655/article/details/7231517,http://blog.aizhet.com/NET/12044.html,html

SSH 端口映射mysql

工做中常常會遇到一些服務器訪問受限的問題:某些服務器只有私網ip地址,僅能經過內網ip鏈接,或如mysql服務器或登陸其它機器的ssh。linux

能夠將遠端服務器一個端口remote_port綁定到本地端口port,sql

一。 linuxubuntu

 

首先要記住一件事情就是:安全

SSH 端口轉發天然須要 SSH 鏈接,而 SSH 鏈接是有方向的,從 SSH Client 到 SSH Server 。服務器

而咱們所要訪問的應用也是有方向的,應用鏈接的方向也是從應用的 Client 端鏈接到應用的 Server 端。好比須要咱們要訪問Internet上的Web站點時,Http應用的方向就是從咱們本身這臺主機(Client)到遠處的Web Server。ssh

若是SSH鏈接和應用的鏈接這兩個鏈接的方向一致,那咱們就說它是本地轉發。socket

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

若是SSH鏈接和應用的鏈接這兩個鏈接的方向不一樣,那咱們就說它是遠程轉發。測試

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

<PIC>

本地轉發:

  在本地這臺機器上監聽一個端口,而後全部訪問這個端口的數據都會經過ssh 隧道傳輸到遠端的對應端口上,下面是例子。

  本地端口轉發綁定的是 lookback 接口,這意味着只有 localhost 或者 127.0.0.1 才能使用本機的端口轉發 , 其餘機器發起的鏈接只會獲得「 connection refused. 」。要想讓其餘機器也能共享這個隧道來轉發的話須要在配置文件中使用GatewayPorts 關鍵字,或者直接命令行下使用"-g"參數。

另外本地轉發命令中的 <remote host> 和 <SSH hostname> 能夠是不一樣的主機。

<PIC>

遠程轉發與本地轉發正好相反,打開ssh隧道之後,在遠端服務器監聽一個端口,全部訪問遠端服務器指定端口都會經過隧道傳輸到本地的對應端口上,下面是例子。

<PIC>
 

 

ssh的三個強大的端口轉發命令:

轉發到遠端:ssh -C -f -N -g -L 本地端口:目標IP:目標端口 用戶名@目標IP

轉發到本地:ssh -C -f -N -g –R 本地端口:目標IP:目標端口 用戶名@目標IP

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

其中

-C,是進行數據壓縮。

-f,是後臺認證用戶/密碼,一般和-N連用,不用登陸到遠程主機。只有當提示用戶名密碼的時候才轉向前臺。

-N,是不執行遠端命令,在只是端口轉發時這條命令頗有用處。

-g ,在-L/-R/-D參數中,是容許遠端主機鏈接本地轉發端口,若是不加這個參數,只容許本地主機創建鏈接。

-L,則是將本地端口映射到遠端主機端口。本地端口:目標IP:目標端口

  將本地機(客戶機)的某個端口轉發到遠端指定機器的指定端口。

  工做原理: 本地機器上分配了一個 socket 偵聽 port 端口, 一旦這個端口上有鏈接, 該鏈接就通過安全通道轉發出去, 同時遠程主機和 host 的 hostport 端口創建鏈接. 能夠在配置文件中指定端口的轉發。

  只有 root 才能轉發特權端口。IPv6 地址用另外一種格式說明: port/host/hostport

-R,代表是將遠端主機端口映射到本地端口。本地端口:目標IP:目標端口

  將遠程主機(服務器)的某個端口轉發到本地端指定機器的指定端口

   工做原理: 遠程主機上分配了一個 socket 偵聽 port 端口, 一旦這個端口上有鏈接, 該鏈接就通過安全通道轉向出去, 同時本地主機和 host 的 hostport 端口創建鏈接. 能夠在配置文件中指定端口的轉發.。

  只有用 root 登陸遠程主機才能轉發特權端口.。IPv6 地址用另外一種格式說明: port/host/hostport

-p :被登陸的ssd服務器的sshd服務端口。

-D port

  指定一個本地機器 「動態的'’ 應用程序端口轉發.。

  工做原理: 本地機器上分配了一個 socket 偵聽 port 端口, 一旦這個端口上有了鏈接, 該鏈接就通過安全通道轉發出去, 根據應用程序的協議能夠判斷出遠程主機將和哪裏鏈接.。目前支持 SOCKS4 協議, 將充當 SOCKS4 服務器。

   只有 root 才能轉發特權端口,能夠在配置文件中指定動態端口的轉發。

應用舉例

1. 將發往本機的80端口訪問轉發到192.168.1.1的8080端口

ssh -C -f -N -g -L 80:192.168.1.1:8080  user@192.168.1.1

2. 將發往192.168.1.1的8080訪問轉發到本機的80端口

ssh -C -f -N -g -R 80:192.168.1.1:8080 user@192.168.1.1

(user爲主機192.168.1.1上的用戶)

-N - 不使用Shell窗口,純作轉發的時候用,若是你在映射完成後繼續在服務器上輸入命令,去掉這個參數便可

例子A:咱們想遠程管理服務器上的MySQL,那麼使用下面命令

ssh -L 3306:127.0.0.1:3306 user@emlog-vps -N  

運行這個命令以後,ssh將會自動將服務器的3306映射到本機的3306端口,咱們就可使用任意MySQL客戶端鏈接 localhost:3306便可訪問到服務器上的MySQL了。

例子B:一次同時映射多個端口

ssh -L 8888:www.host.com:80 -L 110:mail.host.com:110 -L    25:mail.host.com:25 user@host -N  

命令將自動把服務器的80,110,25端口分別映射到本機的8888,110和25端口

注:以上命令在ubuntu 9.10 上測試經過...

 

下一篇

相關文章
相關標籤/搜索