本篇介紹如何使用 ttyd 透過網頁使用 Linux 系統中的終端機,處理各種互動式工作。
ttyd 是一個簡單的指令工具,可以讓使用者透過網頁介面使用 Linux 系統的終端機,支援各種互動式的操作、安全加密、分享 session 等,是一個小巧好用的小工具。
這裡我們以 Ubuntu Linux 系統做為測試環境,示範如何安裝與使用
ttyd。
安裝 ttyd
首先使用 apt 安裝一些編譯 ttyd 所需要的套件:
# 安裝必要套件
sudo apt-get install cmake g++ pkg-config git 
  vim-common libwebsockets-dev libjson-c-dev libssl-dev
使用 git 從 GitHub 下載最新的 ttyd 原始碼:
# 下載 ttyd 原始碼
git clone https://github.com/tsl0922/ttyd.git
使用 CMake 編譯及安裝:
# 編譯與安裝 cd ttyd && mkdir build && cd build cmake .. make sudo make install
使用 ttyd 分享終端機
安裝好之後就可以使用 ttyd 這個指令來啟動網頁的終端機介面,這個指令有許多的參數可以使用:
| 參數 | 說明 | 
|---|---|
-p--port | 
指定連接埠,預設為 7681,而 0 代表隨機選取。 | 
-i--interface | 
指定網路介面,例如 eth0 或 /var/run/ttyd.sock。 | 
-c--credential | 
指定認證用的帳號密碼檔案(格式為 username:password)。 | 
-u--uid | 
指定執行 ttyd 的使用者 ID。 | 
-g--gid | 
指定執行 ttyd 的群組 ID。 | 
-s--signal | 
離開 ttyd 時傳送的信號(預設為 SIGHUP)。 | 
-a--url-arg | 
允許使用者由 URL 的參數帶入指令。 | 
-R--readonly | 
唯讀模式。 | 
-t--client-option | 
指定傳送給 client 的設定,格式為 key=value。 | 
-T--terminal-type | 
指定終端機類型,預設為 xterm-256color。 | 
-O--check-origin | 
不允許不同來源的 WebSocket 連線。 | 
-m--max-clients | 
指定 client 數量上限,預設為 0(無上限)。 | 
-o--once | 
僅接受一個 client,離線後就結束。 | 
-B--browser | 
以系統預設的瀏覽器開啟終端機。 | 
-I--index | 
自行指定 index.html 的位置。 | 
-S--ssl | 
啟用 SSL 加密。 | 
-C--ssl-cert | 
指定 SSL certificate 檔案。 | 
-K--ssl-key | 
指定 SSL key 檔案。 | 
-A--ssl-ca | 
指定 SSL ca 檔案。 | 
-d--debug | 
設定除錯訊息輸出層級,預設為 7。 | 
-v--version | 
顯示版本。 | 
-h--help | 
顯示使用說明。 | 
ttyd 執行時必須要指定一個啟動指令,最常見的就是 Linux 的預設 shell,也就是 bash:
# 將 ttyd 開在 8080 連接埠,使用 bash shell ttyd -p 8080 bash
執行這行指令即可啟動一個基本的 ttyd 伺服器,它預設只會開在本機的 127.0.0.1 網路介面上,接著就可以在本機以瀏覽器開啟 http://127.0.0.1:8080/ 來查看這個網頁介面的終端機。
除了常見的 shell 之外,也可以使用各種文字介面的指令作為啟動指令,例如 Vim 編輯器:
# 使用 Vim 編輯器作為啟動指令 ttyd -p 8080 vim
若要讓使用者以 Linux 系統的帳號與密碼登入,可以使用 login 作為啟動指令:
# 文字登入介面 sudo ttyd -p 8080 login
Nginx
如果想要將 ttyd 放在 Nginx 伺服器後方,透過 Proxy 的方式提供連線,可以參考以下的 Nginx 設定:
server {
    # ...
    location ^~ /console {
        proxy_pass http://127.0.0.1:8080/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}
在 Nginx 的設定檔中加入這段設定之後,就可以將 /console 這個位置導向至本機的 http://127.0.0.1:8080/,讓 ttyd 跟一般的網頁整合在一起。
新增 Systemd 服務
如果想要讓 Linux 系統的 Systemd 自動管理 ttyd 伺服器,讓它再開機時自動啟動,可以參考 Systemd 的使用教學以及 Systemd 新增服務設定教學,新增一個設定檔 /etc/systemd/system/ttyd.service:
[Unit] Description=ttyd server [Service] Type=simple ExecStart=/usr/local/bin/ttyd -p 8080 login Restart=always [Install] WantedBy=multi-user.target
將權限設定為 644:
sudo chmod 644 /etc/systemd/system/ttyd.service
重新載入 Systemd 設定檔:
# 重新載入 Systemd 設定檔
sudo systemctl daemon-reload
接著就可以使用 systemctl 指令啟動自訂的 ttyd 伺服器:
# 啟動自訂的 ttyd 伺服器
sudo systemctl start ttyd
							
							
				        
							
						

penny
謝謝!