PadKiller 2026-01-12 15:58 采纳率: 39.3%
浏览 3

root可以ssh免密码登陆,但是普通用户居然不成功

我把root可以ssh免密码登陆了,但是普通用户居然不成功,怎么都要密码登陆。既然root可以,说明我的方法对的,目录权限也是对的。出什么问题了呢?

  • 写回答

2条回答 默认 最新

  • 檀越@新空间 2026-01-12 15:59
    关注

    下午好🌅🌅🌅
    本答案参考通义千问

    你提到 root 用户可以通过 SSH 免密码登录,但 普通用户却仍然需要密码登录。这说明你的配置可能没有正确应用到普通用户,或者存在一些权限或配置问题。


    ✅ 问题分析

    1. SSH 配置文件(sshd_config)

    SSH 的配置文件 /etc/ssh/sshd_config 控制了哪些用户可以免密码登录。如果你只配置了 PermitRootLoginyeswithout-password,但没有对普通用户进行相应的配置,那么普通用户仍需密码。

    2. 公钥认证配置

    你可能已经将公钥添加到了普通用户的 ~/.ssh/authorized_keys 文件中,但可能由于以下原因导致不生效:

    • 权限设置错误(如 .ssh 目录或 authorized_keys 文件权限不对)
    • 没有正确设置 PubkeyAuthentication yes
    • 没有启用 PasswordAuthentication no(虽然不是必须的,但可能影响行为)

    3. 用户权限和目录结构

    普通用户的 .ssh 目录或 authorized_keys 文件可能没有正确的权限设置,导致 SSH 无法读取。


    ✅ 解决方案

    一、检查并修改 SSH 配置文件

    1. 打开 SSH 配置文件:

      sudo nano /etc/ssh/sshd_config
      
    2. 确保以下配置项正确:

      PermitRootLogin yes      # 如果你允许 root 登录
      PubkeyAuthentication yes
      PasswordAuthentication no  # 可选,关闭密码登录
      
    3. 保存并退出编辑器。

    4. 重启 SSH 服务使配置生效:

      sudo systemctl restart sshd
      

    二、确保普通用户的 .ssh 目录和 authorized_keys 文件权限正确

    1. 检查普通用户的 .ssh 目录权限:

      ls -ld /home/youruser/.ssh
      

      应该显示:

      drwx------ 2 youruser youruser ...
      
    2. 检查 authorized_keys 文件权限:

      ls -l /home/youruser/.ssh/authorized_keys
      

      应该显示:

      -rw------- 1 youruser youruser ...
      
    3. 如果权限不对,修改权限:

      chmod 700 /home/youruser/.ssh
      chmod 600 /home/youruser/.ssh/authorized_keys
      

    三、确认公钥已正确添加到 authorized_keys

    1. 检查 authorized_keys 文件内容:

      cat /home/youruser/.ssh/authorized_keys
      
    2. 确保公钥格式正确,每行一个公钥,并且没有多余空格或换行符。


    四、检查 SELinux 或 AppArmor 是否限制了访问

    如果你的系统启用了 SELinux 或 AppArmor,它们可能会阻止 SSH 访问某些文件。

    1. 检查 SELinux 状态:

      sudo sestatus
      
    2. 如果 SELinux 是 enforcing 模式,尝试临时切换为 permissive 模式测试:

      sudo setenforce 0
      
    3. 如果问题解决,说明 SELinux 阻止了访问,你需要调整策略或禁用它(不推荐生产环境)。


    五、使用 ssh -v 查看详细日志

    你可以通过增加 -v 参数查看 SSH 连接时的详细日志,帮助定位问题:

    ssh -v youruser@yourserver
    

    在输出中查找类似以下信息:

    • debug1: Trying private key: /home/youruser/.ssh/id_rsa
    • debug1: Authentication succeeded (publickey)

    如果看不到这些信息,说明公钥认证未被正确识别。


    ✅ 总结

    | 问题 | 解决方案 | |------|----------| | SSH 配置未对普通用户生效 | 修改 /etc/ssh/sshd_config,确保 PubkeyAuthentication yes | | 权限设置错误 | 修正 .sshauthorized_keys 的权限 | | 公钥未正确添加 | 检查并确保公钥正确写入 authorized_keys | | SELinux/AppArmor 限制 | 暂时关闭或调整策略 | | 日志排查 | 使用 ssh -v 查看连接过程 |


    ✅ 示例:修改后的 /etc/ssh/sshd_config 片段

    # Allow public key authentication
    PubkeyAuthentication yes
    
    # Disable password login (optional)
    PasswordAuthentication no
    
    # Permit root login with key (if needed)
    PermitRootLogin yes
    
    # Other settings...
    

    如果你能提供具体的错误信息或日志内容,我可以进一步帮你诊断问题。

    评论

报告相同问题?

问题事件

  • 创建了问题 1月12日