日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SSH的端口转发:本地转发Local Forward和远程转发Remote Forward

發(fā)布時間:2024/9/5 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SSH的端口转发:本地转发Local Forward和远程转发Remote Forward 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

http://zhumeng8337797.blog.163.com/blog/static/100768914201172125444948/

實戰(zhàn) SSH 端口轉(zhuǎn)發(fā)

https://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/

SSH的端口轉(zhuǎn)發(fā):本地轉(zhuǎn)發(fā)Local Forward和遠(yuǎn)程轉(zhuǎn)發(fā)Remote Forward

關(guān)于使用ssh portforwarding來進(jìn)行翻墻的操作,網(wǎng)絡(luò)上已經(jīng)有很多很好的文章,我在這里只是畫兩個圖解釋一下。

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

SSH 端口轉(zhuǎn)發(fā)自然需要 SSH 連接,而 SSH 連接是有方向的,從 SSH Client 到 SSH Server 。

而我們所要訪問的應(yīng)用也是有方向的,應(yīng)用連接的方向也是從應(yīng)用的 Client 端連接到應(yīng)用的 Server 端。比如需要我們要訪問Internet上的Web站點時,Http應(yīng)用的方向就是從我們自己這臺主機(Client)到遠(yuǎn)處的Web Server。

如果SSH連接和應(yīng)用的連接這兩個連接的方向一致,那我們就說它是本地轉(zhuǎn)發(fā)。

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

?

如果SSH連接和應(yīng)用的連接這兩個連接的方向不同,那我們就說它是遠(yuǎn)程轉(zhuǎn)發(fā)。

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

?

本地轉(zhuǎn)發(fā)在本地這臺機器上監(jiān)聽一個端口,然后所有訪問這個端口的數(shù)據(jù)都會通過ssh 隧道傳輸?shù)竭h(yuǎn)端的對應(yīng)端口上,下面是例子。

本地端口轉(zhuǎn)發(fā)綁定的是 lookback 接口,這意味著只有 localhost 或者 127.0.0.1 才能使用本機的端口轉(zhuǎn)發(fā) , 其他機器發(fā)起的連接只會得到“ connection refused. ”。要想讓其他機器也能共享這個隧道來轉(zhuǎn)發(fā)的話需要在配置文件中使用GatewayPorts 關(guān)鍵字,或者直接命令行下使用"-g"參數(shù)。

另外本地轉(zhuǎn)發(fā)命令中的 <remote host> 和 <SSH hostname> 可以是不同的主機。

?

遠(yuǎn)程轉(zhuǎn)發(fā)與本地轉(zhuǎn)發(fā)正好相反,打開ssh隧道以后,在遠(yuǎn)端服務(wù)器監(jiān)聽一個端口,所有訪問遠(yuǎn)端服務(wù)器指定端口都會通過隧道傳輸?shù)奖镜氐膶?yīng)端口上,下面是例子。

?

這里是一篇很好的介紹SSH PortForwarding的文章http://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/

?

可以將遠(yuǎn)端服務(wù)器一個端口remote_port綁定到本地端口port,其中-C是進(jìn)行數(shù)據(jù)壓縮,-f是后臺操作,只有當(dāng)提示用戶名密碼的時候才轉(zhuǎn)向前臺。-N是不執(zhí)行遠(yuǎn)端命令,在只是端口轉(zhuǎn)發(fā)時這條命令很有用處。-g 是允許遠(yuǎn)端主機連接本地轉(zhuǎn)發(fā)端口。-R表明是將遠(yuǎn)端主機端口映射到本地端口。如果是-L,則是將本地端口映射到遠(yuǎn)端主機端口。

ssh的三個強大的端口轉(zhuǎn)發(fā)命令:

轉(zhuǎn)發(fā)到遠(yuǎn)端:ssh -C -f -N -g -L 本地端口:目標(biāo)IP:目標(biāo)端口 用戶名@目標(biāo)IP

轉(zhuǎn)發(fā)到本地:ssh -C -f -N -g –R 本地端口:目標(biāo)IP:目標(biāo)端口 用戶名@目標(biāo)IP

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

-C:壓縮數(shù)據(jù)傳輸。

-f :后臺認(rèn)證用戶/密碼,通常和-N連用,不用登錄到遠(yuǎn)程主機。

-N :不執(zhí)行腳本或命令,通常與-f連用。

-g :在-L/-R/-D參數(shù)中,允許遠(yuǎn)程主機連接到建立的轉(zhuǎn)發(fā)的端口,如果不加這個參數(shù),只允許本地主機建立連接。

-L 本地端口:目標(biāo)IP:目標(biāo)端口

將本地機(客戶機)的某個端口轉(zhuǎn)發(fā)到遠(yuǎn)端指定機器的指定端口. 工作原理是這樣的, 本地機器上分配了一個 socket 偵聽 port 端口, 一旦這個端口上有了連接, 該連接就經(jīng)過安全通道轉(zhuǎn)發(fā)出去, 同時遠(yuǎn)程主機和 host 的 hostport 端口建立連接. 可以在配置文件中指定端口的轉(zhuǎn)發(fā). 只有 root 才能轉(zhuǎn)發(fā)特權(quán)端口. IPv6 地址用另一種格式說明: port/host/hostport

-R本地端口:目標(biāo)IP:目標(biāo)端口

將遠(yuǎn)程主機(服務(wù)器)的某個端口轉(zhuǎn)發(fā)到本地端指定機器的指定端口. 工作原理是這樣的, 遠(yuǎn)程主機上分配了一個 socket 偵聽 port 端口, 一旦這個端口上有了連接, 該連接就經(jīng)過安全通道轉(zhuǎn)向出去, 同時本地主機和 host 的 hostport 端口建立連接. 可以在配置文件中指定端口的轉(zhuǎn)發(fā). 只有用 root 登錄遠(yuǎn)程主機才能轉(zhuǎn)發(fā)特權(quán)端口. IPv6 地址用另一種格式說明: port/host/hostport

-p :被登錄的ssd服務(wù)器的sshd服務(wù)端口。

-D port

指定一個本地機器 “動態(tài)的'’ 應(yīng)用程序端口轉(zhuǎn)發(fā). 工作原理是這樣的, 本地機器上分配了一個 socket 偵聽 port 端口, 一旦這個端口上有了連接, 該連接就經(jīng)過安全通道轉(zhuǎn)發(fā)出去, 根據(jù)應(yīng)用程序的協(xié)議可以判斷出遠(yuǎn)程主機將和哪里連接. 目前支持 SOCKS4 協(xié)議, 將充當(dāng) SOCKS4 服務(wù)器. 只有 root 才能轉(zhuǎn)發(fā)特權(quán)端口. 可以在配置文件中指定動態(tài)端口的轉(zhuǎn)發(fā).

應(yīng)用舉例

1.將發(fā)往本機的80端口訪問轉(zhuǎn)發(fā)到174.139.9.66的8080端口

ssh -C -f -N -g?-L?80:174.139.9.66:8080??? ?master@174.139.9.66

2.將發(fā)往174.139.9.66的8080訪問轉(zhuǎn)發(fā)到本機的80端口

ssh -C -f -N -g?-R?80:174.139.9.66:8080????????????master@174.139.9.66

?

-N - 不使用Shell窗口,純做轉(zhuǎn)發(fā)的時候用,如果你在映射完成后繼續(xù)在服務(wù)器上輸入命令,去掉這個參數(shù)即可

例子A:我們想遠(yuǎn)程管理服務(wù)器上的MySQL,那么使用下面命令

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

運行這個命令之后,ssh將會自動將服務(wù)器的3306映射到本機的3306端口,我們就可以使用任意MySQL客戶端連接 localhost:3306即可訪問到服務(wù)器上的MySQL了。

?

?

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

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

這個命令將自動把服務(wù)器的80,110,25端口映射到本機的8888,110和25端口 以上命令在ubuntu 9.10 上測試通過...

?

端口映射讓外部用戶同時訪問內(nèi)部多個應(yīng)用


如下圖所示,這是企業(yè)部署NAT服務(wù)器的典型案例。如果現(xiàn)在企業(yè)內(nèi)部有兩臺服務(wù)器,分別為WEB服務(wù)器(192.168.0.3)與ERP服務(wù)器(192.168.0.2)。現(xiàn)在企業(yè)想讓出差在外的員工,也可以通過互聯(lián)網(wǎng)訪問企業(yè)內(nèi)部的這兩個應(yīng)用,該如何設(shè)計呢?

