首頁 > 軟體

Web即終端——用瀏覽器訪問共享終端

2021-05-31 17:30:21

我們熱愛終端,終端簡易而便捷,但是終端需要先連線到主機上,連線到主機需要SSH,需要認證,需要配證書,設定還要登陸堡壘機才行。對於一般使用者有一定的壁壘,那麼有沒有快捷的方法呢?本文蟲蟲就給大家介紹通過Web共享終端的兩種解決方案——GoTTY和ttyd,GoTTY是Golang編寫,ttyd是C語言編寫兩者各有千秋,同學們可以根據喜好選擇。

GoTTY

GoTTY 是一個簡單的命令列工具,可將可以一鍵將命令列工具轉換為 Web應用程式。

安裝

GoTTY的安裝非常簡單,可以直接Github官方倉庫下載編譯好的二進位制檔案安裝,當前版本為V1.2.0。

檔案命名為darwin_amd64可以用於Mac OS X 使用者。

可以用brew管理器安裝:

brew install sorenisanerd/gotty/gotty

熟悉golang的使用者可以使用go get安裝:

go get github.com/sorenisanerd/gotty

該命令會將拉取一個最新的master分支構建二進位制包,其中可能包含不穩定或破壞性的更改。

用法

GoTTY的使用很簡單,基本用法為:

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

如果不帶參數gotty使用預設參數(例如 gotty top)。 預設情況下,GoTTY 在監聽8080埠啟動Web服務。

在瀏覽器上開啟 URL,就可以看到正在運行的命令和終端上運行一樣:

基本選項

-a,-address,監聽的 IP 地址(預設:"0.0.0.0",即全網開放),對應配置變數為[$GOTTY_ADDRESS]。

-p,--port,監聽的埠號(預設:8080),對應配置變數為[$GOTTY_PORT]。

-m,--path,基本路徑(預設"/"),對應配置變數為[$GOTTY_PATH]。

-w,--permit-write,允許客戶端TTY寫入(預設值:false,注意安全),對應配置變數為[ $GOTTY_PERMIT_WRITE ]。

-c,--credential,基本身份驗證的憑據(例如:使用者名:密碼,預設禁用),對應配置變數[$GOTTY_CREDENTIAL]。

-r,--random-url,向 URL 新增一個隨機字元串(預設值:false,建議啟用), 對應配置變數[$GOTTY_RANDOM_URL]。

--random-url-length 值隨機 URL 長度(預設值:8), 對應配置變數[$GOTTY_RANDOM_URL],[$GOTTY_RANDOM_URL_LENGTH]

-t,--tls,啟用TLS/SSL(預設: false) , 對應配置變數[$GOTTY_TLS]

--tls-crt ,TLS/SSL 證書檔案路徑(預設:~/.gotty.crt), 對應配置變數[ $GOTTY_TLS_CRT ]

--tls-key TLS/SSL 金鑰檔案路徑(預設:~/.gotty.key), 對應配置變數[ $GOTTY_TLS_KEY ]

--tls-ca-crt v,TLS/SSL 用於客戶端認證CA根證書檔案(預設: ~/.gotty.ca.crt), 對應配置變數[ $GOTTY_TLS_CA_CRT ]

--index 值自定義 index.html 檔案, 對應配置變數[ $GOTTY_INDEX ]

--title-format,瀏覽器視窗的標題格式(預設:{{ .command }}@{{ .hostname }}), 對應配置變數[ $GOTTY_TITLE_FORMAT ]

--reconnect 啟用重新連線(預設值:false), 對應配置變數[ $GOTTY_RECONNECT ]

--reconnect-time value 重新連線的時間(預設值:10), 對應配置變數[ $GOTTY_RECONNECT_TIME ]

--max-connection value 到 gotty 的最大連線數(預設值:0), 對應配置變數[ $GOTTY_MAX_CONNECTION ]

--once 只接受一個客戶端並 退出 在斷開連線時 , 對應配置變數(預設值:false)[ $GOTTY_ONCE ]

--timeout值超時秒 為 等待客戶端(0到禁用), 對應配置變數(預設值:0)[ $ GOTTY_TIMEOUT ]

--permit-arguments 允許客戶端 傳送 命令 行參數 在 URL 中 (例如 example:8080/?arg=AAA & arg=BBB)(預設值:false), 對應配置變數[ $GOTTY_PERMIT_ARGUMENTS ]

--width value 螢幕的靜態寬度,0(default) 表示動態調整大小 (default: 0) , 對應配置變數[ $GOTTY_WIDTH ]

--height value 螢幕的靜態高度,0(default) 表示動態調整大小 (default: 0) , 對應配置變數[ $GOTTY_HEIGHT ]

