You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在last日志中忽略特定主机?解决Ansible登录记录干扰问题

解决Ansible登录记录干扰last命令排查的方案

我来分享几个实用的解决思路,帮你摆脱Ansible登录记录的干扰——毕竟满屏的自动化操作记录确实会打乱你排查真实用户登录的节奏。

方案1:快速过滤last输出(最简单临时方案)

如果你只是想临时屏蔽这些记录,不需要修改系统或Ansible配置,直接在执行last时过滤掉来自Ansible主机的条目即可:

last root | grep -v "ansiblehost.mydomain"

或者你可以给这个过滤命令设置一个别名,方便日常使用:

echo 'alias last_real="last | grep -v ansiblehost.mydomain"' >> ~/.bashrc
source ~/.bashrc

之后直接输入last_real就能看到过滤后的登录记录了。

方案2:从源头阻止Ansible登录记录写入wtmp

如果想彻底不让这些记录生成,可以通过修改PAM配置,让来自Ansible主机的root登录不被记录到utmp/wtmp文件(last命令就是读取这些文件的内容)。

  1. 编辑SSH服务的PAM配置文件(多数发行版路径为/etc/pam.d/sshd):
vi /etc/pam.d/sshd
  1. 找到包含pam_utmp.so的session行,修改为以下内容(添加host=-ansiblehost.mydomain参数排除指定主机):
session    optional    pam_utmp.so        host=-ansiblehost.mydomain
  1. 重启SSH服务使配置生效:
# systemd系统
systemctl restart sshd
# SysVinit系统
service sshd restart

注意:修改PAM配置前最好备份原文件,避免配置错误导致登录问题。另外,部分旧版本的pam_utmp可能不支持host参数,你可以先执行man pam_utmp确认参数支持情况。

方案3:为Ansible创建专用操作用户(更安全的长期方案)

用root直接执行Ansible操作不仅会产生大量干扰记录,还存在安全风险。建议创建一个专用的Ansible操作用户,配置sudo权限后用该用户执行自动化任务:

  1. 在目标服务器创建专用用户:
useradd -m ansible
passwd -l ansible  # 禁用密码登录,只允许密钥登录
  1. 配置sudo免密权限:
echo 'ansible ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers.d/ansible
chmod 0440 /etc/sudoers.d/ansible
  1. 在Ansible配置中指定该用户(修改ansible.cfg或在playbook中设置remote_user: ansible):
[defaults]
remote_user = ansible

之后Ansible的操作都会用ansible用户登录,执行sudo切换到root。此时last记录的是ansible用户的登录,你可以直接过滤该用户的记录,或者同样用PAM配置屏蔽该用户的登录记录,同时也符合最小权限的安全原则。

方案4:优化Ansible SSH连接参数减少记录

通过调整Ansible的SSH连接参数,使用连接复用功能,减少每次任务创建新SSH会话的次数,从而减少登录记录:

修改ansible.cfg中的ssh_connection段:

[ssh_connection]
ssh_args = -o ControlMaster=auto -o ControlPersist=300s -o LogLevel=QUIET
control_path = ~/.ansible/cp/%%h-%%p-%%r

ControlPersist会保持SSH连接一段时间,后续任务复用已有连接,避免频繁创建新会话生成记录;LogLevel=QUIET也会减少不必要的日志输出。


内容的提问来源于stack exchange,提问作者paxamus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:16:00