???? 一、基于端口訪問的一般原理。

  在講解NAT服務(wù)器的具體端口映射配置之前,筆者覺得讀者有必要先了解一下基于端口訪問的一般原理。這有利于讀者了解下面的具體配置。下面筆者以員工訪問WEB服務(wù)器為例,談?wù)劵诙丝谠L問的基本步驟。假設(shè)現(xiàn)在某個用戶需要訪問WEB服務(wù)器,則客戶端的瀏覽器(假設(shè)采用的端口為3000)與WEB服務(wù)器(假設(shè)采用的端口為80)是如何來進(jìn)行通信的呢?

  第一步:發(fā)起連接請求。當(dāng)用戶需要查看公司網(wǎng)頁時,用戶所用的主機會像WEB服務(wù)器發(fā)送請求。在這個發(fā)起請求的過程中,會有一些參數(shù)傳遞。如在發(fā)送請求的過程中,用戶所用的主機需要知道WEB服務(wù)器的IP地址、所采用的協(xié)議(HTTP)等。另外就是兩個端口信息。一是用戶瀏覽器所用的端口,即為3000。二是WEB服務(wù)器網(wǎng)站所用的端口(如果采用的是HTTP服務(wù),則默認(rèn)為80端口)。

  第二步:WEB服務(wù)器轉(zhuǎn)發(fā)請求。當(dāng)服務(wù)器接受到這個請求后,會分析數(shù)據(jù)包。他經(jīng)過分析包發(fā)現(xiàn),這個請求是要求端口為80的應(yīng)用軟件來負(fù)責(zé)的。服務(wù)器確定了負(fù)責(zé)人之后,就會把這個請求轉(zhuǎn)發(fā)給具體的負(fù)責(zé)人,即WEB應(yīng)用服務(wù)器來處理。

  第三步:服務(wù)器會把從WEB應(yīng)用服務(wù)那邊反饋回來的網(wǎng)頁傳送給用戶所用的計算機。在傳送的時候,其也會制定要把這個網(wǎng)頁給你的那個3000端口(瀏覽器)對應(yīng)的應(yīng)用軟件。

  第四步:用戶的計算機收到數(shù)據(jù)包之后,也會對這個數(shù)據(jù)包進(jìn)行分析,來判斷需要把這個數(shù)據(jù)包轉(zhuǎn)發(fā)給哪個端口(應(yīng)用服務(wù))。分析后發(fā)現(xiàn)是轉(zhuǎn)交給3000端口的,就會把這個數(shù)據(jù)包轉(zhuǎn)發(fā)給瀏覽器。

二、基于端口映射的NAT服務(wù)器配置。

  其實基于端口映射的NAT服務(wù)器其工作原理就跟上面這個基于端口訪問的工作過程類似。只是這里的NAT服務(wù)器就相當(dāng)于用戶主機,而用戶相當(dāng)于內(nèi)部的服務(wù)器。由于用戶需要通過外網(wǎng)訪問企業(yè)內(nèi)部應(yīng)用的話,通常情況下要求內(nèi)網(wǎng)服務(wù)器也要求有合法的外網(wǎng)IP。只有私網(wǎng)IP地址的服務(wù)器是無法直接跟外部客戶進(jìn)行通信的。為此,如果沒有端口映射的話,用戶如果要同時訪問內(nèi)部的WEB服務(wù)器與ERP服務(wù)器,則就需要有兩個公網(wǎng)IP地址。但是,大家都知道現(xiàn)在公網(wǎng)IP地址嚴(yán)重缺乏。在沒有足夠多的IP地址的情況下,該如何實現(xiàn)這種需求呢?那就知道通過端口映射來完成。

  如上圖所示,用戶需要訪問企業(yè)內(nèi)部的WEB服務(wù)與ERP服務(wù)器,他只需要知道NAT服務(wù)地址與WEB服務(wù)器與ERP服務(wù)器所采用的端口即可。如果

WEB服務(wù)器采用的端口為80,

ERP服務(wù)器所采用的端口為5050。

而NAT服務(wù)器的IP地址假設(shè)為202.96.92.100的話,

?

那么當(dāng)用戶訪問WEB服務(wù)器時,只需要輸入http:// 202.96.92.100即可。由于HTTP協(xié)議默認(rèn)采用的是80端口,故這里不用配置端口號。如果WEB服務(wù)器中把這個端口改為了3000,則在訪問的時候就需要使用http:// 202.96.92.100:3000(地址+端口號)的形式了。用戶要訪問內(nèi)部的ERP服務(wù)器也是類似的,只要把NAT服務(wù)器的地址以及ERP服務(wù)器所采用的端口在客戶端上進(jìn)行配置即可。

  可見通過NAT服務(wù)器的端口映射功能,可以讓外部用戶同時訪問企業(yè)內(nèi)部的WEB服務(wù)器與ERP服務(wù)器。

那要實現(xiàn)這個需求具體該如何配置呢?

  NAT服務(wù)器讓內(nèi)部的局域網(wǎng)用戶可以連接到互聯(lián)網(wǎng),以便用戶能夠收發(fā)互聯(lián)網(wǎng)郵件、瀏覽互聯(lián)網(wǎng)上的網(wǎng)站等等。但是默認(rèn)情況下外部用戶是不能夠訪問內(nèi)部的服務(wù)器。如果需要實現(xiàn)以上功能的話,就需要進(jìn)行專門的配置。

  如上圖中,

內(nèi)部局域網(wǎng)計算機(192.168.0.2)為WEB服務(wù)器,其采用的端口為80。

如果現(xiàn)在外部用戶需要訪問這個WEB服務(wù)器站點,則用戶只知道這個WEB服務(wù)器的地址為202.96.92.100(NAT服務(wù)器的地址)。

而WEB服務(wù)器默認(rèn)采用的端口為80。當(dāng)外部用戶通過瀏覽器訪問企業(yè)內(nèi)部的WEB服務(wù)器時,

他會在瀏覽器中輸入http:// 202.96.92.100路經(jīng)來連接網(wǎng)站。

NAT服務(wù)器會將此請求發(fā)送給內(nèi)部的計算機WEB服務(wù)器(192.168.0.2),并由WEB服務(wù)器將這個請求轉(zhuǎn)發(fā)給端口為80的軟件來負(fù)責(zé)。WEB服務(wù)器會將網(wǎng)頁傳送給NAT服務(wù)器,再由NAT服務(wù)器負(fù)責(zé)將網(wǎng)頁傳送給外部用戶的計算機。

如果用戶要訪問內(nèi)部的ERP服務(wù)器,其過程也是如此。

那么現(xiàn)在的問題是,NAT服務(wù)器怎么判斷要把用戶HTTP請求發(fā)送給服務(wù)器(192.168.0.2)而不是發(fā)送給(192.168.0.3)呢?

  這主要是根據(jù)端口來判斷的。也就是說在NAT服務(wù)器中有一個端口映射的規(guī)則,只要用戶訪問的目的端口是80,就把這個請求轉(zhuǎn)發(fā)給WEB服務(wù)器;若請求的端口是5050,則就把這個請求發(fā)送給ERP服務(wù)器。這就是端口映射的實質(zhì)。了解這個內(nèi)容之后,那么了解下面的配置也就簡單多了。打開路由和遠(yuǎn)程訪問主控制窗口,選擇要配置的服務(wù)器。然后選擇IP路由選擇、NAT/基本防火墻。并雙擊右方對外連接的網(wǎng)絡(luò)接口(注意這里不要選擇連接內(nèi)網(wǎng)的網(wǎng)絡(luò)接口),選擇服務(wù)和端口標(biāo)簽。然后直接從服務(wù)列表中選取要對外開發(fā)的服務(wù),如選擇WEB服務(wù)器。在公用地址中選擇在此接口,表示由互聯(lián)網(wǎng)服務(wù)提供商指派的NAT服務(wù)器的公網(wǎng)IP地址。然后再設(shè)置,如果把這個服務(wù)請求轉(zhuǎn)發(fā)給內(nèi)部的IP地址為192.168.0.2的WEB服務(wù)器。通過這個簡單的配置,就實現(xiàn)基于端口的映射。

?

三、改善NAT服務(wù)器的性能與便利性。

  可見這個端口映射配置是很簡單的。但是其難點在于如何提高這個NAT服務(wù)器的性能,如何讓用戶使用的更加方便。這是網(wǎng)絡(luò)管理員所需要考慮的。對此筆者有如下幾個建議可供大家參考。

  1、利用域名來代替IP地址。當(dāng)用戶訪問企業(yè)內(nèi)部的網(wǎng)站服務(wù)器時,如果讓他們輸入服務(wù)器的IP地址,對普通用戶來說可能有點難度。要記住這202.96.92.100十一個沒有絲毫關(guān)系的數(shù)字有很大的難度。如果能夠把這個IP地址轉(zhuǎn)換為有實際意義的網(wǎng)址那就最好了。在企業(yè)內(nèi)部,可以自己部屬一個DNS服務(wù)器,把IP地址轉(zhuǎn)換為網(wǎng)址。那么內(nèi)部員工可以直接通過網(wǎng)址來訪問WEB服務(wù)器。但是在互聯(lián)網(wǎng)上,企業(yè)可不能自己隨便定義域名。為了提高用戶訪問的便捷性,企業(yè)網(wǎng)絡(luò)管理員最好能夠像當(dāng)?shù)氐挠蛎詸C構(gòu),申請一個合適的域名并關(guān)聯(lián)到自己的NAT服務(wù)器公網(wǎng)IP地址。那么以后外部用戶訪問內(nèi)部WEB服務(wù)器時,只需要輸入像新浪那樣的地址就可以了。而不用輸入這些難以記憶的地址。

  2、如果企業(yè)可以申請到多個IP地址的話,那么最好能夠分開來部署。即企業(yè)可以申請兩個ADSL帳號。其中一個專門用來連接內(nèi)部的服務(wù)器;而另外一個用來內(nèi)部員工跟互聯(lián)網(wǎng)的通信。這么做主要是為了減輕NAT服務(wù)器的壓力,提高其性能。如企業(yè)只有一個ADSL帳號的話,那么無論是外部用戶訪問企業(yè)內(nèi)部服務(wù)器;還是企業(yè)內(nèi)部員工訪問互聯(lián)網(wǎng),其數(shù)據(jù)流都要通過這臺NAT服務(wù)器來處理。為此,如果企業(yè)數(shù)據(jù)流量比較大或者NAT服務(wù)器配置不怎么理想的話,那么很可能這個NAT服務(wù)器就成為了企業(yè)網(wǎng)絡(luò)訪問的瓶頸資源。如果把他們分開,則可以減輕NAT服務(wù)器的壓力,提高外部用戶訪問企業(yè)內(nèi)部服務(wù)器的效率。

  3、配置合適的ICMP數(shù)據(jù)包策略,以加強阻擋黑客利用ICMP的攻擊行為。使用ICMP攻擊的原理實際上就是通過Ping大量的數(shù)據(jù)包使得NAT服務(wù)器的CPU使用率居高不下而崩潰。一般情況下黑客通常在一個時段內(nèi)連續(xù)向計算機發(fā)出大量請求而導(dǎo)致CPU占用率太高而死機。而且會使用多臺肉雞同時向NAT服務(wù)器發(fā)送數(shù)據(jù)包。基于ICMP的攻擊可以分為兩大類,一是ICMP攻擊導(dǎo)致拒絕服務(wù);另外一個是基于重定向的路由欺騙技術(shù)。無論是哪一類攻擊,都會給NAT服務(wù)器產(chǎn)生致命的影響。為此為了NAT服務(wù)器的安全,最好配置合適的ICMP包策略。如可以拒絕響應(yīng)別人的ICMP請求。如此攻擊者就無法對NAT服務(wù)器發(fā)起ICMP攻擊了。