--ws-origin value 與 WebSocket 接受的原始 URL 匹配的正則表示式。 預設情況下不接受跨源請求 , 對應配置變數[ $GOTTY_WS_ORIGIN ]

--term value 要在瀏覽器上使用的終端名稱,xterm 或 hterm 之一。 (預設: 「 xterm 」 ), 對應配置變數[ $GOTTY_TERM ]

--enable-webgl 啟用 WebGL 渲染器(預設值:false), 對應配置變數[ $GOTTY_ENABLE_WEBGL ]

--close-signal value ,gotty 關閉時傳送到程序的訊號(預設:SIGHUP)(預設:1), 對應配置變數[ $GOTTY_CLOSE_SIGNAL ]

--close-timeout,客戶端斷開連線後強制關閉程序的秒數(預設值:-1)(預設值:-1), 對應配置變數[$GOTTY_CLOSE_TIMEOUT ]

--config ,配置檔案路徑(預設: ~/.gotty), 對應配置變數[ $GOTTY_CONFIG ]

-h,--help,顯示幫助(預設:false)

-v,--version,列印版本(預設:false)。

配置檔案

上一部分基本命令選選項都對應一個配置變數,可以在設定自定義化的預設配置項目,配置檔案預設為~/.gotty,也可以通過—config指定。一個示例配置檔案如下:

//監聽埠為9000

port = "9000"

//啟用TSL/SSL

enable_tls = true

// 指定主題的字型和背景色

preferences {

font_size = 5

background_color = "rgb(16, 16, 32)"

}

多使用者共享

當新客戶端連線到伺服器時,GoTTY 會用執行的命令啟動一個新程序。預設情況下使用者不能與其他人共享單個終端。但是,可以使用多終端複用器與多個客戶端共享單個程序。GoTTy支援通過Screen和Tmux共享終端

Screen

安裝 GNU screen 後,通過creen -S name-for-sessions開始一個新的會話並通過另一個終端視窗/選項卡中gotty 連線到它

./gotty screen -x name-for-session。

在第一個終端選項卡/視窗中執行的所有命令和活動將會由gotty共享到web。

tmux

在tmux下可以由gotty啟動新tmux 會話:

gotty tmux new -A -s gotty top

此命令不允許客戶端傳送擊鍵,但是,可以從本地終端附加會話並運行諸如切換模式的操作top命令。

但是你可以使用tmux再從終端連線到該tmux會話:

tmux new -A -s gotty

可以通過快捷鍵與夥伴們分享當前的會話,可以配置tmux配置檔案(.tmux.conf)。

# Start GoTTY in a new window with C-t

bind-key C-t new-window "gotty tmux attach -t `tmux display -p '#S'`"

Docker

為了安全地給使用者提供一個被監禁的環境時,可以使用Docker容器,如下所示:

gotty -w docker run -it --rm busybox

ttyd

ttyd 是一個C語言開發的終端web共享方案,用於通過網路共享終端。ttyd基於在 的 Libwebsockets 和libuv 建立,效能很好,響應速度快。前端方案基於Xterm.js,具有全功能終端以及中日韓 和IME支援。具有lrzsz支援的影象ZMODEM。基於OpenSSL提供 TSL/SSL支援。

ttdy支援跨平臺:macOS、Linux、FreeBSD/OpenBSD、 OpenWrt 、Windows等。

安裝

macOS安裝,可以通過homebrew:

brew install ttyd

Linux:

可以直接下載對應的二進位制版本下載:

或者基於源碼自己編譯:

sudo apt-get install build-essential cmake git libjson-c-dev libwebsockets-dev

git clone github/tsl0922/ttyd.git

cd ttyd && mkdir build && cd build

cmake ..

make && sudo make install

可能還需要編譯/安裝 libwebsockets 從原始碼。

用法

命令列選項:

基本用法

ttyd -p 8080 bash

和Gotty預設只讀不同,ttyd預設是全功能的一個終端,可以執行任意操作,所以要注意自己設定安全。

甚至可以在web下,巢狀啟動一個ttyd(套娃)。

要在通過系統認證,在web登陸有再使用,可以用ttyd login啟動(注意login啟動需要root許可權);

Docker

同樣ttyd也支援docker方式啟動。多個客戶端共享單個 docker 容器,可以使用:

docker run -it --rm -p 7681:7681 tsl0922/ttyd

為每個客戶端創建新的 docker 容器:

ttyd docker run -it --rm Ubuntu

總結

本文給大家介紹利用Web共享終端的兩種方案,GoTTY和ttyd,兩種方案都各有特長,GoTTY精練,更加安全(預設只讀,隨機token字串等,單應用),而ttyd則支援更加全面的終端功能,更加快速流暢。大家可以根據愛好選擇一種使用,也可以兩種都先嚐試一下,然後再選擇。


IT145.com E-mail:sddin#qq.com