要让ssh密钥真正成为不可绕过的登录凭证,必须同步收紧服务端策略、密钥本身、访问上下文和权限控制四层面:禁用密码及交互认证,强制仅用公钥;生成ed25519密钥并设passphrase;公钥添加来源与命令限制;结合allowusers、match user及防火墙实现ip与用户粒度锁定;严格校验~/.ssh目录700及私钥600权限,并推行90天密钥轮换与fail2ban防护。

要让 SSH 密钥真正成为不可绕过的登录凭证,不能只生成一对密钥就完事——必须从服务端策略、密钥本身、访问上下文和权限控制四个层面同步收紧,缺一不可。
服务端强制启用密钥认证并禁用所有密码入口
仅设置 PubkeyAuthentication yes 不足以形成强制链路。关键动作是关闭所有替代路径:
- PasswordAuthentication no:全局禁用密码登录(含普通用户和 root)
- PermitRootLogin prohibit-password:允许 root 用密钥登录,但禁止其使用密码
- KbdInteractiveAuthentication no:关闭键盘交互式认证(如 PAM 二次验证),除非你主动启用 MFA
- AuthenticationMethods publickey(OpenSSH 8.2+ 推荐):明确限定唯一认证方式,拒绝任何降级尝试
改完后务必先运行 sudo sshd -t 检查语法,再用新终端测试连接,确认成功后再 sudo systemctl reload sshd。
PyCharm 2026.2.0.1 Linux版提供 JetBrains 官方 2026.2.0.1 版本安装包,适合需要指定 PyCharm 版本进行 Python 项目开发、运行和调试的用户。
密钥生成与部署必须符合强安全基线
弱密钥或错误部署会让所有策略失效。实战中应统一执行:
- 生成时优先选 ed25519 算法:ssh-keygen -t ed25519 -C "deploy@prod"(比 RSA-2048 更快更安全)
- 私钥必须设 passphrase,严禁空口令;公钥上传后立即修正权限:chmod 700 ~/.ssh && chmod 600 ~/.ssh/id_ed25519
- 服务端 ~/.ssh/authorized_keys 中每行公钥建议加限制标记,例如:
command="/usr/local/bin/deploy.sh",no-port-forwarding,no-X11-forwarding,from="10.10.5.0/24" ssh-ed25519 AAAAC3N...
访问控制层补位:IP 白名单 + 用户粒度锁定
合法密钥 ≠ 允许任意网络来源登录。需在 SSH 配置中叠加上下文约束:
- 用 AllowUsers 限定主体与来源:AllowUsers deploy@10.10.5.* admin@192.168.100.10
- 对高权限账户(如 deploy、backup)使用 Match User 做精细化管控:
Match User deploy
ForceCommand /bin/bash -c 'echo "Deploy user: only authorized commands"; exec "$@"'
AllowTcpForwarding no
X11Forwarding no - 配合系统防火墙(如 firewalld)做前置过滤,只放行可信网段的 22(或自定义端口)入向连接
权限与生命周期管控不可跳过
OpenSSH 会主动拒绝权限过宽的密钥文件,这是硬性校验,不是警告:
- ~/.ssh 目录必须为 700,否则新版 OpenSSH 可能拒绝读取密钥
- 所有私钥文件(id_rsa、id_ed25519 等)必须为 600,公钥(.pub)可设 644
- 实施密钥轮换机制:生产环境建议每 90 天更换一次密钥对,旧密钥从 authorized_keys 中清除
- 搭配 fail2ban 监控 auth.log,对异常连接频次自动封禁 IP