?

SSH隧道與端口轉(zhuǎn)發(fā)及內(nèi)網(wǎng)穿透

大家都知道SSH是一種安全的傳輸協(xié)議,用在連接服務(wù)器上比較多。不過其實除了這個功能,它的隧道轉(zhuǎn)發(fā)功能更是吸引人。下面是個人根據(jù)自己的需求以及在網(wǎng)上查找的資料配合自己的實際操作所得到的一些心得。

SSH/plink命令的基本資料:

首先,認(rèn)識下這三個非常強大的命令:

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

相關(guān)參數(shù)的解釋:?
-f Fork into background after authentication.?
后臺認(rèn)證用戶/密碼,通常和-N連用,不用登錄到遠(yuǎn)程主機。

-L port:host:hostport?
將本地機(客戶機)的某個端口轉(zhuǎn)發(fā)到遠(yuǎn)端指定機器的指定端口. 工作原理是這樣的, 本地機器上分配了一個 socket 偵聽 port 端口, 一旦這個端口上有了連接, 該連接就經(jīng)過安全通道轉(zhuǎn)發(fā)出去, 同時遠(yuǎn)程主機和 host 的 hostport 端口建立連接. 可以在配置文件中指定端口的轉(zhuǎn)發(fā). 只有 root 才能轉(zhuǎn)發(fā)特權(quán)端口. IPv6 地址用另一種格式說明: port/host/hostport

-R port:host:hostport?
將遠(yuǎn)程主機(服務(wù)器)的某個端口轉(zhuǎn)發(fā)到本地端指定機器的指定端口.?工作原理是這樣的, 遠(yuǎn)程主機上分配了一個 socket 偵聽 port 端口, 一旦這個端口上有了連接, 該連接就經(jīng)過安全通道轉(zhuǎn)向出去, 同時本地主機和 host 的 hostport 端口建立連接. 可以在配置文件中指定端口的轉(zhuǎn)發(fā). 只有用 root 登錄遠(yuǎn)程主機才能轉(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é)議可以判斷出遠(yuǎn)程主機將和哪里連接. 目前支持 SOCKS4 協(xié)議, 將充當(dāng) 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ù)中,允許遠(yuǎn)程主機連接到建立的轉(zhuǎn)發(fā)的端口,如果不加這個參數(shù),只允許本地主機建立連接。注:這個參數(shù)我在實踐中似乎始終不起作用。

以上摘錄自:http://chenweiguang.blogspot.com/2009/03/ssh.html

建立本地SSH隧道例子

