如何存储PuTTY连接的EC2 Ubuntu实例SSH会话日志并同步到CloudWatch或S3
PuTTY连接EC2 Ubuntu实例的SSH会话日志落地方案
方案1:使用pam_tty_audit + CloudWatch Agent(最轻量无侵入方案)
pam_tty_audit是Linux PAM模块自带的审计组件,无需额外安装复杂工具,可完整记录所有SSH tty会话的输入输出,包括PuTTY发起的连接场景,用户无感知,记录内容不会被手动清除history的操作覆盖。
- 开启SSH会话审计:编辑
/etc/pam.d/sshd文件,在末尾添加session required pam_tty_audit.so enable=* - 调整日志存储:默认审计日志会写入
/var/log/auth.log,可修改rsyslog配置将SSH会话审计日志单独输出到/var/log/ssh-session.log,降低采集过滤成本 - 配置流式上报:安装CloudWatch Agent,将对应日志路径加入采集规则,设置为流式上报即可实时同步到CloudWatch Logs;需要存储到S3的场景,可直接配置CloudWatch Logs定期导出任务,或配置Agent将轮转后的日志直接上传到S3。
该方案默认记录所有用户的全量操作,包括sudo提权后的执行命令,无遗漏
方案2:使用auditd审计框架(规则自定义灵活度更高)
auditd是Linux官方原生的审计工具,可精准捕获所有进程执行调用,适合需要自定义审计维度的场景。
- 安装依赖:执行
apt update && apt install auditd audispd-plugins -y - 配置审计规则:新建
/etc/audit/rules.d/ssh-audit.rules文件,添加规则-a exit,always -F arch=b64 -S execve -k ssh-session-cmd,可额外加-F euid>=1000过滤只审计普通用户操作,不需要过滤root操作可删除该参数 - 生效规则:执行
systemctl restart auditd && systemctl enable auditd - 日志上报:auditd日志默认存储在
/var/log/audit/audit.log,通过CloudWatch Agent采集该路径即可,可直接用CloudWatch Logs的过滤规则提取命令内容、执行用户、时间戳等核心字段。
方案3:PuTTY走Session Manager隧道(复用SSM原生日志能力)
如果不想修改实例侧配置,可直接复用已有的Session Manager日志能力,将PuTTY的SSH连接通过SSM隧道代理:
- 本地安装AWS CLI和Session Manager插件,配置对应实例的访问权限
- PuTTY侧配置端口转发,通过本地SSM隧道代理连接实例的22端口
该场景下所有会话完全被SSM接管,直接使用你已配置的SSM会话日志存储规则即可自动落盘到CloudWatch Logs或S3,同时不需要给实例开放公网SSH端口,安全性更高,适合内部运维场景使用。
内容的提问来源于stack exchange,提问作者Akanksha Iyer
相关产品推荐
相关产品推荐

