fix: split provider ssh tty modes

This commit is contained in:
Codex
2026-05-07 11:09:16 +00:00
parent 9d8a8e58f3
commit 2aaf0447a6
8 changed files with 28 additions and 15 deletions
+1 -1
View File
@@ -122,7 +122,7 @@ backend-core 可以通过真实 WebSocket 调度向在线 provider 下发 `provi
## Host SSH Maintenance Bridge
宿主 SSH / WSL SSH 转发是 provider-gateway 部署的必备维护能力,但只作为应急维护辅助路径,不用于自动计算任务调度。实现参考 `../web-terminal` 的经验:容器内使用只读挂载的私钥,主动连接宿主或 WSL sshd,并设置 `BatchMode=yes``StrictHostKeyChecking=accept-new``ServerAliveInterval=20``ServerAliveCountMax=3`。主 server Compose 会把 `config.json``sshForwarding.keyDir` 只读挂载为 `/run/host-ssh`provider 标签会上报 `hostSshConfigured``hostSshKeyPresent``hostSshTarget`,便于在前端节点清单确认维护桥是否具备条件。
宿主 SSH / WSL SSH 转发是 provider-gateway 部署的必备维护能力,但只作为应急维护辅助路径,不用于自动计算任务调度。实现参考 `../web-terminal` 的经验:容器内使用只读挂载的私钥,主动连接宿主或 WSL sshd,并设置 `BatchMode=yes``StrictHostKeyChecking=accept-new``ServerAliveInterval=20``ServerAliveCountMax=3`TTY 策略必须按会话类型区分:无远端命令的交互登录 shell 使用 `ssh -tt`,带远端命令的会话使用 `ssh -T`,避免脚本 stdin 被伪终端回显或把 `Ctrl-D` 当成业务输入。主 server Compose 会把 `config.json``sshForwarding.keyDir` 只读挂载为 `/run/host-ssh`provider 标签会上报 `hostSshConfigured``hostSshKeyPresent``hostSshTarget`,便于在前端节点清单确认维护桥是否具备条件。
WSL 计算节点使用 Docker Desktop daemon 时,provider-gateway 容器通常应连接 `host.docker.internal:22`,目标是当前 WSL 发行版里的 sshd,而不是给节点开放公网 SSH。节点侧必须确认 sshd 监听 `22`、目标用户可用维护公钥免密登录、`authorized_keys` 与挂载到 `/run/host-ssh/id_ed25519` 的私钥匹配;如果容器内直连 `host.docker.internal` 都失败,先修复 WSL sshd、Docker Desktop host gateway 或密钥权限,再排查 UniDesk WebSocket 透传。