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
- ssh -L 8080:puritys.me:80 admin@puritys.me
當我連線到 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
- ssh -D 127.0.0.1:1080 admin@puritys.me
透過 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 admin@192.168.0.1 "ssh admin@192.168.0.2"
這個指令有點太長,每次都打這麼長是有點累,這時我們可以把設定寫進 ~/.ssh/config 這個檔案之中,以後只要輸入 ssh dev 就可以直接連到 C 機器。
- Host dev
- HostName 192.168.0.2
- user admin
- 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 的密碼,再來就執行以下指令。
- ssh -vvvND 192.168.xx.xx:1080 Administrator@192.168.xx.xx