概述 —— 这套机制做什么
实例卡片上的 [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)。
如何使用
认证分两步:
- Laravel 的
/asset/instances/ssh/session签发一张 带签名的票据(级别 2 以上 · 有效期 20 秒 · 记入审计)。 - 桥接程序校验票据。对于 password 认证的实例,浏览器通过第一个 WS 帧转发密码(不做保存);对于 key 认证的实例,桥接程序使用已保存的私钥(Crypt)或
~/.ssh/agent。
xterm.js ⇄ WebSocket ⇄ ssh2 bridge ⇄ remote sshd (PTY)
数据来源
- 可选的已保存私钥:
infr_instance.ssh_key_enc(Crypt;对外只暴露has_ssh_key布尔值)
访问权限
级别 2 以上 + 审计。生产环境中桥接程序在进程守护下运行,并启用 wss + 主机密钥固定。
相关条目
![카드의 [ssh] 버튼](/manual-shots/ko/instance-card.webp)