Web即終端——利用Web共享終端應用

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

Web即終端——利用Web共享終端應用

GoTTY

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

Web即終端——利用Web共享終端應用

安裝

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

Web即終端——利用Web共享終端應用

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

可以用brew管理器安裝:

brew install sorenisanerd/gotty/gotty

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

go get github。com/sorenisanerd/gotty

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

用法

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

gotty [options]

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

Web即終端——利用Web共享終端應用

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

Web即終端——利用Web共享終端應用

基本選項

Web即終端——利用Web共享終端應用

-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

Web即終端——利用Web共享終端應用

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:

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

Web即終端——利用Web共享終端應用

或者基於原始碼自己編譯:

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 從原始碼。

用法

命令列選項:

Web即終端——利用Web共享終端應用

基本用法

ttyd -p 8080 bash

Web即終端——利用Web共享終端應用

Web即終端——利用Web共享終端應用

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

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

Web即終端——利用Web共享終端應用

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

Web即終端——利用Web共享終端應用

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則支援更加全面的終端功能,更加快速流暢。大家可以根據愛好選擇一種使用,也可以兩種都先嚐試一下,然後再選擇。

相關文章