InfraGuard

交互式 SSH PTY 终端

浏览器里的真实 shell(top/vi/sudo 都能用):xterm.js ⇄ WebSocket ⇄ Node 的 ssh2 桥接 ⇄ 远端 sshd。

概述 —— 这套机制做什么

实例卡片上的 [ssh] 操作会在浏览器中打开一个真正的交互式终端。它是一个 PTY 控制台:xterm.js ⇄ WebSocket ⇄ Node 桥接程序(scripts/infr_ssh_bridge.cjs,使用 ssh2) ⇄ 远端 sshd。由于 ssh2 会在远端分配 PTY,top、vi、sudo、less 这类交互式程序都能正常运行(已实测确认 tty = /dev/pts)。

这 不是 Reverb(pub/sub 不适合 PTY 流),也 不是 node-pty(ssh2 是纯 JavaScript,跨平台,无需本地 PTY)。

如何使用

认证分两步:

  1. Laravel 的 /asset/instances/ssh/session 签发一张 带签名的票据(级别 2 以上 · 有效期 20 秒 · 记入审计)。
  2. 桥接程序校验票据。对于 password 认证的实例,浏览器通过第一个 WS 帧转发密码(不做保存);对于 key 认证的实例,桥接程序使用已保存的私钥(Crypt)或 ~/.ssh/agent。
xterm.js  ⇄  WebSocket  ⇄  ssh2 bridge  ⇄  remote sshd (PTY)

数据来源

访问权限

级别 2 以上 + 审计。生产环境中桥接程序在进程守护下运行,并启用 wss + 主机密钥固定。

相关条目

카드의 [ssh] 버튼
카드의 [ssh] 버튼