普通网友 2025-05-25 05:10 采纳率: 98.1%
浏览 1
已采纳

SSH登录时提示“Permission denied (publickey)”怎么办?

当通过SSH登录服务器时,如果遇到“Permission denied (publickey)”错误,通常是因为公钥认证失败。以下是常见原因及解决方法:1) 检查~/.ssh/authorized_keys文件中是否正确添加了公钥;2) 确保本地私钥文件路径正确且权限设置为400或600;3) 验证SSH配置文件(/etc/ssh/sshd_config)中PubkeyAuthentication设为yes;4) 确认服务器上的用户家目录、.ssh目录及authorized_keys文件的权限正确(分别为700、700、600)。此外,检查是否使用正确的用户名和私钥登录,避免混淆。若问题仍未解决,可通过增加-v参数(如ssh -v user@server)查看详细日志,定位具体原因。
  • 写回答

1条回答 默认 最新

  • 扶余城里小老二 2025-05-25 05:10
    关注

    1. 问题概述

    当通过SSH登录服务器时,如果遇到“Permission denied (publickey)”错误,通常是因为公钥认证失败。以下是逐步分析该问题的常见原因及解决方法。

    1.1 常见技术问题

    • 公钥未正确添加到~/.ssh/authorized_keys文件中。
    • 本地私钥文件路径不正确或权限设置不符合要求。
    • SSH配置文件/etc/ssh/sshd_config中未启用公钥认证。
    • 服务器上的用户家目录、.ssh目录及authorized_keys文件权限设置不当。

    2. 分析过程

    以下是从浅入深的分析步骤:

    2.1 检查公钥是否正确添加

    确保远程服务器上的~/.ssh/authorized_keys文件包含正确的公钥内容。可以通过以下命令验证:

    cat ~/.ssh/authorized_keys

    如果公钥缺失,请将本地生成的公钥(如id_rsa.pub)复制到该文件中。

    2.2 验证私钥文件权限

    本地私钥文件(如id_rsa)必须具有适当的权限设置。使用以下命令检查并修正权限:

    chmod 400 ~/.ssh/id_rsa

    确保私钥文件路径正确且没有被意外修改。

    3. 解决方案

    以下是针对上述问题的具体解决方案:

    3.1 修改SSH配置文件

    编辑/etc/ssh/sshd_config文件,确保以下参数已正确配置:

    PubkeyAuthentication yes
    AuthorizedKeysFile .ssh/authorized_keys

    保存文件后,重启SSH服务以应用更改:

    sudo systemctl restart sshd

    3.2 调整目录和文件权限

    确保服务器上的相关目录和文件权限正确。运行以下命令进行设置:

    chmod 700 ~
    chmod 700 ~/.ssh
    chmod 600 ~/.ssh/authorized_keys

    4. 进阶排查

    若以上步骤未能解决问题,可以使用调试模式获取更多详细信息:

    4.1 使用-v参数查看日志

    通过增加-v参数运行SSH命令,定位具体原因:

    ssh -v user@server

    根据输出的日志信息,进一步分析问题所在。

    4.2 流程图展示排查步骤

    以下是排查问题的流程图:

    graph TD; A[开始] --> B{公钥是否正确?}; B --否--> C[检查authorized_keys]; B --是--> D{私钥权限是否正确?}; D --否--> E[调整私钥权限]; D --是--> F{SSH配置是否正确?}; F --否--> G[修改sshd_config]; F --是--> H{权限设置是否正确?}; H --否--> I[调整目录和文件权限]; H --是--> J{仍无法解决?}; J --是--> K[使用-v参数调试];
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 10月23日
  • 创建了问题 5月25日