Files
LinkPort/docs/ssh-command-audit.md
曾志威 408f346ab1 feat: add WebDAV sync backups and unauthenticated targets
Replace active S3 sync with encrypted WebDAV synchronization and independent backups. Support explicit empty passwords and unauthenticated MongoDB, Redis, HTTP and HTTPS targets. Include migration, design and validation documentation.

Validation: build and go vet passed; Playwright 113 passed with 4 existing failures. Full Go run reproduced the existing cluster discovery test failure. Preserve unrelated SSH fingerprint changes outside this commit.
2026-09-22 14:00:42 +08:00

4.1 KiB
Raw Permalink Blame History

SSH 终端命令审计

旧版本只拼接键盘输入。因此输入 sh u 后按 Tab,即使终端显示完整文件名,审计中仍可能只有 sh u\t。光标移动、中文退格和超过 16 KiB 的命令也可能丢失内容。

新采集器支持常见行编辑操作、UTF-8 中文、分段控制序列和 bracketed paste 多行粘贴。SSH exec 和交互输入不再应用旧的 16 KiB 截断;交互输入按一次提交最多接收 1 MiB 原始按键,超出时中止会话,不会截断后继续执行。

Tab 补全和历史召回

转发回车前,先加密保存实际输入及原始按键。对于 Tab 补全、上下方向键、历史搜索等由远端 shell 决定内容的操作,随后从 PTY 的终端回显中识别提交行,并更新同一条审计记录,不额外生成重复记录。日期分库切换时仍更新原记录所在的日期库。

  • 回显已补全:已从对应提示符后的回显提取输入文本。
  • 待回显确认:未获得可匹配的回显、终端导航无法确定,或没有申请 PTY。保留输入文本和原始按键,不把猜测标记为完整命令。
  • 原始按键:转义显示,\t 表示 Tab,\r / \n 表示回车,\x1b 开始终端控制序列。

关闭回显、复杂多行重绘、全屏程序、定制键绑定以及脚本内部执行的命令无法凭终端输入可靠确认;输入文本仍不是服务器执行追踪,也不表示目标执行成功。

执行结果与输出

  • SSH exec:关联保存标准输出、错误输出,以及服务器报告的退出码或退出信号。两个输出通道排空后才标记结束;没有退出通知、转发失败或审计失败时标为中断,不推断执行成功。申请 PTY 的 exec 通常也会合并标准与错误输出。
  • 交互终端:每条已记录输入关联其提交后、到下一次已记录输入提交或会话关闭之间观测到的输出。包含回显、提示符和可能交错的后台输出;连续粘贴多条命令时,结果也可能落在后面的输入区间。它不保证精确的一条命令对应一份输出,不记录或猜测单条 shell 命令的退出码。PTY 通常已合并标准与错误输出。
  • 采集中断:输出先加密写入,再转发给客户端;审计写入失败会中止转发。未结束的记录显示“尚无结束标记”,可能仍在运行,也可能在服务异常退出时未写入结束状态。

输出按最多 32 KiB 的块加密保存至原始命令所在的 UTC 日期审计库,不设总输出截断;磁盘占用随输出量增加。输出和结果元数据随原命令的 7 天保留期清理。SFTP 文件内容仍不采集,配置 WebDAV 备份也不包含命令输出;完整审计备份需停止服务并复制完整数据目录。

详情中的“执行输出”支持刷新、分页加载、通道筛选及完整原始字节下载。页面最多预览约 8 MiB,避免大量输出占满浏览器;该限制不改变已保存内容。预览按 UTF-8 解码并转义控制字符,不执行 ANSI/HTML;二进制或其他编码内容可下载查看。全部通道的下载按网关采集顺序合并,不保证两个远端流之间的精确时间顺序;也可单独下载标准或错误输出。下载只包含开始下载时已保存的块,运行中的命令可稍后再次下载。

结果查询与下载沿用命令审计的个人会话及 API Token audit 权限。旧记录显示“未采集输出”,无法补录历史结果。此功能在更新服务并重新建立 SSH 会话后生效,不要求修改目标服务器的 shell 配置。

查看与导出

「命令审计」在宽屏显示表格,在窄屏显示卡片;筛选项按可用宽度排列。点击「查看」按记录 ID 加载完整内容,详情支持自动换行、横向滚动、复制和刷新。列表只请求摘要,防止长记录拖慢页面;摘要不会改变数据库中的完整内容。

CSV 导出保留完整已采集文本,并附带采集方式、是否待确认及原始按键。旧记录已丢失的补全内容无法事后恢复;更新服务后重新建立 SSH 会话,后续输入才使用新的采集器。