ssh密钥认证需正确配置权限与SElinux上下文。1. 生成Ed25519密钥并部署公钥至服务器authorized_keys文件;2. 设置~/.ssh目录权限为700,authorized_keys文件权限为600;3. 主目录不可有组或其他写权限;4. SELinux启用时需确保.ssh目录及文件上下文为ssh_home_t,可用restorecon -R ~/.ssh修复;5. 确认sshd_config中PubkeyAuthentication yes且AuthorizedKeysFile .ssh/authorized_keys;6. 修改后重启sshd服务。权限错误或SELinux上下文不当是密钥失效主因。

在linux系统中,使用SSH密钥认证可以提升远程登录的安全性。相比密码登录,密钥对验证更难被暴力破解。但若配置不当,不仅无法增强安全,还可能引发连接失败。以下是关于SSH授权密钥的配置与关键权限设置的实用说明。
SSH密钥生成与部署
用户通常在本地生成密钥对,将公钥上传至服务器。使用ssh-keygen命令可创建RSA或Ed25519类型的密钥:
- ssh-keygen -t ed25519 -C “your_email@example.com”
- 私钥保存在本地(如~/.ssh/id_ed25519),公钥内容需追加到服务器上的~/.ssh/authorized_keys
- 可通过ssh-copy-id user@server_ip自动完成公钥部署
authorized_keys 文件权限要求
SSH服务对文件和目录的权限非常敏感。权限过宽会导致密钥认证被忽略,强制回退到密码登录甚至拒绝访问。
- 用户主目录(如/home/username)不应有组或其他用户的写权限,推荐权限为755
- ~/.ssh目录权限应设为700(仅所有者可读写执行)
- ~/.ssh/authorized_keys文件权限应为600(仅所有者可读写)
设置命令示例:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
SELinux与文件上下文(如启用)
在centos、RHEL等系统中,SELinux可能影响SSH密钥读取。即使权限正确,错误的文件上下文也会导致认证失败。
- 确认~/.ssh/authorized_keys具有正确的SELinux上下文:ssh_home_t
- 可用restorecon -R ~/.ssh恢复默认上下文
- 若问题持续,临时设置setenforce 0测试是否为SELinux引起
sshd_config 配置检查
确保SSH服务允许公钥认证。相关配置位于/etc/ssh/sshd_config:
- PubkeyAuthentication yes — 启用密钥认证
- AuthorizedKeysFile .ssh/authorized_keys — 指定公钥文件路径
- 修改后运行systemctl restart sshd重启服务
注意:不要随意开启StrictModes no,它会跳过权限检查,带来安全隐患。
基本上就这些。密钥能用但突然失效,多数是权限被改动;新配置不生效,优先查authorized_keys位置和权限。保持目录和文件权限严谨,是SSH密钥顺利工作的基础。


