神奇!可在瀏覽器中運(yùn)行終端命令行的開源工具

【導(dǎo)語】:將 CLI 工具變成 Web 應(yīng)用在瀏覽器端訪問。

簡介

GoTTY 是一個(gè)簡單的命令行工具,可以將 CLI 工具轉(zhuǎn)換為 Web 應(yīng)用程序。GoTTY 是使用 xterm.js 和 hterm 在 Web 瀏覽器上運(yùn)行基于 JavaScript 的終端。

GoTTY 本身提供了一個(gè) websocket 服務(wù)器,它簡單地將來自 TTY 的輸出中轉(zhuǎn)到客戶端,并接收來自客戶端的輸入并將其轉(zhuǎn)發(fā)到 TTY。這個(gè) hterm + websocket 的想法受到 Wetty 的啟發(fā)。

項(xiàng)目地址是:https://github.com/sorenisanerd/gotty

安裝

安裝包安裝

可以從 Releases 頁面下載最新的穩(wěn)定二進(jìn)制文件進(jìn)行安裝,文件名中包含 darwin_amd64 的適用于 Mac 系統(tǒng)。

https://github.com/sorenisanerd/gotty/releases  

使用 Homebrew 安裝

$ brew install sorenisanerd/gotty/gotty  

使用 Go 安裝

如果有 Go 語言環(huán)境,可以使用 go get 命令安裝 GoTTY 。但是,此命令會(huì)從最新的 master 分支構(gòu)建一個(gè)二進(jìn)制文件,其中可能包含不穩(wěn)定的代碼。GoTTY 需要 go 1.9 或以上版本。

$ go get github.com/sorenisanerd/gotty  

用法

gotty [options] <command> [<arguments...>]  

使用終端命令作為 gotty 的參數(shù),如 gotty top。默認(rèn)情況下,GoTTY 在端口 8080 啟動(dòng) Web 服務(wù)器。在 Web 瀏覽器上打開 URL,可以看到正在運(yùn)行的命令,就像在終端上運(yùn)行一樣。

命令參數(shù)

