好,那我就帮你把 ttyd 给你讲透,从概念到部署到使用,顺便对比一下 Shellinabox,看看它为什么被很多人认为更优。
1. 什么是 ttyd
ttyd 是一个开源的 命令行 Web 终端工具,可以将你的本地或服务器终端通过 WebSocket 共享到浏览器中,让你在网页里操作终端,就像直接 SSH 登陆一样。
它的底层基于 libwebsockets 和 xterm.js,轻量、速度快、响应流畅。
简单理解:它就是一个把终端搬到浏览器的工具,比 Shellinabox 更现代、更顺滑。
2. 相比 Shellinabox 的优势
对比项 | Shellinabox | ttyd |
---|---|---|
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 设备远程维护
发表回复