ssh的三個強大的端口轉(zhuǎn)發(fā)命令:
|
-f Fork into background after authentication.
后臺認證用戶/密碼,通常和-N連用,不用登錄到遠程主機。
-p port Connect to this port. Server must be on the same port.
被登錄的ssd服務(wù)器的sshd服務(wù)端口。
-L port:host:hostport
將本地機(客戶機)的某個端口轉(zhuǎn)發(fā)到遠端指定機器的指定端口. 工作原理是這樣的, 本地機器上分配了一個 socket 偵聽 port 端口, 一旦這個端口上有了連接, 該連接就經(jīng)過安全通道轉(zhuǎn)發(fā)出去, 同時遠程主機和 host 的 hostport 端口建立連接. 可以在配置文件中指定端口的轉(zhuǎn)發(fā). 只有 root 才能轉(zhuǎn)發(fā)特權(quán)端口. IPv6 地址用另一種格式說明: port/host/hostport
-R port:host:hostport
將遠程主機(服務(wù)器)的某個端口轉(zhuǎn)發(fā)到本地端指定機器的指定端口. 工作原理是這樣的, 遠程主機上分配了一個 socket 偵聽 port 端口, 一旦這個端口上有了連接, 該連接就經(jīng)過安全通道轉(zhuǎn)向出去, 同時本地主機和 host 的 hostport 端口建立連接. 可以在配置文件中指定端口的轉(zhuǎn)發(fā). 只有用 root 登錄遠程主機才能轉(zhuǎn)發(fā)特權(quán)端口. IPv6 地址用另一種格式說明: port/host/hostport
-D port
指定一個本地機器 “動態(tài)的'’ 應(yīng)用程序端口轉(zhuǎn)發(fā). 工作原理是這樣的, 本地機器上分配了一個 socket 偵聽 port 端口, 一旦這個端口上有了連接, 該連接就經(jīng)過安全通道轉(zhuǎn)發(fā)出去, 根據(jù)應(yīng)用程序的協(xié)議可以判斷出遠程主機將和哪里連接. 目前支持 SOCKS4 協(xié)議, 將充當 SOCKS4 服務(wù)器. 只有 root 才能轉(zhuǎn)發(fā)特權(quán)端口. 可以在配置文件中指定動態(tài)端口的轉(zhuǎn)發(fā).
-C Enable compression.
壓縮數(shù)據(jù)傳輸。
-N Do not execute a shell or command.
不執(zhí)行腳本或命令,通常與-f連用。
-g Allow remote hosts to connect to forwarded ports.
在-L/-R/-D參數(shù)中,允許遠程主機連接到建立的轉(zhuǎn)發(fā)的端口,如果不加這個參數(shù),只允許本地主機建立連接。注:這個參數(shù)我在實踐中似乎始終不起作用,參見III)
實例說明:
一臺服務(wù)器提供ftp服務(wù),因為ftp傳輸是明文密碼,如果不做ssh端口之前,我們可以通過tcpdump命令很容易的捕捉到明文信息。所以我們要對21端口進行轉(zhuǎn)發(fā):
(ftp-server)# ssh -CNfg -R 2121:localhost:21 root@10.4.2.50
然后登錄到10.4.2.50機器,我們可以通過netstat -an|grep :2121查看端口已經(jīng)偵聽
(10.4.2.50)# ftp localhost 21就可以登錄到ftp-server了,而且tcpdump無法捕獲到有效的信息。
2121端口任意選擇,只要是機器上沒有占用的端口就行
來一個稍微復(fù)雜一點的,做網(wǎng)關(guān)的例子:
假如內(nèi)網(wǎng)有一臺提供ftp(linux,port is 2121,稱為A機器)的機器,通過網(wǎng)關(guān)服務(wù)器(linux,port is 8888,稱為B機器)進去,現(xiàn)在外網(wǎng)有一臺C機器需要訪問網(wǎng)關(guān)服務(wù)器的某個端口(port is 21)來訪問內(nèi)網(wǎng)的ftp服務(wù)器。大家可以看到,其實這就像是一個基于ssh的防火墻程序,好,下面我們來具體操作:
1。login A 機器
# ssh -CNfg -R 8888:localhost:2121 root@B機器IP
這樣我們就在B機器上開了一個8888->2121的端口轉(zhuǎn)換,但是由于8888端口只能偵聽在localhost主機上,因此,雖然我們已經(jīng)可以在B機器上使用
# ftp localhost 8888 來訪問真正的ftp服務(wù)器,但仍然無法提供給外網(wǎng)的機器訪問
2。login B機器
# ssh -CNfg -L 21:localhost:8888 root@localhost
這樣做,是做本地機器上的21->8888端口轉(zhuǎn)換,可以偵聽在任何地址上的請求。
2(1)。
如果C機器也是一臺linux機器,那也可以這樣設(shè)置:
# ssh -CNfg -R 21:localhost:8888 root@C機器IP
3。使用C機器,可以是linux下的ftp命令,也可以是windows下的客戶端軟件都可以訪問B機器的21端口來連接后臺真正的ftp服務(wù)器(真正的端口是2121)
如果是按照2(1)中的設(shè)置,則訪問的地址為本機IP。
簡單介紹一個在linux下使用的設(shè)置ssh端口轉(zhuǎn)換的程序
http://gstm.sourceforge.net/?page_id=5
Gnome SSH Tunnel Manager

在windows機器下使用putty也可以建立端口轉(zhuǎn)發(fā)
假設(shè)從windows機器上將本地的8888端口轉(zhuǎn)發(fā)到B的21端口,可以做如下設(shè)置
Connection->SSH-Tunnels中可以設(shè)置putty的端口轉(zhuǎn)發(fā),Source port為listen_port,填8888,Destionation為DST_Host:DST_port,填寫B(tài)機器IP:21,設(shè)置完了點Add.
注意是local還是remote?
putty tunnel setting

設(shè)置好后,我們可以在dos下用netstat命令看一下是否開啟了本地的轉(zhuǎn)發(fā)端口
netstat into the DOS

接下來我們訪問localhost的8888端口來訪問ftp服務(wù)器了