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

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

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

接下來(lái)我們訪(fǎng)問(wèn)localhost的8888端口來(lái)訪(fǎng)問(wèn)ftp服務(wù)器了

