实时审计远程SSH终端交互的关键在于捕获命令与响应原文,需组合系统级日志、协议级代理(如SSH-MITM)和进程级流量分析三路径:OpenSSH设LogLevel VERBOSE记录认证事件,ForceCommand强制路由会话;SSH-MITM解密记录输入输出及文件内容;通过ps/ss定位子进程socket分析异常数据流,并在合规场景下将日志写入独立syslog服务器以保障不可否认性。

实时审计远程 SSH 终端交互,关键不在“连上了没”,而在“他敲了什么、回了什么、传了什么”。真正的审计必须穿透加密层,捕获命令与响应原文,而非仅记录登录时间或 IP。这需要组合系统级日志、协议级代理和进程级流量分析三种路径,缺一不可。
用 OpenSSH 自带能力做基础审计
OpenSSH 本身支持细粒度日志输出,是第一道防线:
- 修改 /etc/ssh/sshd_config,设
LogLevel VERBOSE—— 这能让 auth.log 记录认证成功、失败、密钥指纹等事件 - 启用
ForceCommand或配合AuthorizedKeysCommand,把用户会话强制路由到审计包装脚本(如记录 exec 调用) - 结合
journalctl -u sshd -f实时盯住连接建立与断开,配合ss -tnp | grep :22快速定位活跃会话对应 PID
用 SSH-MITM 实现协议层深度捕获
当需要看到明文命令、文件传输内容或接管终端时,SSH-MITM 是最直接的方案:
- 启动中间人服务:
ssh-mitm server --listen-port 2022 --remote-host target.example.com --remote-port 22 - 客户端改连
ssh -p 2022 user@mitm-ip,所有输入输出、密码(若用密码认证)、scp文件内容均被解密记录 - 用
ssh-mitm audit --list-sessions查看活跃会话,再用--session-id实时接管,相当于“远程旁观+插话”
从 sshd 子进程抓取真实流量特征
对于已绕过代理、直连生产服务器的场景,需从内核层面定位单个会话的异常行为:
- 用
ps -eo pid,ppid,comm,args --forest | grep sshd | grep -E '@|notty'找出处理具体会话的子进程 PID - 执行
ls -l /proc/PID/fd/ | grep socket提取该进程绑定的 socket inode 编号 - 运行
ss -i -t -n "inode:12345678"查看该连接的bytes_sent、bytes_acked差值及recv-q积压量——持续高位差值 + 大量未确认数据,极可能是批量数据外泄
补充:合规场景下的闭环审计建议
金融、政务等强合规环境,不能只靠技术捕获,还需满足“不可否认性”要求:
- 所有审计日志写入独立 syslog 服务器,禁用本地 root 修改权限
- 命令执行记录必须包含:操作者账号、源 IP、起止时间戳、完整命令行、标准输出/错误内容(非截断)
- 对 sudo、root 操作单独标记并触发实时告警,避免“一人多权、事后难溯”

















