Fedora Server 38 SSH密钥认证失败:ssh-add加载ECDSA密钥报错
SSH密钥认证排查思路(Fedora Server 38)
检查私钥及目录权限
私钥文件权限必须严格为600,.ssh目录权限为700,否则SSH会拒绝加载密钥。执行以下命令验证:ls -l ~/.ssh/id_ecdsa ~/.ssh确保文件所有者为当前登录用户,无其他用户读写权限。
验证私钥完整性与匹配性
- 从私钥导出公钥并与远程主机的
authorized_keys对比:
将输出内容与远程主机ssh-keygen -y -f ~/.ssh/id_ecdsa~/.ssh/authorized_keys中的对应条目完全比对,确保无换行、空格或字符缺失。 - 检查私钥文件是否损坏:
若命令报错,说明私钥文件已损坏,需重新生成。ssh-keygen -l -f ~/.ssh/id_ecdsa
- 从私钥导出公钥并与远程主机的
排查libcrypto兼容性问题
- 尝试用PEM格式重新生成密钥(适配OpenSSL 3.x可能的格式兼容问题):
重新用ssh-keygen -t ecdsa -b 384 -m PEMssh-copy-id推送公钥后测试。 - 确认OpenSSL与OpenSSH版本匹配:
避免手动更新过OpenSSL导致与系统默认OpenSSH不兼容。openssl version ssh -V
- 尝试用PEM格式重新生成密钥(适配OpenSSL 3.x可能的格式兼容问题):
排查PAM模块干扰
虽然已开启公钥认证,但UsePAM yes可能触发PAM模块拦截:- 临时修改
/etc/ssh/sshd_config,将UsePAM改为no,重启sshd:
测试登录,若成功则说明PAM配置存在限制。systemctl restart sshd - 检查PAM的SSH配置文件:
重点排查是否存在cat /etc/pam.d/sshdpam_securetty.so(限制root非终端登录)、pam_access.so(用户访问控制)等模块的规则。
- 临时修改
验证sshd_config关键参数
确保以下配置正确:PubkeyAuthentication yesAuthorizedKeysFile未被修改为非默认路径(默认是~/.ssh/authorized_keys)- 若使用root登录,
PermitRootLogin需设置为prohibit-password或yes - 无
AllowUsers/DenyUsers规则限制当前用户登录
跳过ssh-agent直接测试登录
绕开agent直接用私钥登录,定位问题是否在agent:ssh -v -i ~/.ssh/id_ecdsa user@remote-host查看详细输出中的错误节点,若登录成功则需排查ssh-agent的配置或运行状态。
修复SELinux上下文
Fedora默认开启SELinux,.ssh目录及文件的SELinux上下文异常会导致认证失败:- 检查上下文:
正常应为ls -Z ~/.ssh/authorized_keyssystem_u:object_r:ssh_home_t:s0 - 修复上下文:
restorecon -Rv ~/.ssh
- 检查上下文:
内容的提问来源于stack exchange,提问作者el_maximo
相关产品推荐
相关产品推荐

