核心三点:权限必须为700(.ssh目录)和600(authorized_keys文件),属主须为对应用户;内容须每行一条标准公钥、无注释无空格;更新须避免并发写,推荐printf安全追加并用ssh-keygen -l校验。

管好 authorized_keys 文件,核心就三点:权限不能错、内容不能乱、更新不能并发写。
权限必须严格设对
SSH 对权限极其敏感,稍有偏差就会拒绝认证,哪怕公钥完全正确。
-
~/.ssh目录权限必须是 700(仅属主可读写执行) -
authorized_keys文件权限必须是 600(仅属主可读写) - 文件和目录的属主必须是对应用户,比如
root用户的密钥就得归root所有,不能是root:wheel或其他组 - 执行命令快速修复:
chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys && chown $USER:$USER ~/.ssh ~/.ssh/authorized_keys
内容格式要干净精准
每行一条公钥,开头必须是 ssh-rsa、ssh-ed25519 等标准类型,末尾不能有多余空格或空行。
针对Linux系统,phpStudy团队推出全网首家linux docker容器面板,只要一个命令,快速安装面板,在面板里可以自行选择软件版本,可以方便的进行安全配置,就算没有Linux基础也可以快速搭建和管理PHP服务器环境!
- 禁止在公钥后加注释(如
# admin-laptop),OpenSSH 8.8+ 会跳过整行 - 禁用
echo "key" >> authorized_keys这类直接追加——并发时可能截断或错位 - 安全追加方式:
printf "%s\n" "ssh-ed25519 AAAA... user@host" >> ~/.ssh/authorized_keys,再立即校验权限 - 可用
ssh-keygen -l -f ~/.ssh/authorized_keys检查是否解析成功,失败说明格式或换行有问题
多人多密钥别堆一个文件
所有用户共用 /root/.ssh/authorized_keys 是典型隐患,既破坏隔离,又易覆盖误删。
- 每个用户应使用自己的
~/.ssh/authorized_keys,靠StrictModes yes(默认开启)自动校验属主与权限 - 若需集中管理(如运维批量部署),改用
AuthorizedKeysCommand动态提供密钥,但必须显式设置AuthorizedKeysCommandUser为普通用户,避免 root 权限下查不到用户数据 - 数据库存密钥时,务必记录
created_at和last_used时间戳,方便识别僵尸密钥 - 定期清理:用
awk '{print $2}' ~/.ssh/authorized_keys | ssh-keygen -lf /dev/stdin 2>/dev/null | awk '{print $2}' | sort -u查重并人工核对
改完配置得验证再重启
修改 sshd_config 后不能直接 reload 或 restart,漏掉语法检查容易锁死自己。
- 先运行
sshd -t,返回无输出才表示配置语法正确 - 确认
PubkeyAuthentication yes和AuthorizedKeysFile .ssh/authorized_keys已启用 - 密码登录建议设为
PasswordAuthentication no,但务必在新密钥验证成功后再执行systemctl restart sshd - 重启后立刻用另一终端测试登录,避免单点失效










