防敏感操作泄露需“执行前屏蔽+执行后清理+源头过滤”三步:执行前加空格跳过记录(需HISTCONTROL=ignorespace);执行后用history -d精准删除含关键词条目并history -w同步;退出前history -c && history -w && >~/.bash_history彻底清空。

直接用 history -c 只能清空当前会话的内存记录,不碰 ~/.bash_history 文件,对防泄露作用有限。真正防止敏感操作被回溯,得结合“执行前屏蔽 + 执行后清理 + 源头过滤”三步走,而不是只靠 -c 临时擦除。
执行敏感命令前:主动跳过记录
在输入含密码、密钥、token 或私有路径的命令前,加一个**空格**即可让它不进 history(需提前配置):
- 确保 ~/.bashrc 中有:
HISTCONTROL=ignorespace:ignoredups - 重载配置:
source ~/.bashrc - 之后输入类似
mysql -u admin -p'123abc' -h 10.0.0.5时,在开头加个空格变成mysql -u admin -p'123abc' -h 10.0.0.5,该行就不会写入任何历史
执行中或执行后:精准清除已落盘的敏感条目
如果已经误输并回车,别慌,立刻定位并删除对应记录(不删整个文件,避免覆盖异常):
- 查出含关键词的所有历史编号:
history | grep -E "(password|key|token|secret|api.*key)" | awk '{print $1}' - 按编号倒序逐条删除(防止编号偏移):
history | grep "password" | awk '{print $1}' | sort -nr | xargs -I{} history -d {} 2>/dev/null - 强制同步内存状态到文件:
history -w(确保 .bash_history 实时更新)
退出前兜底:清空本次会话 + 阻断下次读取
运维终端关闭前做两件事,让本次操作彻底“无痕”:
- 运行
history -c && history -w:清空内存历史,并把空状态写入 ~/.bash_history - 再补一句
> ~/.bash_history:直接清空文件内容(哪怕 history -w 没完全生效,这步也兜底) - 如需更高保障,可加
shred -u ~/.bash_history(需安装 coreutils-extra),覆盖并删除文件,防恢复
长期防护:让 history 默认更干净
一劳永逸的方法是改 ~/.bashrc,减少敏感信息入库概率:
- 设忽略规则:
HISTIGNORE="ls:ll:pwd:cd:clear:history:exit:*password*:*.sh" - 限制保存量:
HISTSIZE=500; HISTFILESIZE=500(减少堆积) - 开启时间戳:
HISTTIMEFORMAT="%F %T ",便于审计时快速识别高风险时段 - 设置
export HISTCONTROL=ignoreboth(等效 ignorespace+ignoredups)


















