Web 终端修复记录

问题描述

Web 终端访问的不是服务器本身,看不到 OpenClaw 相关的进程执行。


问题原因

原配置:

1
docker run -d --name ttyd tsl0922/ttyd:latest

问题分析:

  • ttyd 运行在 Docker 容器内
  • 只能看到容器内的进程
  • 无法访问宿主机的进程和文件
  • 无法执行服务器管理操作

解决方案

方案:直接在宿主机运行 ttyd

优势:

  • ✅ 直接访问宿主机所有进程
  • ✅ 完整的服务器管理权限
  • ✅ 可以查看和操作 OpenClaw
  • ✅ 可以管理所有 Docker 容器

修复步骤

1. 安装 ttyd

1
2
3
4
5
6
7
# 下载预编译二进制文件
wget https://github.com/tsl0922/ttyd/releases/download/1.7.7/ttyd.x86_64 -O /usr/local/bin/ttyd
chmod +x /usr/local/bin/ttyd

# 验证安装
ttyd --version
# 输出: ttyd version 1.7.7-40e79c7

2. 创建 Systemd 服务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 创建服务文件
cat > /etc/systemd/system/ttyd.service << EOF
[Unit]
Description=ttyd - Web Terminal
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/ttyd -p 7681 -W /bin/bash
Restart=always
RestartSec=3
User=root
Environment=HOME=/root

[Install]
WantedBy=multi-user.target
EOF

# 启动服务
systemctl daemon-reload
systemctl enable ttyd
systemctl start ttyd

3. 验证运行

1
2
3
4
5
6
# 检查服务状态
systemctl status ttyd

# 查看进程
ps aux | grep ttyd
# 输出: /usr/local/bin/ttyd -p 7681 -W /bin/bash

权限问题修复

问题:execvp failed: Permission denied

原因: 缺少 -W 参数,默认只读模式

解决:

1
2
3
4
5
# 修改前
ExecStart=/usr/local/bin/ttyd -p 7681 /bin/bash

# 修改后
ExecStart=/usr/local/bin/ttyd -p 7681 -W /bin/bash

参数说明:

  • -W - 启用写入模式(Writable)
  • /bin/bash - 使用 Bash Shell

使用验证

测试访问

访问:https://你的域名/terminal/

输入认证信息:

  • 用户名:你的用户名
  • 密码:你的密码

验证功能

1
2
3
4
5
6
7
8
9
10
11
# 查看 OpenClaw 进程
ps aux | grep openclaw

# 查看所有 Docker 容器
docker ps

# 查看系统日志
tail -f /var/log/syslog

# 编辑配置文件
nano ~/.openclaw/openclaw.json

配置对比

项目 Docker 方案 宿主机方案
进程可见性 仅容器内 ✅ 全部
文件访问 需挂载 ✅ 全部
权限管理 受限 ✅ 完整
资源占用 稍高 ✅ 更低
维护复杂度 简单 简单

安全建议

⚠️ 重要提示

现在 ttyd 运行在宿主机上,拥有完整的 root 权限!

安全措施

  1. 基本认证 - 已配置 Nginx 认证
  2. HTTPS 加密 - 已启用
  3. ⚠️ 定期审计 - 检查访问日志
  4. ⚠️ 强密码 - 使用强密码

额外建议

1
2
3
4
5
6
# 可选:限制访问 IP
location /terminal/ {
allow 你的IP;
deny all;
# ...
}

常用命令

服务管理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 启动服务
systemctl start ttyd

# 停止服务
systemctl stop ttyd

# 重启服务
systemctl restart ttyd

# 查看状态
systemctl status ttyd

# 查看日志
journalctl -u ttyd -f

配置修改

1
2
3
4
5
6
# 编辑服务文件
nano /etc/systemd/system/ttyd.service

# 修改后重载
systemctl daemon-reload
systemctl restart ttyd

故障排查

问题:无法访问

检查:

1
2
3
4
5
6
7
8
9
10
11
12
# 1. 检查服务状态
systemctl status ttyd

# 2. 检查端口
netstat -tlnp | grep 7681

# 3. 检查 Nginx
nginx -t
systemctl status nginx

# 4. 查看日志
journalctl -u ttyd -n 50

问题:认证失败

检查:

1
2
3
4
5
6
# 查看 htpasswd 文件
cat /etc/nginx/.htpasswd

# 重新生成密码
htpasswd -bc /etc/nginx/.htpasswd 你的用户名 你的密码
systemctl reload nginx

相关资源


修复完成时间: 2026-03-02

当前状态: ✅ 运行正常,可访问所有服务器进程


问题已解决


Web 终端修复记录
https://dapalm.com/2026/03/02/Web终端修复记录/
作者
Mars
发布于
2026年3月2日
许可协议