WeTTY 3.0.0 配置参数详解
WeTTY v3.0.0 全量 24 个配置参数实测详解:环境变量与 CLI 对照、SSH 连接五件套、v3 强制 CORS 与安全开关、按场景推荐配置组合与验证方法。
WeTTY 3.0.0 配置参数详解
目标:把 WeTTY v3.0.0 的全部配置项讲透——环境变量、命令行参数两条配置途径的对应关系、每个参数的默认值与实测行为、以及按场景组合的推荐配置。本文全部参数均在 wettyoss/wetty v3.0.0 容器内以
wetty --help与实际部署逐项核对,部署过程见 《WeTTY 3.0.0 Docker Compose 部署实战》,组件定位见 《WeTTY 3.0.0 介绍与选型指南》,排障应用见 《WeTTY 3.0.0 常用操作与排障详解》。
一、配置体系总览
WeTTY v3 有两条配置途径,语义一一对应:
- 环境变量(容器部署首选):把命令行参数的 camelCase 形式去掉连字符转全大写,如
--ssh-host→SSHHOST、--allowed-origin→ALLOWEDORIGIN(多值复数形式为ALLOWEDORIGINS)、--allow-missing-origin→ALLOWMISSINGORIGIN。官方 Compose 示例即用这种形式(SSHHOST/SSHPORT/ALLOWEDORIGINS); - 命令行参数(裸机/npm 部署或临时覆盖):完整清单见下表,
wetty --help可随时查看。
v3 还保留了一个可选的 --conf <文件> 加载 JSON5 配置文件的方式,但官方镜像与文档的主推路径都是环境变量,本文以环境变量为主线。
实测核对的全量参数对照表(v3.0.0 共 24 个业务参数):
| 环境变量 | 命令行参数 | 类型 | 默认值 | 作用 |
|---|---|---|---|---|
| SSHHOST | --ssh-host | string | localhost | SSH 目标主机 |
| SSHPORT | --ssh-port | number | 22 | SSH 目标端口 |
| SSHUSER | --ssh-user | string | 空 | 预置登录用户名 |
| SSHAUTH | --ssh-auth | string | password | 认证方式:password/publickey/none |
| SSHPASS | --ssh-pass | string | 空 | 预置 SSH 密码(配合 sshpass 自动认证) |
| SSHKEY | --ssh-key | string | 空 | 客户端私钥路径(密钥认证) |
| SSHCONFIG | --ssh-config | string | 空 | ssh 客户端配置文件(ssh -F) |
| FORCESSH | --force-ssh | boolean | false | root 运行时也强制走 ssh 而非本机 login |
| KNOWNHOSTS | --known-hosts | string | 系统默认 | known_hosts 路径(设 /dev/null 跳过主机校验) |
| PORT | --port, -p | number | 3000 | WeTTY 监听端口 |
| HOST | --host | string | 全部网卡 | WeTTY 监听地址 |
| SOCKET | --socket | string | 空 | 改用 Unix socket 监听 |
| BASE | --base, -b | string | / | Web 界面挂载的子路径 |
| TITLE | --title | string | WeTTY - The Web Terminal Emulator | 页面标题 |
| COMMAND | --command, -c | string | login | SSH 登录后在远端执行的命令 |
| SSLKEY | --ssl-key | string | 空 | TLS 私钥路径(内建 HTTPS) |
| SSLCERT | --ssl-cert | string | 空 | TLS 证书路径(内建 HTTPS) |
| ALLOWEDORIGINS | --allowed-origin | string[] | 无(必配) | 允许连接 Socket.IO 的浏览器来源 |
| ALLOWMISSINGORIGIN | --allow-missing-origin | boolean | false | 放行无 Origin 头的客户端 |
| ALLOWIFRAME | --allow-iframe | boolean | false | 允许被第三方页面 iframe 内嵌 |
| PINGINTERVAL | --ping-interval | number | 3000 | Socket.IO 心跳间隔(毫秒) |
| PINGTIMEOUT | --ping-timeout | number | 7000 | 心跳超时(毫秒) |
| ALLOWREMOTEHOSTS | --allow-remote-hosts | boolean | false | 允许 URL 参数指定 SSH 目标 |
| ALLOWREMOTECOMMAND | --allow-remote-command | boolean | false | 允许 URL 参数指定远端命令 |
| LOGLEVEL | --log-level | string | info | 服务日志级别 |
两组实测数据佐证默认值:Socket.IO 握手响应里 pingInterval:3000, pingTimeout:7000 与表中一致;启动日志 {"base":"/","label":"Wetty","level":"info","message":"Starting server","port":3000,"title":"WeTTY Lab"} 回显的 base/port/title 与配置一致(TITLE 改成 WeTTY Lab 后生效)。
💡 技术拓展:环境变量 vs 配置文件是容器化组件的两种主流配置形态。环境变量的优势是「改值即重建」,配合 Compose 的 environment 段直观且无挂载成本,十二因子应用(12-Factor App)方法论明确推荐;配置文件的优势是可注释、可结构化嵌套。WeTTY 的参数全是扁平的标量,没有嵌套结构,环境变量是更贴合的形态;v3 保留 --conf 主要服务于复杂部署(同一个镜像按不同 conf 启多实例)的场景。
二、SSH 连接参数组(核心五件套)
这组参数决定「浏览器连到哪、以什么身份认证」,是 WeTTY 的灵魂配置:
2.1 SSHHOST / SSHPORT / SSHUSER(目标三元组)
SSHHOST:目标主机。容器部署时最常见的是 Compose 服务名(如sshd,走内网 DNS 解析)、内网 IP 或域名。不要配localhost——那是 WeTTY 容器自己;如果真想连宿主机,用宿主内网 IP 或host.docker.internal(需额外配置)。root 身份运行且目标为 localhost 时 WeTTY 会改走本机/bin/login,容器场景下这个分支通常不是你想要的,必要时用FORCESSH=true强制走 ssh;SSHPORT:目标 sshd 端口。linuxserver/openssh-server 镜像默认 2222(实测如此),原生 Linux 服务器一般是 22。这里曾实测踩坑:按习惯写 22 连 2222 的目标机,报Connection refused;SSHUSER:预置用户名。不配时浏览器终端会交互式提示Enter your username:(实测回显),每个用户各自输入;配上则所有人默认连同一账号,并跳过用户名交互。多用户场景建议不配,配合 URL 路径/ssh/<user>使用。
2.2 SSHAUTH(认证方式,三种取值)
| 取值 | 行为 | 依赖 | 适用场景 |
|---|---|---|---|
| password(默认) | 终端里出现 xxx@host's password: 提示,人工输密 | 目标 sshd 允许密码认证 | 默认通用 |
| publickey | 用 SSHKEY 指定的私钥认证,免密直达 | 私钥挂进 WeTTY 容器 | 自动化/共享账号 |
| none | 不做客户端认证,完全依赖目标 sshd 侧策略 | 服务器侧免密配置 | 已有统一免密体系 |
v3 的一个实用增强:配置了 SSHPASS 时,WeTTY 会自动用 sshpass -p <pass> ssh ... 完成认证(实测源码核对),实现「打开页面即进 Shell」的免输密体验。但密码会出现在进程列表里(sshpass 的已知问题),且 SSHPASS 落在编排文件中,生产环境建议用 Docker secrets 或干脆不配、维持人工输密。
2.3 KNOWNHOSTS(主机指纹校验)
默认走 OpenSSH 标准流程,首次连接会在终端里出现 Warning: Permanently added '[sshd]:2222' (ED25519) to the list of known hosts.(本次实测原文)。企业内网固定目标可提前把目标机指纹放进 known_hosts 文件挂载进容器,并将 KNOWNHOSTS 指向该文件;实验环境可设 /dev/null 关闭校验(WeTTY 会同时把 StrictHostKeyChecking 切到 no)。
三、服务监听参数组
PORT(3000)/HOST:容器内监听端口与地址。容器场景 PORT 不建议改(Compose 映射对准 3000),改对外端口用 ports 映射即可;SOCKET:改用 Unix socket 监听,用于「WeTTY 与 Nginx 同机」时省掉 TCP 端口暴露,属进阶用法;BASE:子路径部署。默认/(v3 重大变化,v2 默认/wetty,实测 v2 路径访问直接 404)。反代子路径场景配BASE: /wetty后,访问地址变为https://host/wetty/;TITLE:页面标题,实测配WeTTY Lab后页面<title>WeTTY Lab</title>。多实例部署时用它区分环境(如「WeTTY-生产跳板」「WeTTY-实验区」);SSLKEY/SSLCERT:内建 HTTPS。两个都配才生效,WeTTY 直接对外提供 TLS,小规模无反代场景够用;有反代时不必配(TLS 由 Nginx 终结)。
四、v3 安全与传输参数组(重点,v2 没有的新闸门)
4.1 ALLOWEDORIGINS(必配)
允许建立 Socket.IO 连接的浏览器来源,v3 不配直接拒绝启动。实测错误日志:
{"err":"Configure at least one allowed origin with --allowed-origin, ALLOWEDORIGINS, or server.allowedOrigins","label":"Wetty","level":"error","message":"error in server"}
配好后,浏览器带允许 Origin 的握手返回 sid 正常建连;不带 Origin 的工具(curl 等)握手被拒:{"code":4,"message":"Origin not allowed"}(实测)。书写要点:
- 值是完整的
协议://主机:端口,逗号分隔多值,如"http://192.168.1.200:8152,http://localhost:8152"(实测值); - 必须与用户浏览器地址栏所见完全一致——HTTPS 站点写 https,非标端口带上端口;
- 反代改造后改成对外域名(如
https://terminal.example.com),与 BASE 联动时注意子路径不影响 Origin 判定(Origin 只到端口为止)。
4.2 ALLOWMISSINGORIGIN
放行没有 Origin 头的客户端(CLI 脚本、自研终端工具)。默认 false,即本次实测中 curl 握手被拒的原因。只在你确有程序化客户端需求时开启,且开启后等于放弃了 Origin 这一层「必须是浏览器」的约束。
4.3 ALLOWIFRAME
是否允许页面被 iframe 嵌入。默认 false(仅同源可嵌),防止点击劫持。确需嵌入到运维门户时再开。
4.4 PINGINTERVAL / PINGTIMEOUT
Socket.IO 心跳节奏,实测默认 3000/7000 毫秒(握手响应可核对)。跨广域网、移动网络接入时适当调大(如 10000/20000),避免弱网下被误判掉线触发 transport close 断连。
4.5 ALLOWREMOTEHOSTS / ALLOWREMOTECOMMAND
v3 新增的 URL 传参开关:开启后允许通过 ?host=xxx&port=22 甚至 ?command=xxx 在 URL 里指定连接目标与远端命令。灵活性极强也极危险(等于允许构造任意跳板),默认双 false,确有需求(如多环境跳板页)才开,且建议放在强认证的反代之后。
五、按场景的推荐配置组合
5.1 最小内网可用(本次实测基线)
environment:
SSHHOST: sshd
SSHPORT: "2222"
TITLE: WeTTY Lab
ALLOWEDORIGINS: "http://192.168.1.200:8152,http://localhost:8152"
5.2 生产域名 + HTTPS 反代
environment:
SSHHOST: 10.0.0.31
SSHPORT: "22"
BASE: /wetty
TITLE: WeTTY-生产跳板
ALLOWEDORIGINS: "https://terminal.example.com"
LOGLEVEL: warn
5.3 共享实验账号免输密(内网实验环境)
environment:
SSHHOST: sshd
SSHPORT: "2222"
SSHUSER: admin
SSHPASS: q1w2e3r4
SSHAUTH: password
ALLOWEDORIGINS: "http://192.168.1.200:8152"
三组组合的共同点:ALLOWEDORIGINS 永远显式配置,这是 v3 的生存底线。
六、配置验证方法
改配置后按「日志 → 握手 → 页面」三步验证:
# 1) 启动日志回显 base/port/title,确认监听配置生效
docker logs wetty-web 2>&1 | tail -2
# {"base":"/","label":"Wetty","level":"info","message":"Server started","port":3000,...,"title":"WeTTY Lab"}
# 2) 带 Origin 握手,确认 ALLOWEDORIGINS 生效(返回 sid 即通过)
curl -s -H "Origin: http://192.168.1.200:8152" \
"http://localhost:8152/socket.io/?EIO=4&transport=polling" | head -c 80
# 3) 页面标题确认 TITLE 生效
curl -s http://localhost:8152/ | grep -oE '<title>[^<]*</title>'
配置类问题的完整排障路径(含崩溃循环、握手 403、认证失败三类典型)见 《WeTTY 3.0.0 常用操作与排障详解》。