2013
Aug
17

SSH 是 Linux 系統中,一項非常重要的技術,它可以完成很多你異想不到的工作,請看以下的介紹。

SSH 相關參數

  • -N 不執行 ssh command , 加了這個參數後,畫面就不會進入 tty(Terminal) 模式, tty 模式是指 user 登入 SSH server 後,還能手動輸入 linux 指令。

若我們沒有進入 tty, 畫面就會卡在程式執行中的狀態,如此只要按 ctrl +c 就可以執行中斷 SSH 連線 , 另外也可以用來 debug,看 SSH 連線的 Log。

通常我們使用 tunnel 時,不需要執行任何指令,所以都會加上 -N 。

  • -f 背景執行。
    • -v , -vv, -vvv : 顯示 Log, 一個 v 代表顯示一層 Log (level1) ,兩個 V 就會顯示 level1 + level2 ,最多是三個 v 。
  • -L: Local Port Forwarding. 本地機器連到遠端機器。
  • -R: Remote Port Forwarding. 遠端機器連回本地機器。
  • -D: Dynamic Port Forwarding. 建立 SOCKS4 or SOCKS5 protocol 的 Socks Server。

Local Port forwarding

當我連線到 local 8080 Port , Linux 會自動導到 puritys.me ,並連線至 puritys.me 80 Port

Remote Port Forwarding

  • ssh -N -R 8080:localhost:8888 puritys.me

在 localhost 建立一個 Remote SSH Tunnel ,與 puritys.me 建立一個連線,當 puritys.me 的機器中,有程式連線到 puritys.me 8080 Port ,這時就會進入 ssh tunnel,而自動導到 localhost 並連線至 localhost 8888 Port

Local Tunnel 可以使 Request 從 Local Machine 連線 Remote Machine ,而 remote tunnel 則可以使 Request 從 Remote Machine 連至 Local Machine。

Dynamic Port Forwarding

透過 local 1080 Port 所有的 Request 都會透過 puritys.me 這台機器連線出去,類似 Proxy 的功能。

Socks Proxy

如何讓 Browser 透過不同的 IP 讀取網頁呢?

一般來說有 HTTP, HTTPS , Socks 這幾種方式,首先用上一步的方式,在電腦 A 中建立 Dynamic Tunnel,接著在另一台電腦 B 的 browser 設定中,開啟 proxy ,並設定 Socks HOST 為電腦 A IP ,再輸入 Port 為 1080,這樣就完成了 Socks Proxy 連線的設定。

SSH onetime Proxy

如何一次性的從 A 機器,透過 B 機器(192.168.0.1),連到 C 機器(192.168.0.2)。

ssh -t -p 22 [email protected] "ssh [email protected]"

這個指令有點太長,每次都打這麼長是有點累,這時我們可以把設定寫進 ~/.ssh/config 這個檔案之中,以後只要輸入 ssh dev 就可以直接連到 C 機器。

SSH config
  1. Host dev
  2. HostName 192.168.0.2
  3. user admin
  4. ProxyCommand ssh 192.168.0.1 nc %h 22

在 Cygwin 上建立 SSH Tunnel

Cygwin 是一個能讓 Windows 執行 Linux 相關功能的軟體,詳情可以參考這篇文章: Cygwin

安裝 SSH Daemon

打開 Cygwin 前,必須先記得用 Administrator 的權限啟動 Cygwin terminal ,然後在 Terminal 裡執行下列兩個指令來安裝與啟重 SSH Daemon。

  • ssh-host-config -y (安裝 SSH daemon)
  • cygrunsrv -S sshd (啟動 SSHD)

啟動 sshd 時,如果有遇到錯誤訊息,可以看一下 /var/log/sshd.log 裡面的訊息,另外記得手動修改兩個資料夾的權限。

  • tail -n 300 /var/log/sshd.log
  • chmod 400 /etc/ssh*key
  • chmod 600 /var/empty

建立 Dynamic tunnel

建立 ssh 連線會需要輸入帳號密碼,所以必需先設定 Administrator 的密碼,再來就執行以下指令。


回應 (Leave a comment)