使用OpenSSH的端口轉發

使用OpenSSH的端口轉發功能做穿梭

2012-08-23 17:57:32|  分類:rhel_ssh|字號訂閱

很多實驗室的機器只有內部IP,在宿舍不能直接連上來。***可以解決這個問題。但如果用linux的話,用OpenSSH的端口轉發功能同樣可以解決這個問題。

步驟:
1. 假設宿舍機器的IP爲aaa.bbb.ccc.ddd(外部IP),並開啓了sshd。在實驗室機器上運行:
ssh -R 22222:localhost:22 aaa.bbb.ccc.ddd

這條命令的作用是遠程登錄宿舍機器上,並將所有發往宿舍機器22222端口的消息(通過這條ssh隧道)轉發到實驗室機器的22端口上。

2. 只要保持這條ssh連接,以後在宿舍機器上就可以通過下面這條命令來登錄到實驗室機器上。:
ssh localhost -p 22222



如果實驗室機器裝了RealVNC server,甚至可以利用x0vncserver來訪問實驗室機器當前的圖形界面。步驟如下:

1. 首先得保證已經進入了X界面

2. 在實驗室機器設置vncserver的密碼:
vncpasswd
密碼保存在~/.vnc/passwd中

3. 在實驗室機器上啓動x0vncserver:
x0vncserver PasswordFile=~/.vnc/passwd
記下x0vncserver的端口號(默認5998)

4. 在實驗室機器上遠程登陸宿舍機器,建立ssh隧道:
ssh -R 22223:localhost:5998 aaa.bbb.ccc.ddd

5. 回到宿舍後,打開vncviewer,連接localhost:22223,就可以見到實驗室機器的畫面了。



SSH原理與運用(二):遠程操作與端口轉發

作者:阮一峯

使用OpenSSH的端口轉發功能做穿梭 - zhuzhu - 五事九思 (大連Linux主機維護)

