linux ssh安全加固需实施多层级身份验证,核心是公钥+totp双因素认证,并严格管控密钥生命周期、关闭风险通道、闭环验证与日志监控。

Linux SSH服务的安全性提升,关键在于打破“单点验证”依赖,用多层级身份验证构建纵深防御。单纯禁用密码或只用密钥,仍可能被私钥泄露、中间人劫持或配置疏漏绕过。真正有效的加固,是让攻击者必须同时突破至少两个独立维度的验证关卡——比如“你拥有什么(私钥)”+“你知道什么(动态口令)”,或“你拥有什么”+“你是什么(生物特征)”。这不再是可选项,而是生产环境的基本要求。
启用公钥 + TOTP 双因素验证
这是目前最实用、部署成本最低的多层级方案,兼顾安全性与运维友好性。核心逻辑是:SSH先校验公钥合法性,通过后再触发TOTP(基于时间的一次性密码)挑战。
- 在服务器上安装 libpam-google-authenticator(Ubuntu/Debian用
sudo apt install libpam-google-authenticator;RHEL/CentOS用sudo dnf install google-authenticator) - 为每个用户运行
google-authenticator命令,按提示生成密钥、扫描二维码、保存应急码,并选择“Time-based tokens”和“Update ~/.google_authenticator file” - 编辑
/etc/pam.d/sshd,在文件开头添加一行:auth [success=done default=ignore] pam_google_authenticator.so nullok - 修改
/etc/ssh/sshd_config,确保包含:PubkeyAuthentication yesAuthenticationMethods publickey,keyboard-interactive
(注意:不是publickey,password,否则会回退到密码) - 重启服务:
sudo systemctl restart sshd
严格管控密钥生命周期与权限
公钥本身不敏感,但私钥一旦泄露即等同于账户失守。多层级验证的前提,是密钥环节不出问题。
PyCharm 2026.2.0.1 Linux版提供 JetBrains 官方 2026.2.0.1 版本安装包,适合需要指定 PyCharm 版本进行 Python 项目开发、运行和调试的用户。
- 生成时强制使用强算法:
ssh-keygen -t ed25519 -a 100 -C "user@host"(ed25519比RSA更高效、更抗量子;-a 100增加密钥派生难度) - 私钥文件必须设为
600,~/.ssh目录为700;禁止将私钥存于共享目录或Git仓库 - 为私钥设置密码短语(passphrase),且该短语强度不低于12位,含大小写字母、数字、符号
- 定期轮换密钥:对长期使用的密钥,每6个月重新生成并更新服务器端
authorized_keys,旧密钥立即删除
关闭默认风险通道,收缩验证入口
多层级验证再严密,若底层通道未收敛,就形同虚设。必须从协议层切断非必要路径。
- 在
/etc/ssh/sshd_config中明确禁用:PasswordAuthentication no、PermitEmptyPasswords no、KerberosAuthentication no(除非真用Kerberos) - 限制可登录用户范围:
AllowUsers user1 user2或AllowGroups ssh-users,避免通配符 - 禁用 root 直接登录:
PermitRootLogin no;如需提权,统一走sudo并审计日志 - 将 SSH 端口从默认22改为非知名端口(如2222),虽非加密手段,但能大幅减少自动化扫描流量
验证流程与日志闭环监控
配置完成不等于生效。必须验证路径是否真实走通,并建立异常行为感知能力。
- 本地测试连接:
ssh -o PubkeyAuthentication=yes -o PreferredAuthentications=publickey,keyboard-interactive user@server,确认两次提示(先密钥,再输入6位TOTP码) - 检查
/var/log/auth.log(Debian系)或/var/log/secure(RHEL系),搜索关键词Accepted publickey和pam_google_authenticator,确认双因子日志完整记录 - 配置 fail2ban 规则,对连续失败的TOTP尝试(如5分钟内5次错误)自动封禁IP,规则匹配正则:
Failed password.*for.*from.*port.*ssh改为匹配Incorrect code.*for.*from - 将认证日志接入SIEM系统,设置告警:同一IP在1小时内触发3次以上TOTP失败,或出现非工作时间的首次成功登录










