SSH私钥必须设强口令并严格控制权限:私钥文件600、.ssh目录700、主目录不可写;推荐ed25519算法,禁用空口令与明文传输,服务端authorized_keys须为600且sshd_config启用PubkeyAuthentication。

SSH私钥本身不依赖磁盘加密,但必须用口令(passphrase)加密内容,并配合严格权限控制——这是Linux下最可靠、最轻量的本地防护方式。空口令、错误权限或随意传输,都会让密钥形同裸奔。
生成时务必设强口令
创建密钥不能跳过口令环节。推荐使用Ed25519算法,它更安全也更快:
- 运行命令:ssh-keygen -t ed25519 -a 100 -C "your_email@example.com"
- 遇到Enter passphrase提示时,输入8位以上组合:大小写字母+数字+符号
- 口令不回显,需输两次确认;留空即等于把私钥明文存硬盘
权限控制是硬性前提
口令再强,若文件能被他人读取,就完全失效。OpenSSH强制校验权限,宽松设置会直接拒绝加载:
- 私钥文件(如~/.ssh/id_ed25519)必须为600:chmod 600 ~/.ssh/id_ed25519
- ~/.ssh目录必须为700:chmod 700 ~/.ssh
- 主目录(如/home/user)不能有组/其他写权限(即不能是775、777等)
- 公钥文件(id_ed25519.pub)可设644,无需保密
服务端 authorized_keys 权限同样关键
服务器端配置出错是密钥登录失败的最常见原因,权限错误会导致SSH直接忽略该密钥:
- ~/.ssh/authorized_keys 必须设为600
- 确保sshd_config中启用:PubkeyAuthentication yes,且路径未被覆盖:AuthorizedKeysFile .ssh/authorized_keys
- 修改后执行:sshd -t 验证语法,再重启服务:systemctl restart sshd
- SELinux启用时(如RHEL/CentOS),还需恢复上下文:restorecon -R ~/.ssh
避免明文外泄与过度工具化
私钥不是密码,不该用常规方式管理:
- 绝不通过scp、rsync、剪贴板或Git上传私钥
- 多设备使用?用ssh-agent缓存解密句柄:ssh-add ~/.ssh/id_ed25519(输一次口令,本次会话复用)
- 不建议引入GNOME Keyring、KeePassXC等第三方工具——它们可能在后台明文缓存、日志泄漏,且CLI环境常不可用


















