影评周公子 2025-07-26 18:30 采纳率: 98.8%
浏览 107
已采纳

如何解决SSH远程登录时出现的“Permission denied”错误?

在进行SSH远程登录时,经常可能会遇到“Permission denied”错误。该问题通常由以下几个原因造成:用户名或密码错误、SSH服务未正确运行、防火墙限制、密钥权限配置不当,或目标主机的sshd_config配置禁止登录。解决方法包括:确认用户名与密码(或密钥)是否正确;检查远程主机的SSH服务状态;确认端口是否开放及防火墙规则;检查本地密钥权限是否过于开放(如私钥权限应为600);查看远程主机的/etc/ssh/sshd_config中是否设置了PermitRootLogin或AllowUsers限制。通过逐步排查上述常见问题,可有效解决SSH登录时的权限拒绝问题。
  • 写回答

1条回答 默认 最新

  • 杜肉 2025-07-26 18:30
    关注

    SSH远程登录“Permission denied”问题深度解析与排查指南

    在日常运维和开发过程中,SSH(Secure Shell)远程登录是连接服务器的重要方式。然而,用户在使用过程中常常会遇到“Permission denied”错误。本文将从浅入深、由表及里地分析该问题的常见原因、排查流程与解决方法,帮助具有5年以上经验的IT从业者系统性地掌握SSH登录问题的诊断与修复。

    1. 初步排查:基础信息验证

    遇到“Permission denied”错误时,首先应确认基础信息是否正确:

    • 用户名是否正确:确认远程主机上存在该用户,尤其是root用户是否被允许登录。
    • 密码或密钥是否正确:在使用密码登录时,注意大小写及特殊字符;使用密钥时,确认私钥路径是否正确加载。
    • SSH命令格式是否正确:例如:ssh user@hostname -p port

    2. 服务状态检查:确保SSH服务运行正常

    SSH服务未运行或异常可能导致连接失败。可通过以下方式检查服务状态:

    systemctl status sshd

    如服务未运行,可尝试重启:

    systemctl restart sshd

    对于不同Linux发行版,服务名称可能为sshd(如CentOS)或ssh(如Ubuntu)。

    3. 网络与防火墙配置排查

    SSH连接失败也可能由网络或防火墙策略引起。以下是排查步骤:

    检查项排查命令或方法
    端口是否开放nc -zv host portnmap host -p port
    本地防火墙限制iptables -L -nfirewall-cmd --list-all
    远程主机防火墙登录服务器后执行相同命令检查

    4. 密钥权限配置检查

    密钥权限设置不当是常见的“Permission denied (publickey)”错误原因。以下是推荐的权限设置:

    • 私钥文件权限应为 600chmod 600 ~/.ssh/id_rsa
    • ~/.ssh目录权限应为 700chmod 700 ~/.ssh
    • 远程主机上的~/.ssh/authorized_keys文件权限应为 600

    5. SSHD配置文件分析

    目标主机的/etc/ssh/sshd_config文件中可能存在限制登录的配置项,需重点检查:

    PermitRootLogin no
    PasswordAuthentication no
    AllowUsers user1 user2

    修改配置后需重启SSH服务生效:

    systemctl restart sshd

    6. 日志分析辅助排查

    SSH服务日志通常记录在/var/log/secure(CentOS)或/var/log/auth.log(Ubuntu),可从中获取详细的登录失败原因。

    tail -f /var/log/secure

    日志中可能出现的关键信息包括:

    • User root from 192.168.1.1 not allowed because not listed in AllowUsers
    • Authentication refused: bad ownership or modes for directory /home/user/.ssh

    7. 可视化流程图辅助诊断

    为了更直观地理解SSH登录失败的排查流程,以下是一个Mermaid流程图示例:

    graph TD A[开始SSH连接] --> B{连接超时或拒绝?} B -- 是 --> C[检查网络和端口] B -- 否 --> D{提示Permission denied?} D -- 是 --> E[检查用户名/密码或密钥] D -- 否 --> F[其他错误] E --> G[检查密钥权限] G --> H[检查sshd_config配置] H --> I[查看系统日志] C --> J[检查防火墙规则]
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 10月23日
  • 创建了问题 7月26日