ssh的三個強大的端口轉發命令:
ssh -C -f -N -g -L listen_port:DST_Host:DST_port user@Tunnel_Host
ssh -C -f -N -g -R listen_port:DST_Host:DST_port user@Tunnel_Host
ssh -C -f -N -g -D listen_port user@Tunnel_Host
-f Fork into background after authentication.
後臺認證用戶/密碼,一般和-N連用,不用登陸到遠程主機。
-p port Connect to this port. Server must be on the same port.
被登陸的ssd服務器的sshd服務端口。
-L port:host:hostport
將
本地機(客戶機)的某個端口轉發到遠端指定機器的指定端口. 工做原理是這樣的, 本地機器上分配了一個 socket 偵聽 port 端口,
一旦這個端口上有了鏈接, 該鏈接就通過安全通道轉發出去, 同時遠程主機和 host 的 hostport 端口創建鏈接.
能夠在配置文件中指定端口的轉發. 只有 root 才能轉發特權端口. IPv6 地址用另外一種格式說明: port/host/hostport
-R port:host:hostport
將
遠程主機(服務器)的某個端口轉發到本地端指定機器的指定端口. 工做原理是這樣的, 遠程主機上分配了一個 socket 偵聽 port 端口,
一旦這個端口上有了鏈接, 該鏈接就通過安全通道轉向出去, 同時本地主機和 host 的 hostport 端口創建鏈接.
能夠在配置文件中指定端口的轉發. 只有用 root 登陸遠程主機才能轉發特權端口. IPv6 地址用另外一種格式說明:
port/host/hostport
-D port
指定一個本地機器 「動態的'’ 應用程序端口轉發.
工做原理是這樣的, 本地機器上分配了一個 socket 偵聽 port 端口, 一旦這個端口上有了鏈接, 該鏈接就通過安全通道轉發出去,
根據應用程序的協議能夠判斷出遠程主機將和哪裏鏈接. 目前支持 SOCKS4 協議, 將充當 SOCKS4 服務器. 只有 root
才能轉發特權端口. 能夠在配置文件中指定動態端口的轉發.
-C Enable compression.
壓縮數據傳輸。
-N Do not execute a shell or command.
不執行腳本或命令,一般與-f連用。
-g Allow remote hosts to connect to forwarded ports.
在-L/-R/-D參數中,容許遠程主機鏈接到創建的轉發的端口,若是不加這個參數,只容許本地主機創建鏈接。注:這個參數我在實踐中彷佛始終不起做用,參見III)
實例說明:
一臺服務器提供ftp服務,由於ftp傳輸是明文密碼,若是不作ssh端口以前,咱們能夠經過tcpdump命令很容易的捕捉到明文信息。因此咱們要對21端口進行轉發:
(ftp-server)# ssh -CNfg -R 2121:localhost:21 root@10.4.2.50
而後登陸到10.4.2.50機器,咱們能夠經過netstat -an|grep :2121查看端口已經偵聽
(10.4.2.50)# ftp localhost 21就能夠登陸到ftp-server了,並且tcpdump沒法捕獲到有效的信息。
2121端口任意選擇,只要是機器上沒有佔用的端口就行
來一個稍微複雜一點的,作網關的例子:
假
如內網有一臺提供ftp(linux,port is 2121,稱爲A機器)的機器,經過網關服務器(linux,port is
8888,稱爲B機器)進去,如今外網有一臺C機器須要訪問網關服務器的某個端口(port is
21)來訪問內網的ftp服務器。你們能夠看到,其實這就像是一個基於ssh的防火牆程序,好,下面咱們來具體操做:
1。login A 機器
# ssh -CNfg -R 8888:localhost:2121 root@B機器IP
這樣咱們就在B機器上開了一個8888->2121的端口轉換,可是因爲8888端口只能偵聽在localhost主機上,所以,雖然咱們已經能夠在B機器上使用
# ftp localhost 8888 來訪問真正的ftp服務器,但仍然沒法提供給外網的機器訪問
2。login B機器
# ssh -CNfg -L 21:localhost:8888 root@localhost
這樣作,是作本地機器上的21->8888端口轉換,能夠偵聽在任何地址上的請求。
2(1)。
若是C機器也是一臺linux機器,那也能夠這樣設置:
# ssh -CNfg -R 21:localhost:8888 root@C機器IP
3。使用C機器,能夠是linux下的ftp命令,也能夠是windows下的客戶端軟件均可以訪問B機器的21端口來鏈接後臺真正的ftp服務器(真正的端口是2121)linux
實際操做:shell
1.內網機器操做
ssh -CNfg -R 8880:localhost:8080 root@60.247.10.Xwindows
2.公網機器操做
ssh -CNfg -L 8881:localhost:8880 root@localhosttomcat
這樣公網中的機器只須要訪問http://60.247.10.X:8881安全
就訪問到了我內網的那臺部署tomcat的機器。服務器