有時候用公共電腦,或者在沒有安裝 putty、xshell 之類的終端的電腦上訪問或展示服務器上的一些資料數據,甚至是在運維平台開發中想要嵌入 WebTerminal 功能,於是找到了這個項目——基於 Web 的 Linux 終端 webSSH。
webSSH 是 Python 語言寫的一個基於 tornado 和 paramiko 包的 web 應用,它可以作為一個 ssh 終端連接你的服務器。webSSH 主要特點:
- 支持 SSH 密碼認證,包括空密碼;
- 支持 SSH 公鑰認證,包括 DSA RSA ECDSA Ed25519 keys;
- 支持 Encrypted keys;
- 支持全屏終端,且終端窗口可調整大小;
- 自動檢測系統默認編碼;
- 適用於 Python 2.7-3.6。
1. 安裝
pip install webssh
2. 啟動
webssh 安裝完成,我們可以通過 wssh 命令進行啟動:
-
$ wssh [I 180627 11:14:55 settings:67] WarningPolicy [I 180627 11:14:55 main:33] Listening on 127.0.0.1:8888
wssh 默認啟用 localhost 的 8888 端口開啟服務,我們也可以通過監聽 0.0.0.0 來使用本地的 iP 並指定服務端口:
-
$ wssh --address='0.0.0.0' --port=8000 [I 180627 11:07:05 settings:67] WarningPolicy [I 180627 11:07:05 main:33] Listening on 0.0.0.0:8000
這時候,在瀏覽器打開 http://ip:8000,輸入登陸信息,登陸 web 終端:
3. 參數
wssh 的一些主要參數如下:
-
#配置監聽地址與服務端口
-
wssh --address='0.0.0.0' --port=8000
-
-
#配置缺少主機密鑰策略
-
wssh --policy=reject
-
-
#配置日志級別
-
wssh --logging=debug
-
-
#配置保存日志到指定文件
-
wssh --log-file-prefix=main.log
-
-
#更多參數說明
-
wssh --help
4. Nginx
wssh 可以使用 Nginx 作為后台代理,以及啟用 SSL 訪問,參考配置文件:
-
location / { proxy_pass http://127.0.0.1:8888; proxy_http_version 1.1; proxy_read_timeout 300; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Real-PORT $remote_port; }
- 嘗試使用 reject policy 作為缺少主機密鑰時的策略,以及經過驗證的 known_hosts,可以防止中間人的攻擊。其思路是,webssh 會依次檢查系統主機密鑰文件("~/.ssh/known_hosts")和應用程序主機密鑰文件("./known_hosts"),如果 ssh 服務器的主機名(hostname)沒有被發現或者密鑰不匹配,連接將被中止。