啊宇哥哥 2025-04-28 14:40 采纳率: 98.5%
浏览 28
已采纳

SSH远程主机连接时提示“Permission denied (publickey)”怎么办?

当通过SSH远程连接主机时,如果遇到“Permission denied (publickey)”错误,通常表明公钥认证失败。以下是常见原因及解决方法:1) 检查~/.ssh/id_rsa.pub是否已正确添加到目标主机的~/.ssh/authorized_keys文件中;2) 确认本地私钥文件权限为600,且~/.ssh目录权限为700;3) 验证目标主机的SSH配置文件(/etc/ssh/sshd_config)中是否启用了PubkeyAuthentication和AuthorizedKeysFile选项;4) 如果使用了非默认私钥文件,需在ssh命令中指定,如`ssh -i /path/to/private_key user@host`;5) 排查SELinux或文件系统加密是否影响了密钥读取。逐一排查以上问题,即可有效解决该错误。此外,建议检查SSH服务端日志(如/var/log/auth.log或journalctl -u sshd.service),以获取更多调试信息。
  • 写回答

1条回答 默认 最新

  • ScandalRafflesia 2025-04-28 14:40
    关注

    1. 基础概念与问题描述

    当通过SSH远程连接主机时,如果遇到“Permission denied (publickey)”错误,通常表明公钥认证失败。这一问题可能是由多种原因引起的,包括权限设置、配置文件错误或加密机制限制等。

    • SSH(Secure Shell)是一种网络协议,用于安全地远程登录到其他计算机。
    • 公钥认证是SSH中一种常用的身份验证方法。
    • 错误“Permission denied (publickey)”意味着服务器拒绝了客户端的公钥认证请求。

    以下是常见原因及解决方法:

    2. 逐步排查问题

    1. 检查密钥是否正确添加:确保本地生成的公钥文件~/.ssh/id_rsa.pub已正确添加到目标主机的~/.ssh/authorized_keys文件中。
    2. 验证权限设置:确认本地私钥文件权限为600,且~/.ssh目录权限为700。例如,运行以下命令:
    
    chmod 600 ~/.ssh/id_rsa
    chmod 700 ~/.ssh
        
    1. 检查SSH配置文件:验证目标主机的SSH配置文件(/etc/ssh/sshd_config)中是否启用了PubkeyAuthentication和AuthorizedKeysFile选项。如果未启用,请修改并重启SSH服务:
    
    sudo systemctl restart sshd
        
    1. 指定非默认私钥文件:如果使用了非默认私钥文件,需在ssh命令中指定,如`ssh -i /path/to/private_key user@host`。
    2. 排查SELinux或文件系统加密:检查SELinux策略或文件系统加密是否影响了密钥读取。

    3. 深入分析与调试

    为了更深入地了解问题所在,可以检查SSH服务端日志以获取更多信息。以下是两种常见的日志查看方式:

    操作系统日志路径命令示例
    Ubuntu/Debian/var/log/auth.logtail -f /var/log/auth.log
    CentOS/RHELjournalctljournalctl -u sshd.service

    通过查看日志,可以定位具体错误原因,例如权限不足、密钥格式不匹配或配置冲突等问题。

    4. 解决方案流程图

    graph TD; A[开始] --> B{密钥是否正确?}; B --否--> C[检查authorized_keys]; B --是--> D{权限是否正确?}; D --否--> E[修正权限]; D --是--> F{配置是否正确?}; F --否--> G[修改sshd_config]; F --是--> H{私钥是否默认?}; H --否--> I[指定私钥路径]; H --是--> J{加密是否影响?}; J --是--> K[调整SELinux]; J --否--> L[完成];
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 10月23日
  • 创建了问题 4月28日