0%

ssh tunnel

ssh

目前在非 linux 系統上主要遠端連線主機的方式之一。
他有下面幾個特點

  1. 安全 - 相比較原始的 telnet 和遠端連都是明碼傳送,就好像在一個透明的辦公室,讓所有人看你的一舉一動一般。
  2. 穩定 - 經過近十年的改善,已經是系統管理不可或缺的工具。很多問題也被各方高手改善讓系統更穩定。
  3. 功能強大 - 除了連線以外,還可以檔案傳輸可以取代ftp。可以讓很多原來不安全的連線透過 ssh 的安全通道連線。

    通道 tunnel

    系統上有很多原有系統,但不一連線定足夠安全,我們可以利用 ssh 來建立安全的通道,
    讓原有的連線透過 ssh 的安全通道和遠端主機連線,保護資料的安全傳。

例如我們在原系統上的 X11 ,透過 ssh 的 X-forward 就可以讓遠端的 X11 連線更安全。
又或是遠端部署的臨時網頁伺器,要建立 ssl 連線需要很繁複的手續,透過 ssh 的 port forwarding
就可以簡單的讓本機的 port 透過 ssh port forwarding 對應到遠端的網頁伺服器 port ,
而且因為是透過 ssh ,所有的資料都是被加密的,更加安全快速。

建立通道

命令列建立通道

1
$ ssh -L 8080:ee.ntu.edu.tw:80 owen@ee.ntu.edu.tw
  • -L 8080:ee.ntu.edu.tw:80 就是告訴 ssh 在和主機連線時
    讓本機開啟 8080 的 port,透過已經建立的 ssh 連線
    對應到遠端 ee.ntu.edu.tw:80,可以是遠端主機可以連線到的任一主機及相對應的port
  • -L 是告訴系統要建立本機的 port forwarding
    如果需要對應多個通道,可以再加入更多 -L 的選項
    下面是建立兩個 forwarding 的例子
1
$ ssh -L 8080:ee.ntu.edu.tw:80 -L 5900:localhost:5900 owen@ee.ntu.edu.tw

這裡我們除了 8080 外,又加入了一個 5900 對應到遠端主機的 5900

本機連線

如果沒有特別指明,開啟的對應 port 是對應到主機的 127.0.0.1,也就是只有本機可以連線
在一般的應用上已經可以解決大部分的問題,而且臨時建立的對應 port 為了安全
我們也不希望有我們不預期的連線進來,所以這樣也是合理的設計

不過總是有不過,有時我們希望可以讓在同網域的其他主機也可以連線就需要其他特別的設定
下面是就是如何來讓同網域連線的方式

1
$ ssh -g -L 8080:ee.ntu.edu.tw:80 owen@ee.ntu.edu.tw

我們加上了 -g 的選項,告訴系統也接受本機以外的連線

設定檔

如果這樣的連線是我們每次連線都需要用到的通道,每次都要打冗長的指令
對一個阿宅工程師來說,太傷筋動骨了,如果可以一行指令就預設就加上那些選項
這樣應該會很方便,就讓我們來把設定放在 ~/.ssh/config
下面就是加上這樣設定的設定檔

1
2
3
host ee.ntu.edu.tw
GatewayPorts yes
LocalForward 8080 localhost:22

有了這樣的設定,配合下面指令,就可以達到和原有指令同樣的功能

1
$ ssh owen@ee.ntu.edu.tw
  • GatewayPorts 對應到 -g 的命令行選項
  • LocalForward 8080 localhost:22 對應到 -L 8080:ee.ntu.edu.tw:80 命令列選項

細節可以參考 ssh_config(5) 的說明文件