ssh埠轉發的深入例項

wangzhensheng發表於2007-10-25

關於ssh埠轉發的深入例項


ssh的三個強大的埠轉發命令:
ssh -C -f -N -g -L listen_port:DST_Host:DST_port
ssh -C -f -N -g -R listen_port:DST_Host:DST_port
ssh -C -f -N -g -D listen_port

[@more@]

關於ssh埠轉發的深入例項


ssh的三個強大的埠轉發命令:
ssh -C -f -N -g -L listen_port:DST_Host:DST_port
ssh -C -f -N -g -R listen_port:DST_Host:DST_port
ssh -C -f -N -g -D listen_port

-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
然後登入到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 機器IP
這樣我們就在B機器上開了一個8888->2121的埠轉換,但是由於8888埠只能偵聽在

localhost主機上,因此,雖然我們已經可以在B機器上使用
# ftp localhost 8888 來訪問真正的ftp伺服器,但仍然無法提供給外網的機器訪問

2。login B機器
# ssh -CNfg -L 21:localhost:8888
這樣做,是做本地機器上的21->8888埠轉換,可以偵聽在任何地址上的請求。
2(1)。
如果C機器也是一臺linux機器,那也可以這樣設定:
# ssh -CNfg -R 21:localhost:8888 機器IP

3。使用C機器,可以是linux下的ftp命令,也可以是windows下的客戶端軟體都可以訪問B

機器的21埠來連線後臺真正的ftp伺服器(真正的埠是2121)
如果是按照2(1)中的設定,則訪問的地址為本機IP。

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

相關文章