好,那我就帮你把 ttyd 给你讲透,从概念到部署到使用,顺便对比一下 Shellinabox,看看它为什么被很多人认为更优。


1. 什么是 ttyd

ttyd 是一个开源的 命令行 Web 终端工具,可以将你的本地或服务器终端通过 WebSocket 共享到浏览器中,让你在网页里操作终端,就像直接 SSH 登陆一样。
它的底层基于 libwebsockets 和 xterm.js,轻量、速度快、响应流畅。

简单理解:它就是一个把终端搬到浏览器的工具,比 Shellinabox 更现代、更顺滑。


2. 相比 Shellinabox 的优势

对比项Shellinaboxttyd
UI 界面简单单色,老旧基于 xterm.js,UI 现代,支持主题
协议HTTP/HTTPS(基于 AJAX)WebSocket(更低延迟、更流畅)
输入体验偶尔卡顿几乎无延迟,输入体验接近本地
安装依赖比较多(SSL、配置复杂)依赖少,编译或安装简单
功能扩展较少支持自定义命令、身份认证、多用户访问
维护情况基本停止更新社区活跃,更新频繁

3. 安装 ttyd

方式一:Linux 包管理器(推荐)

Ubuntu/Debian:

sudo apt update
sudo apt install ttyd

CentOS/RHEL(EPEL 源):

sudo yum install epel-release
sudo yum install ttyd

方式二:使用 Docker(方便部署)

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

然后浏览器访问 http://服务器IP:7681 即可进入容器的 bash。

方式三:源码编译安装

git clone https://github.com/tsl0922/ttyd.git
cd ttyd
mkdir build && cd build
cmake ..
make && sudo make install

4. 基本用法

启动一个 bash 终端:

ttyd bash

指定端口:

ttyd -p 8080 bash

绑定到指定网卡(仅局域网访问):

ttyd -p 8080 -i 192.168.1.10 bash

限制只允许一个客户端连接:

ttyd --once bash

添加用户名密码认证:

ttyd -c 用户名:密码 bash

运行特定命令(而不是完整终端):

ttyd top

这样网页打开就是 top 界面,退出后会断开连接。


5. 常用参数

参数说明
-p指定端口
-i绑定 IP
-c 用户名:密码基本认证
--once只允许一次连接
--ssl启用 HTTPS
--ssl-cert / --ssl-key指定 SSL 证书与私钥
-t设置 xterm.js 主题或字体大小

6. 安全建议

  • 建议结合 Nginx + HTTPS + Basic Auth 做反向代理
  • 生产环境避免直接暴露到公网
  • 配置防火墙,只允许特定 IP 访问
  • 如果需要公网访问,建议配合 fail2ban 防爆破

7. 使用场景

  • 给没有 SSH 客户端的用户提供远程命令行
  • 在教学、培训中做 Linux 命令演示
  • 嵌入到 Web 运维面板(如自建管理后台)
  • IoT 设备远程维护