我們已經在 [CentOS 7] 你說什麼?! 瀏覽器直接變身成 SSH Client 連上 Server 文章裡,讓瀏覽器變成了 SSH Client 端程式來連線,不過有些朋友提到直接在 SSH Server 本機裝套件、搶 80 Port 會不會太危險?!
的確,這樣子的資安考量是非常正確的。
既然如此 ,那我們可不可以用 Raspberry Pi 當跳板,變成另一台 SSH Server 的中繼介面呢???
事前準備
請先參閱 [Raspberry Pi 3] 老朋友,新功能!關於那些開箱後馬上要作的事,完成初始設定。安裝 Wetty
這次用的方法與 [Raspberry P 3] 內建藍牙能幹嘛?來試試 Google 物聯網計畫的關鍵之一:Eddystone Beacon 如何! 裡的不同,我們直接從 node-arm 下載 *.deb 檔來安裝。
wget http://node-arm.herokuapp.com/node_latest_armhf.deb
sudo dpkg -i node_latest_armhf.deb
因為 wetty 放在 GitHub 上,為了日後更新方便,所以把 git 安裝起來。
sudo apt-get -y install git
再把 wetty 專案從 GitHub 複製下來。
git clone https://github.com/krishnasrinivas/wetty.git
開始安裝。
cd wetty
npm install
剛剛出現了一個錯誤訊息,提醒我們要更新 graceful-fs,依照它的提示來更新。
npm ls graceful-fs
啟動服務
先確認一下 Raspberry Pi 的 IP 位址。
ifconfig eth0 | grep inet
單純的用 HTTP 協定來啟動。
node app.js -p 8008
按 Ctrl + C 可以停止。
如果要走 HTTPS 協定的話,要先產生金鑰和憑證。
openssl req -x509 -newkey rsa:2048 -keyout wetty-key.pem -out wetty-cert.pem -days 1825 -nodes
接著加上指定參數就可以用 HTTPS協定來啟動。
node app.js --sslkey wetty-key.pem --sslcert wetty-cert.pem -p 8080
連線測試
打開瀏覽器,輸入 Raspberry Pi 的 IP 位址與 wetty 的通訊埠,就可以連上了。
http://192.168.88.23:8008
如果走 HTTPS 協定的話,會多一個確認憑證的畫面。
https://192.168.88.23:8008
同樣可以正確的連上 Raspberry Pi 的 SSH Server 了。
說好的跳板呢?
有些朋友或許會因為安全的考量,把 SSH Server 預設的通訊埠改掉,例如從 22 改成了 12345,那 Wetty 同樣可以使用嗎?
如果我們什麼參數都沒改,當然會連不上去。
同時 Wetty 也會吐一堆錯誤訊息給我們。
所以,我們要加上一些參數:
- --sshhost 指定 SSH Server 的 IP 位址或 Domain Name。
- --sshport 指定 SSH Server 的通訊埠。
- --sshuser 指定登入 SSH Server 的帳號。
node app.js -p 8008 --sshhost 127.0.0.1 --sshport 12345 --sshuser root
這時候再用瀏覽器連線上去,就看到訊息不一樣了,可以正確的跟 SSH Server 互動,只不過 root 帳號預設是不准登入的,所以告訴我們權限被拒。
既然有這些參數可以用,那可以用在其他台 SSH Server 上面嗎?
試試看不就知道了,我們就來連連看 CentOS 7 上面的 SSH Server 好了。
結果證明是可行的。
參考資料
圖片來源
- https://pixabay.com
- https://www.raspberrypi.org/
更新紀錄
- 2016/05/16 撰文。
奇怪,我試好幾次都無法跳轉耶?
回覆刪除幾個重點檢查一下:
刪除1. Raspberry Pi 本機的 SSH 可不可以用 wetty 連上去
2. 別台 SSH Server 是否正常
3. 別台 SSH Server 是否有轉 port、對外的防火牆有沒有開 port forwarding