linux强制开启ssh公钥认证需遵循“先通后锁”原则:先确保公钥登录成功,再禁用密码认证;生成ed25519密钥对,用ssh-copy-id或手动部署并严格设权限(~/.ssh 700、authorized_keys 600),修改sshd_config启用pubkeyauthentication、禁用passwordauthentication、限制permitrootlogin,语法检查后安全重启。

Linux 系统中强制开启 SSH 公钥认证,核心是“先通后锁”:必须确保公钥能成功登录,再禁用密码登录,否则会彻底失去远程访问能力。
生成并部署安全密钥对
在本地客户端(如你的笔记本)执行:
- 优先使用现代算法:ssh-keygen -t ed25519 -C "your@email.com"(比 RSA 更快更安全)
- 若需兼容老旧系统,可用:ssh-keygen -t rsa -b 4096
- 用 ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server_ip 一键上传——它自动创建
~/.ssh目录、写入authorized_keys,并设好权限(700 和 600),避免手动遗漏 - 若
ssh-copy-id不可用(如精简系统),改用命令行手动部署,并严格校验权限:cat ~/.ssh/id_ed25519.pub | ssh user@server_ip "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
精简修改服务端配置
编辑 /etc/ssh/sshd_config,只明确设置以下三行(不取消其他注释,不盲目启用一堆选项):
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
- PubkeyAuthentication yes(显式启用,不依赖默认值)
- PasswordAuthentication no(此项务必等公钥验证成功后再开启)
-
PermitRootLogin prohibit-password(允许 root 用密钥登录,但禁止密码登录;如无需 root 登录,可设为
no)
改完立即运行 sudo sshd -t 检查语法。无输出表示合法;有报错必须修正,否则重启会失败。
权限与上下文必须严格合规
OpenSSH 对权限极其敏感,任意一级出错都会返回 Permission denied (publickey):
- 用户家目录(
~)不能是 777,不能带 sticky bit(如 1755) -
~/.ssh必须是 700:chmod 700 ~/.ssh -
~/.ssh/authorized_keys必须是 600:chmod 600 ~/.ssh/authorized_keys - 若为 CentOS/RHEL 且启用了 SELinux,还需修复安全上下文:
restorecon -Rv ~/.ssh
安全重启与回滚保障
重启前务必保留一个已登录的终端会话(这是唯一能救你的保险绳):
- 新开一个终端,用新密钥测试登录:
ssh -i ~/.ssh/id_ed25519 user@server_ip - 再开一个窗口,确认密码登录已被拒绝:
ssh user@server_ip应直接报错,不提示输入密码 - 全部验证无误后,在原终端执行:
sudo systemctl restart sshd - 若新连接失败,立刻用保留的会话将
PasswordAuthentication改回yes并重启服务,再排查问题










