ttyd 網頁介面 Linux 系統終端機工具

本篇介紹如何使用 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 跟一般的網頁整合在一起。

ttyd 整合 Nginx 網頁伺服器

ttyd 整合 Nginx 網頁伺服器

ttyd 與 Vim 編輯器

ttyd 與 Vim 編輯器

新增 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

Linux

1 Comment

  1. penny

    謝謝!

Leave a Reply