LinuxSSH安全加固与History历史清理
Linux SSH 安全加固与 History 历史清理运维笔记
一、SSH 服务安全加固方案
1. 核心配置文件路径
/etc/ssh/sshd_config
2. 最终加固配置内容
在配置文件中直接修改或追加以下参数:
PasswordAuthentication no # 禁用密码认证,仅允许密钥登录,防止暴力破解
PubkeyAuthentication yes # 启用公钥认证,配合上一条实现密钥登录
PermitRootLogin no # 禁止 root 直接 SSH 登录,降低高权限账户被攻击风险
MaxAuthTries 3 # 单次连接最多允许 3 次认证尝试,超限断开,抑制暴力猜测
LoginGraceTime 20 # 认证阶段限时 20 秒,超时自动断开,减少空占连接
PermitEmptyPasswords no # 禁止空密码账户登录,杜绝无口令入口
X11Forwarding no # 关闭 X11 转发,减少不必要的攻击面与转发风险
MaxStartups 2:4:6 # 限制并发未认证连接:2 个后开始随机拒绝,4 个起拒绝概率递增,6 个全拒,防连接耗尽3. 应用并重启服务命令
一键覆盖/追加配置、备份原文件、检查语法并重启 SSH 服务的完整命令:
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak && \
sed -i -E 's/^[#[:space:]]*(PasswordAuthentication)[[:space:].].*/\1 no/i' /etc/ssh/sshd_config && \
sed -i -E 's/^[#[:space:]]*(PubkeyAuthentication)[[:space:].].*/\1 yes/i' /etc/ssh/sshd_config && \
sed -i -E 's/^[#[:space:]]*(PermitRootLogin)[[:space:].].*/\1 no/i' /etc/ssh/sshd_config && \
sed -i -E 's/^[#[:space:]]*(MaxAuthTries)[[:space:].].*/\1 3/i' /etc/ssh/sshd_config && \
sed -i -E 's/^[#[:space:]]*(LoginGraceTime)[[:space:].].*/\1 20/i' /etc/ssh/sshd_config && \
sed -i -E 's/^[#[:space:]]*(PermitEmptyPasswords)[[:space:].].*/\1 no/i' /etc/ssh/sshd_config && \
sed -i -E 's/^[#[:space:]]*(X11Forwarding)[[:space:].].*/\1 no/i' /etc/ssh/sshd_config && \
sed -i -E 's/^[#[:space:]]*(MaxStartups)[[:space:].].*/\1 2:4:6/i' /etc/ssh/sshd_config && \
grep -q -i "MaxStartups" /etc/ssh/sshd_config || echo "MaxStartups 2:4:6" >> /etc/ssh/sshd_config && \
sshd -t && systemctl restart sshdVerification: 运行后无报错输出且 systemctl status sshd 状态为 active (running)。
二、Bash History 历史记录清理方案
1. 删除内存中最后一条命令
history -d $((HISTCMD-1))说明: 删除上一条命令;执行后本条删除命令本身仍会留在历史中,如需彻底擦除需再处理一次。
2. 批量删除内存中最后 N 条命令(例如最后 10 条)
使用循环从大到小倒序删除,避免索引漂移:
for i in {1..10}; do history -d $((HISTCMD-1)); done说明: 更稳妥的写法(Bash 5+)是使用范围一次性删除:history -d -10--1。
3. 清空当前会话内存历史并重新加载历史文件
history -c && history -r说明:
history -c:清空当前会话内存中的历史列表(不会立即修改磁盘上的~/.bash_history)。history -r:从历史文件(默认~/.bash_history)重新读取记录到当前内存列表。- 组合效果:相当于把当前会话内存历史“重置”为磁盘文件中已保存的内容——本次会话中尚未写入文件的命令会从内存列表中消失,而之前会话已落盘的历史依然保留。
典型用途: 清掉本次会话临时产生的内存记录,恢复到上次持久化的历史状态,而非彻底删除所有历史。
4. 将内存修改持久化同步写入历史文件
使清理动作同时生效于物理日志文件(~/.bash_history):
history -w5. 彻底清空所有历史(内存 + 磁盘)
如需彻底清除当前用户全部历史记录,可使用:
history -c && history -w说明: history -c 清空内存列表,history -w 将空列表覆盖写入 ~/.bash_history,实现内存与磁盘同时清空。注意:已退出会话的旧记录若未合并,可能仍存在于其他会话的内存中,需逐会话处理或直接清空/删除历史文件。
6. 命令对比速查
| 命令 | 作用 | 是否影响磁盘文件 | 典型场景 |
|---|---|---|---|
history -d $((HISTCMD-1)) | 删除内存中上一条命令 | 否 | 删单条(删除命令本身仍留痕) |
history -d $(history / awk '{print $1}') | 删除内存中当前这条命令 | 否 | 擦除刚输入的敏感命令 |
for i in {1..10}; do history -d $((HISTCMD-1)); done | 循环删最后 10 条(易索引漂移) | 否 | 批量删(建议改用 history -d -10--1) |
history -c && history -r | 清空内存后从文件重新加载 | 否(仅读) | 回滚到上次持久化状态 |
history -w | 将内存列表写入历史文件 | 是(覆盖写) | 持久化清理结果 |
history -c && history -w | 清空内存并覆盖写入空内容 | 是(覆盖写空) | 彻底清空当前用户历史 |