如何设置SSH登录后自动执行清理脚本以确保服务器环境保持纯净?
- 内容介绍
- 相关推荐
本文共计813个文字,预计阅读时间需要4分钟。
新手指引:
一、明确要清理什么,避免“越清越乱”
刚上手不必追求全自动全盘扫描,先聚焦三类高频脏数据:
-
临时文件:如
~/tmp/、/tmp/下超过24小时未访问的.tmp或.log.bak文件 -
历史命令缓存:清理
~/.bash_history中重复或含敏感关键词(如password、api_key)的行(仅限当前会话新增部分) -
旧会话残留:删除
~/.ssh/known_hosts中已下线测试机的记录(需提前维护一个待清理主机名列表)
不建议首次就加入磁盘空间检测或日志轮转——这些更适合用 cron 定期执行,而非每次登录触发。
二、把脚本放对位置,登录才“认得着”
不是所有启动文件都适合。新手请统一操作这一步:
- 编辑
~/.bash_profile(bash用户)或~/.zprofile(zsh用户) - 在文件最末尾添加以下逻辑(复制粘贴即可):
~/bin/cleanup.sh >> ~/logs/cleanup.log 2>&1
touch ~/.cleanup_ran
fi
说明:
• [ -t 1 ] 确保只在真正终端登录时运行(避开 scp、rsync 等非交互场景)
• ~/.cleanup_ran 标记防止重复执行(登录多次只清一次)
• 输出全部进日志,不刷屏,便于事后排查
三、写一个安全、可读、易改的清理脚本
创建脚本:mkdir -p ~/bin && nano ~/bin/cleanup.sh,内容如下:
# 清理临时文件(仅用户目录下)
find ~/tmp -type f -mmin +1440 -name "*.tmp" -delete 2>/dev/null
# 过滤历史记录中的敏感词(仅清理本次会话新增行)
if [ -n "$HISTFILE" ] && [ -f "$HISTFILE" ]; then
sed -i '/password\|key\|secret\|token/d' "$HISTFILE"
fi
# 删除已知失效的 known_hosts 条目(示例:test-vm1,test-db2)
for host in test-vm1 test-db2; do
ssh-keygen -R "$host" 2>/dev/null
done
保存后赋予执行权限:chmod +x ~/bin/cleanup.sh
注意:脚本中所有路径都用 ~ 或绝对路径,不依赖环境变量;所有命令加 2>/dev/null 静默错误,避免登录卡住。
四、验证是否生效,别等出事才检查
不要直接关终端重登——那样看不到错误。按顺序执行验证:
- 手动运行一次:
bash -x ~/bin/cleanup.sh,看输出是否符合预期 - 检查语法:
bash -n ~/.bash_profile,确认无报错 - 新开终端模拟登录:
ssh -o PreferredAuthentications=publickey $USER@localhost - 登录后立即检查:
ls -l ~/logs/cleanup.log和cat ~/.cleanup_ran
如果日志有内容、标记文件存在、且没弹出任何报错提示,说明配置成功。
本文共计813个文字,预计阅读时间需要4分钟。
新手指引:
一、明确要清理什么,避免“越清越乱”
刚上手不必追求全自动全盘扫描,先聚焦三类高频脏数据:
-
临时文件:如
~/tmp/、/tmp/下超过24小时未访问的.tmp或.log.bak文件 -
历史命令缓存:清理
~/.bash_history中重复或含敏感关键词(如password、api_key)的行(仅限当前会话新增部分) -
旧会话残留:删除
~/.ssh/known_hosts中已下线测试机的记录(需提前维护一个待清理主机名列表)
不建议首次就加入磁盘空间检测或日志轮转——这些更适合用 cron 定期执行,而非每次登录触发。
二、把脚本放对位置,登录才“认得着”
不是所有启动文件都适合。新手请统一操作这一步:
- 编辑
~/.bash_profile(bash用户)或~/.zprofile(zsh用户) - 在文件最末尾添加以下逻辑(复制粘贴即可):
~/bin/cleanup.sh >> ~/logs/cleanup.log 2>&1
touch ~/.cleanup_ran
fi
说明:
• [ -t 1 ] 确保只在真正终端登录时运行(避开 scp、rsync 等非交互场景)
• ~/.cleanup_ran 标记防止重复执行(登录多次只清一次)
• 输出全部进日志,不刷屏,便于事后排查
三、写一个安全、可读、易改的清理脚本
创建脚本:mkdir -p ~/bin && nano ~/bin/cleanup.sh,内容如下:
# 清理临时文件(仅用户目录下)
find ~/tmp -type f -mmin +1440 -name "*.tmp" -delete 2>/dev/null
# 过滤历史记录中的敏感词(仅清理本次会话新增行)
if [ -n "$HISTFILE" ] && [ -f "$HISTFILE" ]; then
sed -i '/password\|key\|secret\|token/d' "$HISTFILE"
fi
# 删除已知失效的 known_hosts 条目(示例:test-vm1,test-db2)
for host in test-vm1 test-db2; do
ssh-keygen -R "$host" 2>/dev/null
done
保存后赋予执行权限:chmod +x ~/bin/cleanup.sh
注意:脚本中所有路径都用 ~ 或绝对路径,不依赖环境变量;所有命令加 2>/dev/null 静默错误,避免登录卡住。
四、验证是否生效,别等出事才检查
不要直接关终端重登——那样看不到错误。按顺序执行验证:
- 手动运行一次:
bash -x ~/bin/cleanup.sh,看输出是否符合预期 - 检查语法:
bash -n ~/.bash_profile,确认无报错 - 新开终端模拟登录:
ssh -o PreferredAuthentications=publickey $USER@localhost - 登录后立即检查:
ls -l ~/logs/cleanup.log和cat ~/.cleanup_ran
如果日志有内容、标记文件存在、且没弹出任何报错提示,说明配置成功。

