基於 Web 的 Linux 終端 WebTerminal


有時候用公共電腦,或者在沒有安裝 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 命令進行啟動:

  1.  
    $ 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 並指定服務端口:

  1.  
    $ 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 終端: webSSH_login image

webSSH_Terminal image

3. 參數

wssh 的一些主要參數如下:

  1.  
    #配置監聽地址與服務端口
  2.  
    wssh --address='0.0.0.0' --port=8000

     

  3.  
     
  4.  
    #配置缺少主機密鑰策略
  5.  
    wssh --policy=reject
     

     

  6.  
  7.  
    #配置日志級別
  8.  
    wssh --logging=debug

     

  9.  
     
  10.  
    #配置保存日志到指定文件
  11.  
    wssh --log-file-prefix=main.log
     

     

  12.  
  13.  
    #更多參數說明
  14.  
    wssh --help

4. Nginx

wssh 可以使用 Nginx 作為后台代理,以及啟用 SSL 訪問,參考配置文件:

  1.  
    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;
     
    }

     

    使用 Nginx 作為后台代理,並啟用 SSL 訪問,可以避免你的 ssh 證書被暴露。此外,你的瀏覽器和 Web 服務器之間的通信將使用安全的 Websockets 進行加密。
  • 嘗試使用 reject policy 作為缺少主機密鑰時的策略,以及經過驗證的 known_hosts,可以防止中間人的攻擊。其思路是,webssh 會依次檢查系統主機密鑰文件("~/.ssh/known_hosts")和應用程序主機密鑰文件("./known_hosts"),如果 ssh 服務器的主機名(hostname)沒有被發現或者密鑰不匹配,連接將被中止。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM