必须先验证密钥登录成功再禁用密码登录,否则将被锁在服务器外;生成ed25519密钥对、严格设置私钥600权限、用ssh-copy-id部署公钥并确保authorized_keys权限为600、显式启用PubkeyAuthentication yes且仅在验证通过后设PasswordAuthentication no。

禁用 SSH 密码登录、强制使用密钥认证,是服务器上线前必须完成的安全动作。它不是“锦上添花”,而是直接切断暴力破解和弱口令攻击的入口。操作本身不复杂,但顺序错一步,就可能被锁在门外。
生成现代密钥对(优先选 ed25519)
别再默认用 RSA。ed25519 算法更安全、更快、密钥更短,OpenSSH 6.5+ 全面支持:
- 运行
ssh-keygen -t ed25519 -C "admin@prod",回车用默认路径~/.ssh/id_ed25519 - 务必设置 passphrase——这是私钥文件泄露后的最后一道防线
- 生成后立即执行
chmod 600 ~/.ssh/id_ed25519,确保私钥权限严格
安全部署公钥到服务器
公钥不是复制粘贴就能用,权限和路径必须精准:
- 首选
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server_ip,它自动建目录、写文件、设权限 - 若不可用,手动分两步执行:
ssh user@server_ip "mkdir -p ~/.ssh && chmod 700 ~/.ssh"cat ~/.ssh/id_ed25519.pub | ssh user@server_ip "cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys" - 确认服务器上
~/.ssh权限为700,authorized_keys为600;家目录不能是777或带 sticky bit
服务端配置必须显式生效
别只改 PasswordAuthentication no,OpenSSH 可能通过其它通道绕过。以下四行需同时存在且明确:
-
PubkeyAuthentication yes—— 显式开启,旧系统默认可能关闭 -
PasswordAuthentication no—— 核心开关,关掉所有密码入口 -
ChallengeResponseAuthentication no—— 关闭键盘交互认证,防 fallback -
UsePAM no—— 若未专门配 PAM 密码策略,开它反而可能复活密码登录
改完立刻运行 sudo sshd -t 校验语法;无任何输出才表示合法。有报错先修配置,别重启。
验证成功后再封密码口
这是最容易把自己锁死的环节,务必按节奏操作:
- 保持当前终端不关闭,新开一个窗口测试:
ssh user@server_ip—— 应秒进、全程无提示 - 强制跳过密钥测试:
ssh -o PubkeyAuthentication=no user@server_ip—— 应立刻报错No supported authentication methods available - 确认无误后,再修改配置并重启:
sudo systemctl reload sshd(reload 比 restart 更稳妥)
整个过程的关键在于:密钥先跑通,再动配置;留一条活路,再关大门。

















