本篇介紹如何使用 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,而 代表隨機選取。 |
-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 數量上限,預設為 (無上限)。 |
-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
