1. 程式人生 > >釋出一個基於Go語言的 SSH 遠端終端 WebConsole

釋出一個基於Go語言的 SSH 遠端終端 WebConsole

基於Golang、WebSocket、TermJS的SSH遠端終端,希望能幫到大家。

主要應用到隔離網路內,SSH遠端終端的訪問問題。

歡迎大家踴躍報名,利用業餘時間來拓展此專案,增加更多的功能服務大家。


更新日誌
2016.03.05


    新增:
        1、增加 Dockerfile


2016.03.04 釋出 v1.1


    新增:
        1、增加命令列的啟動、停止、狀態檢視功能. 如: ./apibox start/stop/status


2016.03.03


    修證:
        1、修改獨立模式時登陸JS驗證問題.


    新增:
        1、增加後臺執行模式(conf/conf.json.  daemon:true/false);
        2、增加程式執行時的PID檔案(log/apibox.pid);


大概的資料流向:


    瀏覽器--》WebSocket--》SSH--》Linux OS


[email protected]: http://git.oschina.net/shibingli/webconsole
Github:     https://github.com/shibingli/webconsole


演示地址:  http://www.pangu.cloud   (通過DaoCloud的Docker服務構建)
    


程式包結構:
├── bin
│   └── apibox
├── conf
│   ├── ssl_cert.crt (預設不存在)
│   ├── ssl_cert.key (預設不存在)
│   ├── conf.json
│   └── mime.types
├── log
├── pkg
├── static
│   ├── images
│   └── scripts
└── template


執行環境要求:


1、Intel 架構
2、Linux Kernel 3.x/x86_64 及更高版本
3、建議 Linux 發行版 CentOS 7.x
4、啟用支援 SSL/TLS 模式訪問時,需要生成對應的 SSL 證書檔案且放置到 "conf" 資料夾下並配置 "conf.json" 檔案
5、客戶端要求使用 IE9、Chrome 40、Firefox 38、Safari 9 或更高版本的瀏覽器訪問
6、伺服器端需要對防火牆開啟對應的外部訪問埠。具體需要開放的埠請參考 "conf" 資料夾下的 "conf.json" 檔案中的埠部分的配置
7、本程式只能對 Linux 類的作業系統且支援 SSH 協議的 OS 進行遠端操作
8、基於Go1.6,原生支援 http2 




一、部署
1、將程式解壓至任一目錄,執行 "bin" 資料夾下的 "apibox" 檔案即可。如:"./apibox start/stop"
2、配置檔案在 "conf" 資料夾下,核心配置檔案為 "conf.json"
3、後臺執行可以配置 "conf" 資料夾下的 "conf.json" 檔案,將 "daemon" 項配置為 "true" 
4、執行時日誌檔案存放在 "log" 資料夾下,以當天時期命名
5、也可以配置程式以 Nginx 的 fcgi 模式執行,以 Nginx 做為訪問入口




二、使用
1、程式部署完成後,直接通過瀏覽器訪問即可。如: http(s)://ip:port。


2、外部系統引用步驟:
    
    1)、以 GET 或 POST 的方式,提交 "vm_addr" 引數至 "http(s)://ip:port/console/chksshdaddr" ,成功後可獲取到加密後的 "en_addr" 資訊。注:vm_addr 格式為: "ip:port" ,若不攜帶埠,預設埠為 "22" 。


        獲取到的結果為 JSON 格式(注:以下資料為測試資料):


            成功:
                {
                    "ok": true,
                    "msg": "",
                    "data": { "en_addr": "0b-nDgcazQKTmUw4oBLfxott", "sshd_addr": "192.168.220.173:22" }
                }


            失敗:
                { "ok": false, "msg": "Unable to resolve host address.", "data": null }


    2)、成功獲取到加密的 en_addr 資訊後,以 GET 或 POST 方式訪問  "http(s)://ip:port/console/login/'en_addr'" 即可。注: "en_addr" 是通過第 1)步操作獲取的資料。


        JQuery Demo:


            $.post("/console/chksshdaddr?rnd=" + Math.random(), {
                "vm_addr": "192.168.220.177:22"
            }, function(data) {
                var json = data;
                if (typeof(data) != "object") {
                    json = $.parseJSON(data);
                }
                if (json.ok) {
                    alert(json.data.en_addr);
                }
            });