--address value, -a value     要監(jiān)聽的 IP 地址(默認(rèn): "0.0.0.0") [$GOTTY_ADDRESS]  
   --port value, -p value        要監(jiān)聽的端口號(hào)(默認(rèn): "8080") [$GOTTY_PORT]  
   --path value, -m value        訪問路徑url(默認(rèn): "/") [$GOTTY_PATH]  
   --permit-write, -w            允許客戶端執(zhí)行寫操作(默認(rèn): false) [$GOTTY_PERMIT_WRITE]  
   --credential value, -c value  身份驗(yàn)證的憑證(如: 用戶名:密碼, 默認(rèn)禁用) [$GOTTY_CREDENTIAL]  
   --random-url, -r              向 URL 添加一個(gè)隨機(jī)字符串(默認(rèn): false) [$GOTTY_RANDOM_URL]  
   --random-url-length value     隨機(jī) URL 字符串的長度(默認(rèn): 8) [$GOTTY_RANDOM_URL_LENGTH]  
   --tls, -t                     啟用 TLS/SSL (默認(rèn): false) [$GOTTY_TLS]  
   --tls-crt value               TLS/SSL 證書文件路徑(默認(rèn): "~/.gotty.crt") [$GOTTY_TLS_CRT]  
   --tls-key value               TLS/SSL 密鑰文件路徑(默認(rèn): "~/.gotty.key") [$GOTTY_TLS_KEY]  
   --tls-ca-crt value            TLS/SSL 用于客戶端認(rèn)證的證書(默認(rèn): "~/.gotty.ca.crt") [$GOTTY_TLS_CA_CRT]  
   --index value                 自定義 index.html 文件[$GOTTY_INDEX]  
   --title-format value          瀏覽器窗口的標(biāo)題格式(默認(rèn): "{{ .command }}@{{ .hostname }}") [$GOTTY_TITLE_FORMAT]  
   --reconnect                   啟用重新連接(默認(rèn): false) [$GOTTY_RECONNECT]  
   --reconnect-time value        重新連接的時(shí)間(默認(rèn): 10) [$GOTTY_RECONNECT_TIME]  
   --max-connection value        gotty 的最大連接數(shù)(默認(rèn): 0) [$GOTTY_MAX_CONNECTION]  
   --once                        只接受一個(gè)客戶端并在斷開連接后退出(默認(rèn): false) [$GOTTY_ONCE]  
   --timeout value               等待客戶端連接超時(shí)時(shí)間(0 表示禁用) (默認(rèn): 0) [$GOTTY_TIMEOUT]  
   --permit-arguments            允許客戶端在 URL 中發(fā)送命令行參數(shù)(e.g. http://example.com:8080/?arg=AAA&arg=BBB) (默認(rèn): false) [$GOTTY_PERMIT_ARGUMENTS]  
   --width value                 屏幕的靜態(tài)寬度,0(默認(rèn))表示動(dòng)態(tài)調(diào)整大小 [$GOTTY_WIDTH]  
   --height value                屏幕的靜態(tài)高度,0(默認(rèn))表示動(dòng)態(tài)調(diào)整大小 [$GOTTY_HEIGHT]  
   --ws-origin value             與 WebSocket 源 URL 匹配的正則表達(dá)式。默認(rèn)情況下不接受跨源請(qǐng)求 [$GOTTY_WS_ORIGIN]  
   --term value                  要在瀏覽器上使用的終端名稱,xterm 或 hterm 之一. (默認(rèn): "xterm") [$GOTTY_TERM]  
   --enable-webgl                啟用 WebGL 渲染器(默認(rèn): true) [$GOTTY_ENABLE_WEBGL]  
   --close-signal value          當(dāng) gotty 停止命令時(shí),發(fā)送到命令進(jìn)程的信號(hào)(默認(rèn): SIGHUP) [$GOTTY_CLOSE_SIGNAL]  
   --close-timeout value         客戶端斷開后關(guān)閉進(jìn)程的時(shí)間(默認(rèn): -1) [$GOTTY_CLOSE_TIMEOUT]  
   --config value                配置文件路徑(默認(rèn): "~/.gotty") [$GOTTY_CONFIG]  
   --help, -h                    查看幫助文檔 (默認(rèn): false)  
   --version, -v                 打印當(dāng)前版本 (默認(rèn): false)  

配置文件

可以通過配置文件來修改 gotty 的一些默認(rèn)行為,默認(rèn)會(huì)從 ~/.gotty 路徑加載配置文件。

// 使用 9000 端口進(jìn)行監(jiān)聽  
port = "9000"  
  
// 啟用 TSL/SSL  
enable_tls = true  
  
// 修改終端顯示字體、顏色  
preferences {  
    font_size = 5  
    background_color = "rgb(16, 16, 32)"  
}  

安全配置

默認(rèn)情況下,GoTTY 只允許調(diào)整終端窗口大小,不允許客戶端發(fā)送可能導(dǎo)致寫入的命令。如果要允許客戶端將輸入寫入 TTY 時(shí),請(qǐng)?zhí)砑?-w 選項(xiàng)。不過,接受來自遠(yuǎn)程客戶端的輸入對(duì)于大多數(shù)命令來說是危險(xiǎn)的操作。

要限制客戶端訪問,可以使用 -c 選項(xiàng)啟用基本身份驗(yàn)證。使用此選項(xiàng),客戶端需要輸入指定的用戶名和密碼才能連接到 GoTTY 服務(wù)器。這種情況下,用戶名和密碼會(huì)以純文本形式在服務(wù)器和客戶端之間傳輸。如果對(duì)安全要求更高,請(qǐng)使用 SSL/TLS 證書身份驗(yàn)證。

-r 選項(xiàng)是一種更隨意的限制訪問方式。GoTTY 會(huì)生成一個(gè)隨機(jī) URL,以便只有知道該 URL 的人才能訪問服務(wù)器。

默認(rèn)情況下,服務(wù)器和客戶端之間的所有流量都未加密。如果通過 GoTTY 發(fā)送機(jī)密信息,官方強(qiáng)烈建議使用 -t 在會(huì)話中啟用 TLS/SSL。默認(rèn)情況下,GoTTY 加載的 CRT和密鑰文件放在 ~/.gotty.crt 和 ~/.gotty.key。可以使用 --tls-crt 和 --tls-key 選項(xiàng)指定證書文件路徑。如果需要生成自簽名認(rèn)證文件時(shí),可以使用openssl命令:

openssl req -x509 -nodes -days 9999 -newkey rsa:2048 -keyout ~/.gotty.key -out ~/.gotty.crt  

開源前哨 日常分享熱門、有趣和實(shí)用的開源項(xiàng)目。參與維護(hù) 10萬+ Star 的開源技術(shù)資源庫,包括:Python、Java、C/C++、Go、JS、CSS、Node.js、PHP、.NET 等。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容