跳到正文
豫言包管理
← 全部包

安全外壳终端 0.1.0

豫言 · 库

伪终端及独立标准流子进程的非阻塞接口(由宿主实现,Node 宿主尚未实现)。

标准流子进程。豫 面向无 PTY 的 SSH 会话,以当前用户身份启动绝对路径程序,分别返回可写 stdin、可读 stdout 和可读 stderr。三个父端均为非阻塞并在执行其他程序时关闭;stdin 使用本地连接,使子进程关闭输入后写入返回错误而不触发宿主 SIGPIPE。调用方须分别处理部分写入、EOF、三路描述符关闭及子进程回收。它不更换用户身份、不净化继承环境,也不解释客户端命令;高权限多用户 SSHD 须另加身份与环境策略。

等待连接与标准流 在同一次原生 poll 中观察 SSH 连接及仍活动的三路标准流;调用方用关注位选择 stdin 可写、stdout 可读和 stderr 可读,返回固定位置的四个事件码。已关闭的标准流可传 -1 并取消对应关注位,以免挂断事件造成空转。

检验标准流命令 将 SSH exec 命令的原始字节交给子进程参数接口前拒绝空值、超过 65536 字节和内部 NUL;它不改变命令内容或替代 SSHD 授权。只有完成用户认证并确定执行策略后,调用方才应把命令交给 shell。

发送标准流程序信号 与 发送伪终端程序信号 把 RFC 4254 列出的标准信号名映射到宿主 SIG* 常量,仅对本库仍登记的 PID 或 PTY 进程组发信号;未知名返回 -EINVAL。对应的信号名称接口把退出时的宿主信号号转回 SSH 名称,未知号返回空字节串。

收取标准流程序 与 收取伪终端程序 返回四个整数:状态、正常退出码、终止信号号和 core dumped 标记。状态为 0 表示仍在运行,1 表示正常退出,2 表示受信号终止;仅状态为 2 时,后两项中的信号号和转储标记可用于 exit-signal。

待办事项:原先的 C 实现(openpty 伪终端与标准流子进程)已随编译器改为单一 Wasm 后端而删除,Node 宿主尚未实现这两组原语,调用会报“未实现 Node 宿主原语”;以下是接口约定。本包原先面向原生 macOS/Linux,使用 openpty 分配主从伪终端,提供非阻塞读写、可读与可写等待、窗口尺寸的设置与查询、原始模式设置、单独关闭回显及描述符关闭。开启返回状态码与两个文件描述符;状态 0 表示成功,负值为 -errno。读返回读得字节数及字节串;0 表示 EOF(包括 Linux PTY 对端关闭时的 EIO),负值表示其他系统错误或暂不可读。写返回实际写入数或负错误码。可写等待只在 POLLOUT 时返回 1;超时为 0,挂断或错误为负值。原始模式关闭规范行缓冲与回显;单独关闭回显保留规范行和 EOT 的 EOF 语义。是否采用这些模式须由会话层根据客户端请求决定。

调用方须关闭主从两个描述符。终端读写不会启动子进程,也不会建立控制终端;SSHD 仍须在授权与会话生命周期管理后接入受控的程序启动接口。窗口尺寸以平台 winsize 的 16 位无符号字段为界。

伪终端子进程。豫 可在当前用户身份下启动明确指定的绝对路径程序。子进程建立新会话,重新打开 PTY 从端作为标准输入、输出、错误,并取得控制终端;不支持 POSIX_SPAWN_SETSID 的宿主返回 -ENOTSUP。接口只接收程序路径和参数列表,不解释 shell 命令;远程 exec 内容仍须由 SSHD 独立授权和映射。调用方须用非阻塞收取接口回收子进程;终止接口向登记中的进程组发 SIGTERM。此接口不会更换用户身份或净化继承环境,不能直接用于高权限的多用户 SSHD。

依赖

查看包配置

上传历史

当前上传修订:1 ·

  1. 上传修订 1
    下载 ZIP

包层级

父包:安全外壳

没有子包。