在我們計劃建立一個本地SSH隧道之前,我們必須清楚下面這些數(shù)據(jù):

  • 中間服務(wù)器d的IP地址
  • 要訪問服務(wù)器c的IP地址
  • 要訪問服務(wù)器c的端口
  • 現(xiàn)在,我們把上面這張圖變得具體一些,給這些機器加上IP地址。并且根據(jù)下面這張圖列出我們的計劃:

    ?

  • 需要訪問234.234.234.234的FTP服務(wù),也就是端口21
  • 中間服務(wù)器是123.123.123.123
  • 現(xiàn)在我們使用下面這條命令來達(dá)成我們的目的(192.168.0.100上執(zhí)行)

    1.ssh -N -f?? -L?? ?2121:234.234.234.234:21??? 123.123.123.123

    2.ftp://localhost:2121????????# 現(xiàn)在訪問本地2121端口,就能連接234.234.234.234的21端口了

    這里我們用到了SSH客戶端的三個參數(shù),下面我們一一做出解釋:

    • -N 告訴SSH客戶端,這個連接不需要執(zhí)行任何命令。僅僅做端口轉(zhuǎn)發(fā)
    • -f 告訴SSH客戶端在后臺運行
    • -L 做本地映射端口,被冒號分割的三個部分含義分別是
      • 需要使用的本地端口號
      • 需要訪問的目標(biāo)機器IP地址(IP: 234.234.234.234)
      • 需要訪問的目標(biāo)機器端口(端口: 21)
    • 最后一個參數(shù)是我們用來建立隧道的中間機器的IP地址(IP: 123.123.123.123)

    ?

    我們再重復(fù)一下-L參數(shù)的行為。-L X:Y:Z的含義是,將IP為Y的機器的Z端口通過中間服務(wù)器映射到本地機器的X端口。

    在這條命令成功執(zhí)行之后,我們已經(jīng)具有繞過公司防火墻的能力,并且成功訪問到了我們喜歡的一個FTP服務(wù)器了。

    如何建立遠(yuǎn)程SSH隧道

    通過建立本地SSH隧道,我們成功地繞過防火墻開始下載FTP上的資源了。那么當(dāng)我們在家里的時候想要察看下載進(jìn)度怎么辦呢?大多數(shù)公司的網(wǎng)絡(luò)是通過路由器接入互聯(lián)網(wǎng)的,公司內(nèi)部的機器不會直接與互聯(lián)網(wǎng)連接,也就是不能通過互聯(lián)網(wǎng)直接訪問。通過線路D-B-A訪問公司里的機器a便是不可能的。也許你已經(jīng)注意到了,雖然D-B-A這個方向的連接不通,但是A-B-D這個方向的連接是沒有問題的。那么,我們能否利用一條已經(jīng)連接好的A-B-D方向的連接來完成D-B-A方向的訪問呢?答案是肯定的,這就是遠(yuǎn)程SSH隧道的用途。

    與本地SSH一樣,我們在建立遠(yuǎn)程SSH隧道之前要清楚下面幾個參數(shù):

    • 需要訪問內(nèi)部機器的遠(yuǎn)程機器的IP地址(這里是123.123.123.123)
    • 需要讓遠(yuǎn)程機器能訪問的內(nèi)部機器的IP地址(這里因為是想把本機映射出去,因此IP是127.0.0.1)
    • 需要讓遠(yuǎn)程機器能訪問的內(nèi)部機器的端口號(端口:22)

    在清楚了上面的參數(shù)后,我們使用下面的命令來建立一個遠(yuǎn)程SSH隧道

    1.ssh -N -f?-R?2222:127.0.0.1:22??????123.123.123.123

    現(xiàn)在,在IP是123.123.123.123的機器上我們用下面的命令就可以登陸公司的IP是192.168.0.100的機器了。

    1.ssh -p 2222 localhost

    -N,-f 這兩個參數(shù)我們已經(jīng)在本地SSH隧道中介紹過了。我們現(xiàn)在重點說說參數(shù)-R。該參數(shù)的三個部分的含義分別是:

    • 遠(yuǎn)程機器使用的端口(2222)
    • 需要映射的內(nèi)部機器的IP地址(127.0.0.1)
    • 需要映射的內(nèi)部機器的端口(22)

    例如:-R X:Y:Z 就是把我們內(nèi)部的Y機器的Z端口映射到遠(yuǎn)程機器的X端口上。

    建立SSH隧道的幾個技巧

    自動重連

    隧道可能因為某些原因斷開,例如:機器重啟,長時間沒有數(shù)據(jù)通信而被路由器切斷等等。因此我們可以用程序控制隧道的重新連接,例如一個簡單的循環(huán)或者使用?djb’s daemontools?. 不管用哪種方法,重連時都應(yīng)避免因輸入密碼而卡死程序。關(guān)于如何安全的避免輸入密碼的方法,請參考我的?如何實現(xiàn)安全的免密碼ssh登錄?。這里請注意,如果通過其他程序控制隧道連接,應(yīng)當(dāng)避免將SSH客戶端放到后臺執(zhí)行,也就是去掉-f參數(shù)。

    保持長時間連接

    有些路由器會把長時間沒有通信的連接斷開。SSH客戶端的TCPKeepAlive選項可以避免這個問題的發(fā)生,默認(rèn)情況下它是被開啟的。如果它被關(guān)閉了,可以在ssh的命令上加上-o TCPKeepAlive=yes來開啟。

    另一種方法是,去掉-N參數(shù),加入一個定期能產(chǎn)生輸出的命令。例如: top或者vmstat。下面給出一個這種方法的例子:

    1.ssh -R 2222:localhost:22 123.123.123.123 "vmstat 30"

    檢查隧道狀態(tài)

    有些時候隧道會因為一些原因通信不暢而卡死,例如:由于傳輸數(shù)據(jù)量太大,被路由器帶入stalled狀態(tài)。這種時候,往往SSH客戶端并不退出,而是卡死在那里。一種應(yīng)對方法是,使用SSH客戶端的ServerAliveInterval和ServerAliveCountMax選項。 ServerAliveInterval會在隧道無通信后的一段設(shè)置好的時間后發(fā)送一個請求給服務(wù)器要求服務(wù)器響應(yīng)。如果服務(wù)器在 ServerAliveCountMax次請求后都沒能響應(yīng),那么SSH客戶端就自動斷開連接并退出,將控制權(quán)交給你的監(jiān)控程序。這兩個選項的設(shè)置方法分別是在ssh時加入-o ServerAliveInterval=n和-o ServerAliveCountMax=m。其中n, m可以自行定義。

    如何將端口綁定到外部地址上

    使用上面的方法,映射的端口只能綁定在127.0.0.1這個接口上。也就是說,只能被本機自己訪問到。如何才能讓其他機器訪問這個端口呢?我們可以把這個映射的端口綁定在0.0.0.0的接口上,方法是加上參數(shù)-b 0.0.0.0。同時還需要打開SSH服務(wù)器端的一個選項-GatewayPorts。默認(rèn)情況下它應(yīng)當(dāng)是被打開的。如果被關(guān)閉的話,可以在/etc /sshd_config中修改GatewayPorts no為GatewayPorts yes來打開它。

    通過SSH隧道建立SOCKS服務(wù)器

    如果我們需要借助一臺中間服務(wù)器訪問很多資源,一個個映射顯然不是高明的辦法(事實上,高明確實沒有用這個方法)。幸好,SSH客戶端為我們提供了通過SSH隧道建立SOCKS服務(wù)器的功能。

    通過下面的命令我們可以建立一個通過123.123.123.123的SOCKS服務(wù)器。

    1.ssh -N -f -D 1080 123.123.123 # 將端口綁定在127.0.0.1上

    2.ssh -N -f -D 0.0.0.0:1080 123.123.123.123 # 將端口綁定在0.0.0.0上

    通過SSH建立的SOCKS服務(wù)器使用的是SOCKS5協(xié)議,在為應(yīng)用程序設(shè)置SOCKS代理的時候要特別注意。

    以上摘錄自:http://blog.jianingy.com/content/…

    @@@@@@@@@@@@@@@@@@@@@@@@@@@

    1 >?反向隧道技術(shù)

    情景:節(jié)假日需要回公司加班。但是公司是內(nèi)網(wǎng),使用NAT,所以沒辦法連回去。

    現(xiàn)在公司機器(LAN_ip)上執(zhí)行

    ssh -NfR 2222:localhost:22 home_ip

    -R : 建立反向連接 將 home_ip port轉(zhuǎn)發(fā)

    現(xiàn)在,到home_ip上面
    ssh localhost -p 2222
    就跑在NAT后面的公司機器。就是后門了。灰鴿子木馬用的也是反向鏈接。

    Destination (LAN_ip) <- |NAT| <- Source (home_ip)

    2>端口轉(zhuǎn)發(fā)

    情景:本機不允許訪問www.xxx.com這個網(wǎng)站,但是遠(yuǎn)程主機(remote_ip)可以。

    ssh -f -N -L 31609:www.xxx.com:80?user@remote_ip

    現(xiàn)在我們就可以在本地打開?http://localhost:31609?訪問www.xxx.com了。

    3>?SOCKS代理

    情景: 本機不允許訪問某些網(wǎng)站,但是遠(yuǎn)程主機(remote_ip)可以,并且公司沒有組織你連接remote_ip。

    ssh -NfD 8888?user@remote_ip

    現(xiàn)在在瀏覽器socks 5 proxy設(shè)置為localhost:8888,所有之前無法訪問的網(wǎng)站現(xiàn)在都可以訪問了。

    @@@@@@@@@@@@@@@@@@@

    古人以“夜不閉戶”、“路不拾遺”來形容大治之世。他們認(rèn)為大治時,人們的道德水平已經(jīng)很高了。而早期Internet的形成似乎也是符合這種思想的。Internet的初衷是相互信任和相互分享,它的這種“信任”建立在“大治”甚至“天下大同”的假想上。隨著互聯(lián)網(wǎng)的商業(yè)化和平民化,Internet的安全性就顯得越來越脆弱了,不僅網(wǎng)絡(luò)攻擊、網(wǎng)絡(luò)詐騙盛行,也有一些網(wǎng)絡(luò)管理者肆意檢測、更改、阻斷用戶通信的行為SSH的一些特性在很多場合可以解決這些問題。

    ssh的基本用法在命令行也強大之ssh一文中做了最基本的介紹。ssh是安全的遠(yuǎn)程登錄工具,在與遠(yuǎn)程主機進(jìn)行交互時,ssh協(xié)議把原始數(shù)據(jù)進(jìn)行了加密并壓縮,從而保證了數(shù)據(jù)在網(wǎng)絡(luò)傳輸過程的安全。利用這一原理,我們也可以用ssh把其它的明文傳輸?shù)腡CP數(shù)據(jù)流通過ssh的連接傳輸,這就是本文要講到的ssh轉(zhuǎn)發(fā)/隧道技術(shù)。下圖表示一個ssh連接(圖片來自http://www.ssh.com)

    ssh的轉(zhuǎn)發(fā)有四類:遠(yuǎn)程轉(zhuǎn)發(fā)、本地轉(zhuǎn)發(fā)、動態(tài)轉(zhuǎn)發(fā)和X轉(zhuǎn)發(fā)。把TCP流重定向到ssh連接叫做“轉(zhuǎn)發(fā)”,這個ssh連接叫做“隧道”。

    假設(shè)場景:受限網(wǎng)絡(luò)內(nèi)主機A,受限網(wǎng)絡(luò)防火墻F,受限網(wǎng)絡(luò)外主機B,受限網(wǎng)絡(luò)外主機C、D、E。用戶為主機A的管理者且擁有主機B的ssh賬號,B、C、D、E可以正常連接。因為防火墻F的策略,A與C、D、E完全不能連接,A與B受限連接(當(dāng)A與B的連接內(nèi)有關(guān)鍵字“SB”則阻斷連接,且只能由A與B連接,不能由B主動連接,可類比為NAT)。
    下圖為場景圖(用Dia v0.96.1繪制)

    一、遠(yuǎn)程轉(zhuǎn)發(fā)

    將遠(yuǎn)程主機(服務(wù)器)的某個端口轉(zhuǎn)發(fā)到本地端指定機器的指定端口. 工作原理是這樣的, 遠(yuǎn)程主機上分配了一個 socket 偵聽 port 端口, 一旦這個端口上有了連接, 該連接就經(jīng)過安全通道轉(zhuǎn)向出去, 同時本地主機和host 的 hostport 端口建立連接. 可以在配置文件中指定端口的轉(zhuǎn)發(fā). 只有用 root 登錄遠(yuǎn)程主機才能轉(zhuǎn)發(fā)特權(quán)端口.--摘自ssh的中文Manual
    命令格式為:

    ?[Copy to clipboard]View Code?BASH
    ssh -R ::

    假設(shè)主機A提供了HTTP服務(wù),即在受限網(wǎng)絡(luò)內(nèi)部可以訪問的網(wǎng)頁服務(wù)器。但這個服務(wù)因為防火墻策略或者NAT路由的原因?qū)е略贗nternet無法訪問。那么我們就可以將本地的HTTP服務(wù)遠(yuǎn)程轉(zhuǎn)發(fā)到Internet上的主機B

    ?[Copy to clipboard]View Code?BASH
    ssh -fNgR 80:localhost:80 root@host-B

    然后在Internet上可以通過訪問 http://host-B來訪問主機A上的HTTP服務(wù)了

    如果沒有主機B的root賬號,則只能遠(yuǎn)程轉(zhuǎn)發(fā)到1024以后的端口號

    ?[Copy to clipboard]View Code?BASH
    ssh -fNgR 8080:localhost:80 lige@host-B

    然后在Internet上可以通過訪問http://host-B:8080來訪問主機A上的HTTP服務(wù)。
    值得注意的是搭建了wordpress的主機只能運行在80端口,如果轉(zhuǎn)發(fā)后的端口不是80,那么將無法使用,這應(yīng)該算是wp的bug吧

    而且因為主機A到主機B之間是通過隧道連接的,即使網(wǎng)頁中含有關(guān)鍵字“SB”,也無法被大防火墻檢測到(淚流滿面,終于講到關(guān)鍵了)

    附加參數(shù)簡要說明:

    ?[Copy to clipboard]View Code?BASH
    -N 不執(zhí)行遠(yuǎn)程命令. 用于轉(zhuǎn)發(fā)端口. -n 把 stdin 重定向到 /dev/null (實際上防止從 stdin 讀取數(shù)據(jù)). ssh在后臺運行時一定會用到這個選項. 它的常用技巧是遠(yuǎn)程運行 X11 程序. -f 要求 ssh 在執(zhí)行命令前退至后臺. 它用于當(dāng) ssh 準(zhǔn)備詢問口令或密語,但是用戶希望它在后臺進(jìn)行. 該選項隱含了 -n 選項. 在遠(yuǎn)端機器上啟動X11 程序的推薦手法就是類似于 ssh -f host xterm 的命令. -C 要求進(jìn)行數(shù)據(jù)壓縮 -g 允許遠(yuǎn)端主機連接本地轉(zhuǎn)發(fā)的端口

    關(guān)于建立隧道和使用隧道的網(wǎng)絡(luò)原理,見文章末尾

    二、本地轉(zhuǎn)發(fā)

    將本地機(客戶機)的某個端口轉(zhuǎn)發(fā)到遠(yuǎn)端指定機器的指定端口. 工作原理是這樣的, 本地機器上分配了一個 socket 偵聽 port 端口, 一旦這個端口上有了連接, 該連接就經(jīng)過安全通道轉(zhuǎn)發(fā)出去, 同時遠(yuǎn)程主機和 host的 hostport 端口建立連接. 可以在配置文件中指定端口的轉(zhuǎn)發(fā). 只有 root 才能轉(zhuǎn)發(fā)特權(quán)端口. --摘自ssh的中文Mannul

    它的命令格式為

    ?[Copy to clipboard]View Code?BASH
    ssh -L ::

    和遠(yuǎn)程轉(zhuǎn)發(fā)原理類似但方向相反。假設(shè)主機B有HTTP服務(wù),但因為受限網(wǎng)絡(luò)內(nèi)其它主機因憎惡“大防火墻”F而不愿意直接訪問主機B(這種心理我也有)。那就可以通過本地轉(zhuǎn)發(fā)了

    ?[Copy to clipboard]View Code?BASH
    ssh -fNgL 80:localhost:80 root@host-B

    因為和遠(yuǎn)程轉(zhuǎn)發(fā)類似,后面就不再詳述。

    三、動態(tài)轉(zhuǎn)發(fā)

    指定一個本地機器 “動態(tài)的” 應(yīng)用程序端口轉(zhuǎn)發(fā). 工作原理是這樣的, 本地機器上分配了一個 socket 偵聽 port 端口, 一旦這個端口上有了連接,該連接就經(jīng)過安全通道轉(zhuǎn)發(fā)出去, 根據(jù)應(yīng)用程序的協(xié)議可以判斷出遠(yuǎn)程主機將和哪里連接. 目前支持 SOCKS 協(xié)議, ssh 將充當(dāng) SOCKS 服務(wù)器.只有 root 才能轉(zhuǎn)發(fā)特權(quán)端口. --摘自ssh的中文manual

    可以這樣理解,遠(yuǎn)程轉(zhuǎn)發(fā)和本地轉(zhuǎn)發(fā)都是在隧道上傳輸一個服務(wù),比如例子中的HTTP數(shù)據(jù)流。而動態(tài)轉(zhuǎn)發(fā)則是為了在隧道上傳輸多種不確定的網(wǎng)絡(luò)服務(wù)。它的表現(xiàn)就把遠(yuǎn)端ssh服務(wù)器當(dāng)作了一個安全的代理服務(wù)器。

    命令格式為

    ?[Copy to clipboard]View Code?BASH
    $ ssh -D

    假設(shè)主機A想要訪問受限網(wǎng)絡(luò)所限制訪問的主機C、D、E等,或者想要訪問主機B上的“SB”內(nèi)容。則可有D選項建立動態(tài)隧道

    ?[Copy to clipboard]View Code?BASH
    ssh -CfNg -D 8888 lige@host-B

    然后你就有了一個安全的socks 5代理。這個代理ip是127.0.0.1,端口為剛才指定的8888。如何使用socks 5代理在本文就不再講了。大防火墻可能還存在一些技術(shù)來防止socks 5代理,可以參考socks代理的遠(yuǎn)端DNS解析一文

    還有一個plink工具,包含在PuTTY軟件包,可以在windows和linux下使用,它的格式為:

    ?[Copy to clipboard]View Code?CMD
    PLINK.EXE -C -D 127.0.0.1:7777 -N -pw SSH密碼 SSH用戶名@SSH的IP地址

    四、X轉(zhuǎn)發(fā)

    X轉(zhuǎn)發(fā)是一個令人驚奇但實際上用處不大的功能。因為我所能管理的遠(yuǎn)端主機都是無圖形界面的,所以本部分內(nèi)容我不保證正確。

    大家都知道GUI軟件與X之間也是通過TCP連接的,所以X轉(zhuǎn)發(fā)與其它轉(zhuǎn)發(fā)也沒有本質(zhì)區(qū)別,甚至它簡單得都不應(yīng)該和其它幾種轉(zhuǎn)發(fā)相提并論。X轉(zhuǎn)發(fā)用的選項為”-X”

    首先要在客戶端指定X Server的位置

    ?[Copy to clipboard]View Code?BASH
    export DISPLAY=:.

    然后執(zhí)行

    ?[Copy to clipboard]View Code?BASH
    ssh -X lige@hot-B

    補充:可能的問題:

    1. ssh的基本用法
    http://blog.lilinux.net/2010/02/command-ssh/以及ssh的man文檔

    2. windows下的ssh客戶端
    PuTTY和其中的plink

    3. 如何查看隧道是否建立完善
    查看進(jìn)程:

    ?[Copy to clipboard]View Code?BASH
    ps aux | grep ssh

    查看端口:

    ?[Copy to clipboard]View Code?BASH
    netstat -ntl

    4. 因為F,連接還是不穩(wěn)定,隧道經(jīng)常無法使用
    去除-N,-n,-f選項,進(jìn)入遠(yuǎn)程shell,輸入一些需要頻繁交互數(shù)據(jù)的命令,使連接一直處于活動狀態(tài)。比如

    ?[Copy to clipboard]View Code?BASH
    top

    我更推薦用這樣的命令,對系統(tǒng)的負(fù)載消耗更小(而且更加美觀)

    ?[Copy to clipboard]View Code?BASH
    watch -n1 "date"

    5. 更多的實例
    本文寫的例子都是假設(shè)場景,近期將寫一個實例應(yīng)用。預(yù)計網(wǎng)址為http://blog.lilinux.net/2010/02/ssh-instance/

     

    附ssh隧道原理

     

    對網(wǎng)絡(luò)原理不太懂或不感興趣的可以忽略此部分

    總的來說:Tunnel實際上是一個TCP連接,這個連接和普通的SSH登錄的連接并沒有本質(zhì)上的區(qū)別

    假設(shè)有兩臺主機A和B,IP分別是IP_A和IP_B,是要把主機A的22端口映射到主機B的10022端口

    連接的建立過程是這樣的:

    1. 建立TUNNEL (在A主機上執(zhí)行命令)
    ssh命令,把A的端口映射到B主機(ssh -NfR 10022:localhost:22 USER_B@IP_B)
    這個步驟實際上是這樣的:
    (1)ssh命令是ssh客戶端,這條命令是指在A主機上登錄B主機,并且A主機請求將A主機的22號端口映射到B主機的10022端口。
    (2)B主機接受遠(yuǎn)程登錄請求后,檢測發(fā)現(xiàn)用戶的權(quán)限足以創(chuàng)建10022端口,且10022端口并未使用。則B主機開啟一個監(jiān)聽端口:10022
    (3)這條命令成功結(jié)束后,A主機有了一個后臺進(jìn)程登錄到B主機,這個登錄的連接正是“TUNNEL”。
    而B主機相應(yīng)也有這么一個后臺進(jìn)程,此外B主機還增開了一個監(jiān)聽端口:10022
    (4)在這個過程中,B是Server,A是Client。那么A是以一個任意端口連接到B的ssh監(jiān)聽端口。所設(shè)這個連接是
    IP_A:12345 —— IP_B:22

    2. 連接映射端口 (在B主機上執(zhí)行命令)
    連接映射端口 ( ssh USER_A@localhost -p 10022)
    這個步驟實際上是這樣的:
    (1)主機B連接自己的一個監(jiān)聽端口10022
    于是主機B以一個任意的端口連接10022: IP_B:23456 ——- IP_B:10022
    (2)10022端口實際是由主機B的sshd來維護的,sshd發(fā)現(xiàn)有連接到10022的端口的數(shù)據(jù)。
    將數(shù)據(jù)封裝成ssh包,通過已經(jīng)建立好的TUNNEL傳輸?shù)綄Χ酥鳈CA的12345端口(TUNNEL建立時的初始端口)
    (3)主機A的12345端口收到數(shù)據(jù)后,經(jīng)過TUNNEL的建立進(jìn)程的處理(解開ssh包),把數(shù)據(jù)轉(zhuǎn)到主機A的端口22(建立TUNNEL時指定的端口)
    (4)因此,這個反向的連接就建立起來了

    3. TUNNEL與TCP連接的關(guān)系
    (1)TUNNEL本質(zhì)是一個TCP連接
    (2)TUNNEL的作用用于傳輸其它TCP連接的數(shù)據(jù)
    (3)對用戶而言,TUNNEL就是它們可見的TCP連接傳輸?shù)囊粋€“隧道”

    ?如需轉(zhuǎn)載,請注明出處:http://blog.lilinux.net/2010/02/ssh-tunnel/

    題目有點長
    其實來自于一個朋友的問題
    他的oracle跑在linux服務(wù)器上
    遠(yuǎn)程的linux服務(wù)器并沒有跑在圖形界面下(runlevel=5)
    而是跑在字符模式下(runlevel=3)
    而他又想用圖形界面來管理oracle
    我翻了翻資料
    找出一種方法
    在一臺圖形界面的linux下(虛擬機也行,其實不是linux也行,關(guān)鍵是本地得有X server)起一個控制臺
    用命令行ssh加參數(shù)”-X”連上遠(yuǎn)程的linux服務(wù)器
    像這樣
    ssh -X oracle@1.1.1.1
    這里”1.1.1.1″是遠(yuǎn)程linux服務(wù)器的ip地址
    這樣連上去之后
    直接就可以用以前只有在圖形界面上才能用的命令
    如oracle管理的圖形程序”dbca”

    這個原理很簡單
    因為遠(yuǎn)程的sshd支持x11 forward
    那么他起x程序的時候
    就會把x的包通過ssh轉(zhuǎn)回來到ssh客戶端的機器上來
    而ssh客戶端這邊跑得有x server
    所以就能正確接收x包并顯示出來

    其實在windows下也可以通過安裝x server軟件來實現(xiàn)一樣的效果
    比如x manager就可以
    具體用法不在詳述

    這里的關(guān)鍵在于
    遠(yuǎn)程的sshd需要支持x11 forward
    不過不要擔(dān)心
    一般情況下
    缺省是支持的

    ?

    SSH端口轉(zhuǎn)發(fā)(本地端口轉(zhuǎn)發(fā)、遠(yuǎn)程端口轉(zhuǎn)發(fā)、動態(tài)端口轉(zhuǎn)發(fā))工作原理、應(yīng)用詳解

    Posted on?March 1, 2011?by?lesca

    實驗條件:
    1.本文所述之實驗,本地主機操作系統(tǒng)基于Ubuntu 10.04,遠(yuǎn)程主機操作系統(tǒng)基于BSD發(fā)行版
    2.本地主機安裝了ssh client(ssh),也安裝了ssh server(sshd)
    基礎(chǔ)知識:
    文章中客戶端指ssh,用于發(fā)出連接請求;服務(wù)端指sshd,監(jiān)聽端口22。
    安全通道是指ssh與sshd之間已建立的連接通道,該連接是加密的。

    SSH 端口轉(zhuǎn)發(fā)格式[1]

    [-L [bind_address:]port:host:hostport]
    [-R [bind_address:]port:host:hostport]
    [-D [bind_address:]port]


    動態(tài)端口轉(zhuǎn)發(fā)
    -D <port>
    這會使本地主機監(jiān)聽端口port,一旦與該端口建立連接,經(jīng)過該端口的數(shù)據(jù)會被轉(zhuǎn)發(fā)到安全通道發(fā)送到遠(yuǎn)程主機。遠(yuǎn)程主機的sshd會根據(jù)數(shù)據(jù)包的應(yīng)用層協(xié)議(如HTTP)自動建立對應(yīng)的連接。

    $ ssh -D 7070 sisca@216.194.70.6

    登陸前本地主機端口監(jiān)聽狀態(tài):

    $ sudo netstat -lnput | grep ssh tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 927/sshd tcp6 0 0 :::22 :::* LISTEN 927/sshd

    登陸后本地主機端口監(jiān)聽狀態(tài):

    $ sudo netstat -lnput | grep ssh tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 927/sshd tcp 0 0 127.0.0.1:7070 0.0.0.0:* LISTEN 5205/ssh tcp6 0 0 :::22 :::* LISTEN 927/sshd tcp6 0 0 ::1:7070 :::* LISTEN 5205/ssh

    登陸后遠(yuǎn)程主機端口監(jiān)聽狀態(tài):

    $ sockstat -4l USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS (什么都沒有)

    小結(jié):我們發(fā)現(xiàn),動態(tài)端口轉(zhuǎn)發(fā)的時候確實是本地主機的ssh在監(jiān)聽端口7070的


    本地端口轉(zhuǎn)發(fā)
    -L <local_port>:<host>:<host_port> <ssh_server>
    這會使本地主機監(jiān)聽端口local_port,一旦與該端口建立連接,經(jīng)過該端口的數(shù)據(jù)會被轉(zhuǎn)發(fā)到安全通道,同時遠(yuǎn)程主機會與主機host的端口host_port建立連接。

    $ ssh -L 7001:localhost:7070 sisca@216.194.70.6

    登陸前本地主機端口監(jiān)聽狀態(tài):

    $ sudo netstat -lnput | grep ssh tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 927/sshd tcp6 0 0 :::22 :::* LISTEN 927/sshd

    登陸后本地主機端口監(jiān)聽狀態(tài):

    $ sudo netstat -lnput | grep ssh tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 927/sshd tcp 0 0 127.0.0.1:7001 0.0.0.0:* LISTEN 3475/ssh tcp6 0 0 :::22 :::* LISTEN 927/sshd tcp6 0 0 ::1:7001 :::* LISTEN 3475/ssh

    登陸后遠(yuǎn)程主機端口監(jiān)聽狀態(tài):

    $ sockstat -4l USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS (什么都沒有)

    小結(jié):我們從中可以看出,本地端口轉(zhuǎn)發(fā)的時候確實是本地主機的ssh在監(jiān)聽端口7001


    遠(yuǎn)程端口轉(zhuǎn)發(fā)
    -R <remote_port>:<host>:<host_port> <ssh_server>
    這會使ssh_server(遠(yuǎn)程端)監(jiān)聽端口remote_port,一旦與該端口建立連接,經(jīng)過該端口的數(shù)據(jù)會被轉(zhuǎn)發(fā)到安全通道,并且本地主機會與主機host的端口host_port建立連接。

    $ ssh -R 7001:localhost:7070 sisca@216.194.70.6

    登陸前本地主機端口監(jiān)聽狀態(tài):

    $ sudo netstat -lnput | grep ssh tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 927/sshd tcp6 0 0 :::22 :::* LISTEN 927/sshd

    登陸后本地主機端口監(jiān)聽狀態(tài):

    $ sudo netstat -lnput | grep ssh tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 927/sshd tcp6 0 0 :::22 :::* LISTEN 927/sshd

    登陸后遠(yuǎn)程主機端口監(jiān)聽狀態(tài):

    $ sockstat -4l USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS sisca sshd 66196 7 tcp4 127.0.0.1:7001 *:*

    小結(jié):很明顯,使用遠(yuǎn)程端口轉(zhuǎn)發(fā)時,本地主機的端口監(jiān)聽并沒有發(fā)生變化,相反遠(yuǎn)程主機卻開始監(jiān)聽我們指定的7001端口

    小提示:
    這里的remote_port,local_port可以歸并為listen_port,因此我們得到這樣的助記格式:

    ssh [-L|-R] <listen_port>:<host>:<host_port>



    本地端口轉(zhuǎn)發(fā)應(yīng)用:[2]
    背景:在實驗室里有一臺 LDAP 服務(wù)器(LDAP Server),但是限制了只有本機上部署的應(yīng)用才能直接連接此 LDAP 服務(wù)器。現(xiàn)在我們想臨時從本地機器(LDAP Client)直接連接到這個 LDAP 服務(wù)器,只需要在LDAP Client上運用本地端口轉(zhuǎn)發(fā):

    $ ssh -L 7001:localhost:389 LdapServerHost

    圖1 本地端口轉(zhuǎn)發(fā)

    數(shù)據(jù)流向:
    該命令首先使本地主機(LDAP Client)與遠(yuǎn)程主機(LDAP Server)建立一個SSH安全連接(安全通道)
    然后本地主機會監(jiān)聽端口7001(注意是ssh在監(jiān)聽)
    一旦本地LDAP客戶端程序?qū)?shù)據(jù)發(fā)送到端口7001(即建立連接),遠(yuǎn)程主機上的sshd將主動與端口389(LDAP服務(wù)的端口)建立連接
    從而來自LDAP客戶端的請求轉(zhuǎn)發(fā)到該端口389上(當(dāng)然是通過安全通道)
    注意:
    本地主機有兩個客戶端:
    1) ssh – 用于與遠(yuǎn)程主機建立ssh連接
    2) LDAP客戶端 – 用于與遠(yuǎn)程主機的LDAP服務(wù)程序進(jìn)行通訊
    遠(yuǎn)程主機對應(yīng)地有兩個服務(wù)進(jìn)程:
    1) sshd – 監(jiān)聽端口22
    2) ldapd -監(jiān)聽端口389


    遠(yuǎn)程端口轉(zhuǎn)發(fā)應(yīng)用:[2]
    背景:這次假設(shè)由于網(wǎng)絡(luò)或防火墻的原因我們不能用 SSH 直接從 LDAP Client 連接到 LDAP 服務(wù)器(LDAP Server),但是反向連接卻是被允許的。那此時我們的選擇自然就是遠(yuǎn)程端口轉(zhuǎn)發(fā)了。我們這次在LDAP Server上運用遠(yuǎn)程端口轉(zhuǎn)發(fā),因此LDAP Client必須安裝了sshd

    $ ssh -R 7001:localhost:389 LdapClientHost

    圖2 遠(yuǎn)程端口轉(zhuǎn)發(fā)

    數(shù)據(jù)流向:
    該命令首先使LDAP Server與 LDAP Client 建立一個SSH安全連接(安全通道)
    然后LDAP Client開始監(jiān)聽端口7001(注意是sshd在監(jiān)聽)
    一旦LDAP Client將數(shù)據(jù)發(fā)送到端口7001(即建立連接),LDAP Server上的ssh將主動與端口389(LDAP服務(wù)端口)建立連接
    從而來自LDAP客戶端的請求轉(zhuǎn)發(fā)到該端口389上(當(dāng)然是通過安全通道)


    本地轉(zhuǎn)發(fā)與遠(yuǎn)程轉(zhuǎn)發(fā)的對比與分析
    本地端口轉(zhuǎn)發(fā):ssh客戶端發(fā)起ssh連接,并且監(jiān)聽指定端口
    遠(yuǎn)程端口轉(zhuǎn)發(fā):ssh客戶端發(fā)起ssh連接,但是由遠(yuǎn)程主機上的sshd監(jiān)聽指定端口


    多主機轉(zhuǎn)發(fā)應(yīng)用[2]

    圖3 多主機端口轉(zhuǎn)發(fā)

    $ ssh -g -L 7001:<B>:389 <D>

    注意:我們在命令中指定了“ -g ”參數(shù)以保證機器(A)能夠使用機器(C)建立的本地端口轉(zhuǎn)發(fā)。

    References:
    [1] man 1 ssh
    [2] IBM DeveloperWorks –?
    實戰(zhàn) SSH 端口轉(zhuǎn)發(fā)

    Please support us if you feel this post is useful.


    SSH?名為?secure shell,?是專門用來進(jìn)行安全遠(yuǎn)程訪問的協(xié)議。它無論從功能上、系統(tǒng)兼容性上、還是從安全上和TelnetRSH相比都是足以取而代之。

    ?

    在這個ARP欺騙橫行,網(wǎng)上盜竊泛濫的年代,還有什么比安全更為重要的?

    在這個遍地都是防火墻的年代,還有什么比通過一個端口就能訪問所有業(yè)務(wù)更為重要的呢?

    ?

    ??????????? ?在矛和盾同樣發(fā)達(dá)的年代,SSH可以給我們什么樣的方便?

    ?

    ????????????現(xiàn)代的UNIX類操作系統(tǒng),無一例外地將SSH,作為默認(rèn)系統(tǒng)軟件包進(jìn)行安裝。

    ?

    ????????????基本的連接方式:SSH Hostname

    ?

    ????? SSH?提供了多種不同的接入認(rèn)證方式:

    ??????????? Password

    ??????????? Hostkey

    ??????????????????????? .....

    ??????????????????????? .....

    ?

    ????????????其中常用的有?password?host public key?如果使用password,則會產(chǎn)生用戶交互的密碼輸入,如果使用host key, 則可以直接登錄或直接執(zhí)行遠(yuǎn)程命令。

    ?

    ??????????? SSH Client?Server的交互,能實現(xiàn)很多其他非常有用的功能:

    ?

    ????最基本的功能有如下選項:

    ?

    ????SSH?會話內(nèi)容的壓縮,可以使用gzip壓縮級別進(jìn)行指定,以提高在慢速線路上數(shù)據(jù)傳輸效率。

    ?

    ????SSH?本地端口轉(zhuǎn)發(fā),可以將本地某個端口和遠(yuǎn)程SSH服務(wù)器上、或SSH遠(yuǎn)程服務(wù)器可達(dá)的地址端口建立一種映射關(guān)系,使對本地端口的訪問請求會透明地轉(zhuǎn)發(fā)到遠(yuǎn)程服務(wù)器上。從遠(yuǎn)程服務(wù)器上所看到的來訪請求源地址將是SSH服務(wù)器的地址。

    ?

    ?

    ???

    ????SSH?遠(yuǎn)程端口反向轉(zhuǎn)發(fā),與上列相反, 遠(yuǎn)程端口反向轉(zhuǎn)發(fā)建立后,遠(yuǎn)程客戶機訪問遠(yuǎn)程SSH服務(wù)器的某端口,SSH服務(wù)器將把來訪請求通過SSH安全通道轉(zhuǎn)發(fā)到SSH客戶端或SSH客戶端可達(dá)的服務(wù)器地址端口上,從而使遠(yuǎn)程客戶機,可以正常訪問內(nèi)部服務(wù)器所提供的服務(wù)。

    ?

    ?

    ??

    這樣,SSH客戶端D,就可以通過訪問SSH服務(wù)器B的端口D,從而達(dá)到訪問業(yè)務(wù)服務(wù)器C上端口D的目的。

    ?

    ????高級功能/用法有:

    ?

    ????SSH?端口轉(zhuǎn)發(fā)的接續(xù)。

    由于現(xiàn)代的UNIX系統(tǒng)都默認(rèn)帶有SSH服務(wù)和客戶端,所以當(dāng)網(wǎng)絡(luò)變得比較復(fù)雜、層次很多的時候,使用多臺機器的端口轉(zhuǎn)發(fā)接續(xù),可以將在層次很深的內(nèi)網(wǎng)服務(wù),在不改變當(dāng)前網(wǎng)絡(luò)結(jié)構(gòu)和防火墻配置的情況下,層層轉(zhuǎn)發(fā)出來從而可以使外網(wǎng)用戶很方便地使用該內(nèi)網(wǎng)服務(wù),而無須對現(xiàn)有網(wǎng)絡(luò)構(gòu)架和甚至防火墻配置作任何變動。而對最外層的防火墻只需要開放一個22端口(默認(rèn)ssh服務(wù)端口)就能使授權(quán)的客戶端訪問全網(wǎng)業(yè)務(wù)。

    ?

    ?

    ????SSH?動態(tài)端口轉(zhuǎn)發(fā)。

    ????SSHv2,同時還支持內(nèi)置的SockS4 Server,將ssh?客戶端的指定端口,作為一個遠(yuǎn)程SOCKS4 Server的端口。對SockS4Server的訪問請求將通過,SSH Protocol?傳輸?shù)?SSH?服務(wù)器,?SSH服務(wù)器將請求轉(zhuǎn)發(fā)到用戶應(yīng)用的真正目的服務(wù)器。

    ?

    ????SSH?的?PPP通道。

    ????結(jié)合UNIX PPPD,還可以在SSH?PTS?通道上建立PPP LINK從而非常靈活的實現(xiàn)?IP over SSH?VPN。這種方法,可謂SSH的終極用法,因為它解決了所有由于地址翻譯而帶來的應(yīng)用層協(xié)議不兼容的問題(多播問題是否能解決尚未測試)。

    ?

    ????SSH產(chǎn)品實戰(zhàn)。

    ?

    ????SecureCRT

    ????VanDyke Software?的經(jīng)典力作,幾乎囊括了所有SSH客戶端的功能,在此,SSH的標(biāo)準(zhǔn)功能就不多說了。說一些windows上的特色功能使SCRT變得非常靈活。

    1、它擁有端口轉(zhuǎn)發(fā)安全過慮器,可以靈活地允許或禁止其他客戶機訪問被SecureCRT所轉(zhuǎn)發(fā)的本機端口。

    2、同時還擁有VBSCript/Jscript/Perl?腳本功能,可以通過這三類腳本語言和遠(yuǎn)程服務(wù)器進(jìn)行自動交互式執(zhí)行。

    3、可以自動和服務(wù)器上的Zmodem進(jìn)行交互,實現(xiàn)基于TTY/PTSZmodem?文件傳輸(這個功能可在任何類型的會話中進(jìn)行,并不局限于SSH類型的會話)。

    4、自動和SecureFX匹配實現(xiàn)SFTP的文件傳輸功能(無需輸入用戶名密碼,因為是基于已建立的SSH Session的,所以登錄速度是非常快的)由于SecureFx帶有拖放功能,和類似文件夾的拷貝粘貼功能,所以會給文件傳輸帶來很大方便性(FTP還是很不方便的)。

    5、支持命令行方式,可在CMD中實現(xiàn)一步登錄并將端口轉(zhuǎn)發(fā)作為參數(shù)輸入(和UNIXSSH基本沒區(qū)別了)。

    ?

    ?

    功能太多了,就不一一列舉了。詳細(xì)請查看VanDyke Software的主頁和SecureCRT的幫助文件。

    ?

    ???????UniTTY

    ??A Pure Java Based SSH?客戶端。居然實現(xiàn)了幾乎所有的SSH功能。而且更牛的是,實現(xiàn)了端口轉(zhuǎn)發(fā)的動態(tài)加載。而且默認(rèn)實現(xiàn)了SFTP over SSH的文件傳輸。只是字體有待改進(jìn)。看慣了SecureCRT的優(yōu)雅美觀的字體,再用UniTTY可能就有些不習(xí)慣了。它的多協(xié)議支持能力也很特別,居然將VNC的客戶端協(xié)議也加進(jìn)來了。

    ??????

    ???????UNIX SSH?客戶端

    ?????完全基于OpenSSH,最標(biāo)準(zhǔn)的客戶端。能完成所有SSH協(xié)議支持的功能,同時結(jié)合UNIX的腳本,能完成其他操作系統(tǒng)無法完成的很多任務(wù)。或配合完成前面所提到的一些用法!

    ??????

    ???????NetSarang XSHELL

    ??????????? 韓國人寫的多協(xié)議客戶端,和他另外一個在國內(nèi)很流行的產(chǎn)品(Xmanager)配合使用很好。默認(rèn)支持TAB窗口的SFTP,使用也比較方便,也同時支持雙向的端口轉(zhuǎn)發(fā)。

    ?

    ????? MindTerm

    ???????????? 純java的ssh客戶端,非常著名的開源軟件mindterm。

    ??????????mindterm,居然提供了源代碼真是不錯,以后可以將expect也扔了。

    ??????????而且該有的都有了(sockserver, 端口轉(zhuǎn)發(fā),反向轉(zhuǎn)發(fā),scp,telnet,zlib compression,keepalive等),還額外提供了ftp 協(xié)議橋接sftp的功能,就是有一點不方便,在啞終端方式啟動,需要X11Display支持。

    ?

    ??? zenith 2007.9.10



    網(wǎng)的朋友苦于沒有合法 ip,不能對外提供 internet 服務(wù)。解決方案很多,可以通過在網(wǎng)關(guān)做端口映射,或其他的輔助軟件等。

    本文介紹兩種比較簡單實用的方法,利用 ssh 這個強大的工具。
    (以下方法不分平臺,都適用)

    案例一、
    內(nèi)網(wǎng)主機 A ,開了 http,ftp ,http ,vnc,sshd,socks5,cvs 等服務(wù)。無合法 ip 地址。


    外網(wǎng)主機 B ,開了 sshd 服務(wù)。有合法 ip : 218.xxx.xxx.xxx


    我們的目的是讓 B 能訪問 A 上的各種服務(wù)。

    步驟:
    1、A(內(nèi)網(wǎng)服務(wù)器) ?知道?B?ip 后,先用 ssh client 連上 B,命令如下:
    ssh -R 1234:localhost:21?? ? ?-l root ?218.xxx.xxx.xxx

    解釋:
    關(guān)于 ssh 的參數(shù),請看 ssh --help
    -L listen-port:host:port Forward local port to remote address
    -R listen-port:host:port Forward remote port to local address
    -L local (本地) -R :remote (遠(yuǎn)程)

    -R 1234:localhost:21 其實做了個“端口轉(zhuǎn)發(fā)(forward)"。
    意思是主機 A 把本地的 21端口(對應(yīng)ftp服務(wù))映射為 B 的1234 端口(任意未被占用),同時 A 監(jiān)聽 B 的1234 端口。
    在 B 上用 netstat -al | grep 1234 ,你能看到這個監(jiān)聽連接。
    任何發(fā)送到 B 1234 端口的請求將被傳送到 A的 21 端口。

    2、B 用 ftp 工具(任意,如gftp) 連本地的 1234 端口,輸入 A 的 ftp 用戶和密碼。
    ftp localhost 1234

    千萬不要覺的奇怪,為什么連的是本地的地址。
    舉個不恰當(dāng)例子,相當(dāng)于 A 在 B 的房間里裝了個***(監(jiān)聽端口),那么 B 在房間里說的話就通過***傳送到了 A。

    3、推廣:
    如果 B 沒占用 21 端口的話,那么可以寫成:
    A使用: ssh -R 21:localhost:21 -l root 218.xxx.xxx.xxx
    B使用: ftp localhost

    如果你想使用 A 上的 http 或其他服務(wù),只需改變服務(wù)端口:
    http服務(wù) :
    A使用:ssh -R 1234:localhost:80 -l root 218.xxx.xxx.xxx
    B使用:w3m?http://localhost:1234

    sshd服務(wù):
    A使用:ssh -R 1234:localhost:22 -l root 218.xxx.xxx.xxx
    B使用:ssh localhost -p 1234

    vnc 服務(wù):?
    A使用:ssh -R 1234:localhost:5901(其他) -l root 218.xxx.xxx.xxx
    B使用:vncviewer localhost:1

    socks5服務(wù):
    A使用:ssh -R 1234:localhost:1080 -l root 218.xxx.xxx.xxx
    B 略

    cvs 服務(wù):
    A使用:ssh -R 1234:localhost:2401 -l root 218.xxx.xxx.xxx
    B使用:cvs -d :pserver:root@localhost:1234/home/cvsroot login

    這里是否一定要用 root ,涉及到權(quán)限問題,具體還得靠大家來總結(jié)經(jīng)驗。

    案例二、
    部分朋友會問了,這樣的話只是兩臺機器的互相通訊,如何讓廣域網(wǎng)的人都能訪問呢?
    聰明的你,這時候可能已經(jīng)有了答案。

    內(nèi)網(wǎng)主機 A ,開了 http,ftp ,http ,vnc,sshd,socks5,cvs等服務(wù)。無合法 ip 地址。
    外網(wǎng)主機 B ,開了 sshd 服務(wù)。有合法 ip : 218.xxx.xxx.xxx
    我們的目的是讓 internet 上的任何主機能訪問 A 上的各種服務(wù)。

    步驟:
    1、首先,B 的sshd 服務(wù)端做點小小的設(shè)置:
    vi /etc/ssh/sshd.config
    加入 GatewayPorts yes
    然后重啟 sshd 服務(wù): /etc /init.d/ssh restart 或 /etc/init.d/sshd restart
    (解釋:
    不加,默認(rèn)會把監(jiān)聽端口綁定在 localhost 或 lo(127.0.0.1),這樣除了 B自身別人是沒法訪問監(jiān)聽端口的。
    加入 GatewayPorts yes,把監(jiān)聽端口綁定到 0.0.0.0 ,這樣外部的所有機器都能訪問到這個監(jiān)聽端口。
    主要是考慮安全性問題,默認(rèn)情況,只允許本地訪問。

    這里才是真正的難點,實驗了一個晚上,累人呀!給點鼓勵吧 :)

    2、A 知道 B ip 后,先用 ssh client 連上 B,命令如下:
    ssh -R 21:localhost:21 -l root 218.xxx.xxx.xxx
    (事先確定 B 的21 端口未被占用)

    3、分布在 internet 的其它客戶機使用 ftp 工具(任意),連 B 21端口。

    ftp 218.xxx.xxx.xxx 21

    你會發(fā)現(xiàn)自己連上了內(nèi)網(wǎng) A 的ftp 服務(wù)。

    此法和案例一完全一樣。

    internet --------->> B 21 端口----------->>A 21端口
    可以叫做端口轉(zhuǎn)發(fā),或隧道技術(shù),也可以稱之為跳板(B),或反* 。呵呵,我瞎說的。。。

    可能遇到的問題:

    Country:/etc# ssh localhost -p 1234
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
    Someone could be eavesdropping on you right now (man-in-the-middle attack)!
    It is also possible that the RSA host key has just been changed.
    The fingerprint for the RSA key sent by the remote host is
    be:5f:d2:45:66:4d:0c:9e:2b:6b:45:65:a7:b2:85:28.
    Please contact your system administrator.
    Add correct host key in /root/.ssh/known_hosts to get rid of this message.
    Offending key in /root/.ssh/known_hosts:11
    RSA host key for localhost has changed and you have requested strict checking.
    Host key verification failed.
    Country:/etc# ssh localhost -p 1234
    root@localhost's?password:
    Last login: Mon May 5 02:39:53 2003 from localhost
    localhost root #

    如上問題,請刪除 ~/.ssh/known_hosts,然后再試。

    點評:
    當(dāng)然 ssh 還有很多的功能沒有用,如先用 ssh 連接 上去后,可以用 scp命令來存取文件,等等。
    scp -P xxx?user@host:path/file

    其它突破網(wǎng)關(guān)傳送文件的方式也千變?nèi)f化。

    優(yōu)點是:
    可以突破網(wǎng)關(guān),一般情況下,向網(wǎng)管要求在網(wǎng)關(guān)上給你做端口映射是不現(xiàn)實的,但用此法你可以讓要好的朋友給你做。
    使用方案一:比較點對點傳送文件比較方便,或使用ssh進(jìn)行遠(yuǎn)程控制內(nèi)網(wǎng)。
    ssh本身是加密,保證安全可靠。

    缺點也不少:
    使用 ssh 加密,勢必影響性能,可以用 -C 選項調(diào)節(jié)壓縮率。
    如果象方案二使用額外的服務(wù)器,數(shù)據(jù)都要服務(wù)器中轉(zhuǎn)(我是這樣認(rèn)為,沒跟蹤過),勢必影響速度。
    公網(wǎng)的服務(wù)器不好找。

    建議:懇請編程高手們根據(jù)類似得原理,做個端口轉(zhuǎn)發(fā)小工具,效果會更好。

    本文,雕蟲小計,漏洞無數(shù)。旨在提供一種如何解決問題的思路,請大俠不要笑話。也請大家多多支持,共同提高。

    特別感謝 :sleeve ,x11 兄,是他們幫助一起實現(xiàn)的。以及 irc.linuxfire.com 中的大伙:)


    ?評論這張 轉(zhuǎn)發(fā)至微博

    總結(jié)

    以上是生活随笔為你收集整理的SSH的端口转发:本地转发Local Forward和远程转发Remote Forward的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 成人xxx| 另类第一页 | 国产又粗又黄又爽 | 极品粉嫩小仙女高潮喷水久久 | 国产成人无码精品久在线观看 | 中文字幕1区| 国产激情图片 | 久久国产视频播放 | 毛片啪啪啪 | 男操女视频免费 | 91麻豆蜜桃一区二区三区 | 中文字幕激情视频 | av手机在线免费观看 | 国产中文字幕在线 | 在线看片福利 | 日本黄色大片网站 | 亚洲一区二区三区成人 | 骚黄网站 | 欧美成人做爰大片免费看黄石 | 激情深爱五月 | 欧美午夜精品一区二区蜜桃 | 伊人春色网 | 理论片亚洲 | 久久久久国产精品熟女影院 | 中文字幕观看视频 | 成人在线观看一区 | 午夜久久久久久久久 | 在线中文字幕一区 | 国产精品一品二区三区的使用体验 | 欧美另类色 | 欧美 日韩 综合 | 免费在线观看成人av | 日韩一级免费片 | v片在线看| 春日野结衣av | 国产成人综合欧美精品久久 | 日本熟妇人妻中出 | 激情片网站 | 色综合精品 | 三级免费 | 成人午夜福利一区二区 | 国产在线精品一区二区三区 | 麻豆精品一区二区三区 | 日韩第一色 | 阿v天堂网| 欧美特级a| 精品一区二区电影 | 亚洲一区中文字幕 | 国产精品美女网站 | 成人五区| 日本a v网站 | 高清欧美性猛交 | 国产av天堂无码一区二区三区 | 麻豆传媒在线播放 | 久久久国产精品一区 | 亚洲av成人一区二区国产精品 | 97小视频| 国产在线一区二区三区 | 蜜芽在线视频 | 性欧美熟妇videofreesex | 高中男男gay互囗交观看 | 精品一区二区三区不卡 | 国产66页 | 男女深夜福利 | 欧美二区在线 | 成人免费在线网站 | av成人在线播放 | 国内毛片视频 | 神马午夜激情 | 激情小说欧美色图 | 亚洲综合免费观看高清完整版在线 | 亚洲黄色a级片 | 国产精品成人久久电影 | 日韩一级影院 | 亚洲一区免费在线 | 丁香色综合 | 成人黄色av | 日韩一区二 | 亚洲精品视屏 | 日韩久久一级片 | 精品国产无码一区二区 | 免费在线视频一区二区 | 日韩av首页 | 婷婷综合在线视频 | 美女大bxxxxn内射 | 亚洲av无一区二区三区怡春院 | 在线看免费| 日本精品一区在线观看 | 欧美有码在线观看 | 色窝窝无码一区二区三区 | 久久精国产 | 短篇山村男同肉耽h | 亚洲日本欧美在线 | 欧美性在线视频 | 强公把我次次高潮hd | 我们俩电影网mp4动漫官网 | 色四虎 | 日韩女优在线播放 | 日本午夜一区二区三区 |