(Image credit: Tony Narlock

七、遠程操作

SSH不僅可以用於遠程主機登錄,還可以直接在遠程主機上執行操作。

上一節的操作,就是一個例子:

  $ ssh user@host 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub

單引號中間的部分,表示在遠程主機上執行的操作;後面的輸入重定向,表示數據通過SSH傳向遠程主機。

這就是說,SSH可以在用戶和遠程主機之間,建立命令和數據的傳輸通道,因此很多事情都可以通過SSH來完成。

下面看幾個例子。

【例1】

將$HOME/src/目錄下面的所有文件,複製到遠程主機的$HOME/src/目錄。

  $ cd && tar czv src | ssh user@host 'tar xz'

【例2】

將遠程主機$HOME/src/目錄下面的所有文件,複製到用戶的當前目錄。

  $ ssh user@host 'tar cz src' | tar xzv

【例3】

查看遠程主機是否運行進程httpd。

  $ ssh user@host 'ps ax | grep [h]ttpd'

八、綁定本地端口

既然SSH可以傳送數據,那麼我們可以讓那些不加密的網絡連接,全部改走SSH連接,從而提高安全性。

假定我們要讓8080端口的數據,都通過SSH傳向遠程主機,命令就這樣寫:

  $ ssh -D 8080 user@host

SSH會建立一個socket,去監聽本地的8080端口。一旦有數據傳向那個端口,就自動把它轉移到SSH連接上面,發往遠程主機。可以想象,如果8080端口原來是一個不加密端口,現在將變成一個加密端口。

九、本地端口轉發

有時,綁定本地端口還不夠,還必須指定數據傳送的目標主機,從而形成點對點的"端口轉發"。爲了區別後文的"遠程端口轉發",我們把這種情況稱爲"本地端口轉發"(Local forwarding)。

假定host1是本地主機,host2是遠程主機。由於種種原因,這兩臺主機之間無法連通。但是,另外還有一臺host3,可以同時連通前面兩臺主機。因此,很自然的想法就是,通過host3,將host1連上host2。

我們在host1執行下面的命令:

  $ ssh -L 2121:host2:21 host3

命令中的L參數一共接受三個值,分別是"本地端口:目標主機:目標主機端口",它們之間用冒號分隔。這條命令的意思,就是指定SSH綁定本地端口2121,然後指定host3將所有的數據,轉發到目標主機host2的21端口(假定host2運行FTP,默認端口爲21)。

這樣一來,我們只要連接host1的2121端口,就等於連上了host2的21端口。

  $ ftp localhost:2121

"本地端口轉發"使得host1和host3之間彷彿形成一個數據傳輸的祕密隧道,因此又被稱爲"SSH隧道"。

十、遠程端口轉發

既然"本地端口轉發"是指綁定本地端口的轉發,那麼"遠程端口轉發"(remote forwarding)當然是指綁定遠程端口的轉發。

還是接着看上面那個例子,host1與host2之間無法連通,必須藉助host3轉發。但是,特殊情況出現了,host3是一臺內網機器,它可以連接外網的host1,但是反過來就不行,外網的host1連不上內網的host3。這時,"本地端口轉發"就不能用了,怎麼辦?

解決辦法是,既然host3可以連host1,那麼就從host3上建立與host1的SSH連接,然後在host1上使用這條連接就可以了。

我們在host3執行下面的命令:

  $ ssh -R 2121:host2:21 host1

R參數也是接受三個值,分別是"遠程主機端口:目標主機:目標主機端口"。這條命令的意思,就是讓host1監聽它自己的2121端口,然後將所有數據經由host3,轉發到host2的21端口。由於對於host3來說,host1是遠程主機,所以這種情況就被稱爲"遠程端口綁定"。

綁定之後,我們在host1就可以連接host2了:

  $ ftp localhost:2121

這裏必須指出,"遠程端口轉發"的前提條件是,host1和host3兩臺主機都有sshD和ssh客戶端。

十一、SSH的其他參數

SSH還有一些別的參數,也值得介紹。

N參數,表示只連接遠程主機,不打開遠程shell;T參數,表示不爲這個連接分配TTY。這個兩個參數可以放在一起用,代表這個SSH連接只用來傳數據,不執行遠程操作。

  $ ssh -NT -D 8080 host

f參數,表示SSH連接成功後,轉入後臺運行。這樣一來,你就可以在不中斷SSH連接的情況下,在本地shell中執行其他操作。

  $ ssh -f -D 8080 host

要關閉這個後臺連接,就只有用kill命令去殺掉進程。

十二、參考文獻

  * SSH, The Secure Shell: The Definitive Guide: 2.4. Authentication by Cryptographic Key, O'reilly

  * SSH, The Secure Shell: The Definitive Guide: 9.2. Port Forwarding, O'reilly

  * Shebang: Tips for Remote Unix Work (SSH, screen, and VNC)

  * brihatch: SSH Host Key Protection

  * brihatch: SSH User Identities

  * IBM developerWorks: 實戰 SSH 端口轉發

  * Jianing YANG:ssh隧道技術簡介

  * WikiBooks: Internet Technologies/SSH

(完)


http://www.ruanyifeng.com/blog/2011/12/ssh_port_forwarding.html



利用SSH端口轉發功能實現X轉發

SSH協議中有X轉發協議。在SSH的客戶端putty中只要選中Enable X11 forwarding(在命令行下輸入 –X 選項)就可以把遠程的窗口帶到本地,很方便。

其實明白了X轉發的原理後就知道,ssh的X轉發功能(-X選項)完全可以用端口轉發功能來實現。而SSH的端口轉發功能可以分爲本地端口轉發(-L選項)和遠程端口轉發(-R選項)。

這兩種轉發方式很困惑人,而有一種方法比較容易記:在本地機上利用SSH連接遠程主機,在這個過程中,我們可以很容易分清楚SSH client端和SSH server端。同時使能ssh的端口轉發功能,按照數據流的流向,又可以分爲一個Client端和一個Server端,如果這兩個server端是在同一端的機器上就是本地端口轉發,反之,就是遠程端口轉發。

可以做一個實驗

本地環境:Windows xp + ssh client + X-win32. IP 192.168.135.250

遠程環境:Linux + ssh server. IP 192.168.135.3

打開X server(X-win32)

利用X轉發選項實現X轉發

DOS環境下,輸入

ssh –X 192.168.135.3

輸入用戶名和密碼。輸入

xclock &

顯示效果

image

點擊是,顯示

image

利用SSH的端口轉發功能實現X轉發功能

DOS環境下輸入

ssh –R 6011:127.0.0.1:6000 192.168.135.3

(爲什麼是-R遠程端口轉發,根據數據流判斷,還得仔細理解X server和X client的區別)(6011:127.0.0.1:6000,可理解爲 源端口:遠程主機:遠程主機端口)(轉發135.3主機的6011端口,需設置DISPLAY變量)

輸入用戶名和密碼,登錄。輸入

export DISPLAY=127.0.0.1:11.0

輸入

xclock &

顯示效果

image

windows下配置putty做上述實驗

確保不要選中Enable X11 forwarding

image

設置ssh Tunnels(ssh 隧道)

Source port:6011

Destination:192.168.135.250:6000

Remote

Auto

點擊Add

image

其它選項根據習慣自行設置。

輸入用戶名和密碼,登錄,設置DISPLAY變量,與上部分類似

export DISPLAY=127.0.0.1:11.0

xclock &

顯示效果

image



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章