不少的云服務器的網頁后臺就能登錄服務器,并可以在瀏覽器上進入命令行交互。能不能在自己也部署一個呢?能不能配置一個更加符合自身需求的網頁 SSH 終端呢?或許可以以此做一個更好的運維管理平臺?來看看 Python 編寫的 WebSSH 吧!

WebSSH
簡介
WebSSH,是 huashengdun 在 Github 上開源的 SSH 終端 Web 應用,項目地址為
https://github.com/huashengdun/webssh,目前版本為 1.5.2。WebSSH 使用 Python 編寫,基于 tornado、paramiko 和 xterm.js 庫,支持用戶名密碼登錄、密鑰登陸和雙因素認證,命令行窗口支持全屏且可改變大小,并支持主流的現代瀏覽器。

WebSSH
安裝
WebSSH 要求 Python2.7 或 3.4+。如果有 Python 環境,可以使用 pip 進行安裝:
pip install webssh
也可以使用 Docker 運行,下載源碼后在項目根目錄運行
docker-compose up
即可使用項目所包含的 docker-compose.yml 進行運行部署運行。
示例
WebSSH 在安裝完成后,可以直接執行
wssh
運行服務,此時服務默認運行在 127.0.0.1:8888,可以進行訪問,顯示的是一個 SSH 登錄界面:

WebSSH登錄界面
可以看到,登錄的表單輸入包括了主機、密碼、用戶名、密碼、密鑰、口令短語和一次性密碼的輸入,用戶可以根據自身所需的登錄驗證方式進行輸入,最后點擊 Connect 進行連接。連接成功后,網頁就會顯示所登錄的命令行界面:

WebSSH命令行界面
命令行界面由 xterm.js 渲染,十分美觀實用。
WebSSH 還提供了命令行參數來進行配置:
# 在主機2.2.2.2和端口8000上啟動服務
wssh --address='2.2.2.2' --port=8000
# 啟動一個HTTPS服務,指定證書和私鑰
wssh --certfile='/path/to/cert.crt' --keyfile='/path/to/cert.key'
# 對于不在known_hosts上的主機的登錄進行拒絕
wssh --policy=reject
# 設置日志等級為debug
wssh --logging=debug
# 指定日志文件
wssh --log-file-prefix=main.log
# 幫助,更多選項
wssh --help
如果對命令行的字體不滿意,可以把新的字體文件放置在 webssh/static/css/fonts/ 中進行修改。
此外,WebSSH 支持使用 URL 參數進行登錄,和進行命令行窗口的外觀設置:
- 傳遞主機、端口、用戶名和 base64 編碼的密碼進行登錄
http://localhost:8888/?hostname=xx&username=yy&password=str_base64_encoded
- 設置命令行背景顏色
http://localhost:8888/#bgcolor=green
- 設置命令行標題
http://localhost:8888/?title=my-ssh-server
- 設置命令行字符編碼
http://localhost:8888/#encoding=gbk
- 設置登錄后馬上執行的命令
http://localhost:8888/?command=pwd
- 設置命令行類型
http://localhost:8888/?term=xterm-256color
部署
可以使用 Nginx 進行反向代理,
wssh --address='127.0.0.1' --port=8888 --policy=reject
# Nginx配置
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;
}
也可以直接部署為獨立服務。
wssh --port=8080 --sslport=4433 --certfile='cert.crt' --keyfile='cert.key' --xheaders=False --policy=reject
注意為了安全考慮,部署時要使用 SSL 加密,且一般設置 policy 為 reject,拒絕不在 known_hosts 上的主機連接。
WebSSH 項目的作者在其個人主頁上進行了部署,可以進行試用參考。

WebSSH
總結
作為一個網頁 SSH 終端,WebSSH 功能齊全,美觀實用,部署簡單,可以快速實現 SSH 登錄功能。WebSSH 支持大量的個性化配置,可以調配適合自己審美的界面。同時 WebSSH 使用 Python 開發,易于進行二次開發,便于添加擴展功能;后端使用了 tornado 框架,在性能上也可以放心。
WebSSH 是一個典型的 Web 應用,代碼簡潔,功能清晰,是一個值得參考的 Python 開發的 Web 應用項目。感興趣的開發者可以在其基礎上開發插件,實現更多功能。