ssh 公钥连接服务器失败,排查方向

当使用 SSH 公钥进行身份验证时遇到问题,可以通过查看 SSH 服务的日志来诊断问题。日志文件的位置和名称可能因操作系统和配置而异,但通常可以在以下位置找到:

在 Linux 系统上

  1. 系统日志文件

    • /var/log/auth.log(Debian/Ubuntu 系统)
    • /var/log/secure(Red Hat/CentOS 系统)
    • /var/log/audit/audit.log(使用 auditd 的系统)
  2. SSH 服务日志文件

    • /var/log/sshd.log(某些系统可能会有这个文件)

在 macOS 上

  • /var/log/system.log

在 FreeBSD 上

  • /var/log/auth.log

查看日志文件

你可以使用 tailless 命令来查看日志文件。例如:

sh 复制代码
tail -f /var/log/auth.log

或者:

sh 复制代码
less /var/log/auth.log

增加日志详细程度

如果日志信息不够详细,可以增加 SSH 服务的日志级别。编辑 SSH 服务的配置文件 /etc/ssh/sshd_config,找到或添加以下行:

sh 复制代码
LogLevel VERBOSE

然后重启 SSH 服务以应用更改:

sh 复制代码
sudo systemctl restart sshd

或者:

sh 复制代码
sudo service ssh restart

常见问题排查

  1. 公钥文件权限

    • 确保 ~/.ssh 目录的权限为 700

      sh 复制代码
      chmod 700 ~/.ssh
    • 确保 ~/.ssh/authorized_keys 文件的权限为 600

      sh 复制代码
      chmod 600 ~/.ssh/authorized_keys
  2. 公钥格式

    • 确保公钥文件格式正确,没有多余的空格或换行符。
  3. SSH 配置

    • 确保 sshd_config 文件中启用了公钥认证:

      sh 复制代码
      PubkeyAuthentication yes
      AuthorizedKeysFile .ssh/authorized_keys
  4. 防火墙和 SELinux

    • 确保防火墙允许 SSH 连接。
    • 如果使用 SELinux,确保 SELinux 没有阻止 SSH 访问。

通过查看日志文件和检查上述配置,通常可以找到并解决 SSH 公钥认证不生效的问题。

从日志信息来看,SSH 认证被拒绝的原因是 /home/naura 目录的权限或所有权不正确。具体错误信息如下:

复制代码
Aug  5 09:49:56 naura sshd[23677]: Authentication refused: bad ownership or modes for directory /home/naura

为了修复这个问题,你需要确保 /home/naura 目录及其子目录和文件的权限和所有权是正确的。以下是具体的步骤:

1. 检查和修复目录所有权

确保 /home/naura 目录及其子目录和文件的所有权是 naura 用户和 naura 组(或 users 组,具体取决于你的系统配置)。

sh 复制代码
sudo chown -R naura:naura /home/naura

2. 检查和修复目录权限

确保 /home/naura 目录及其子目录和文件的权限是正确的。

  • /home/naura 目录的权限应为 700

    sh 复制代码
    chmod 700 /home/naura
  • ~/.ssh 目录的权限应为 700

    sh 复制代码
    chmod 700 /home/naura/.ssh
  • ~/.ssh/authorized_keys 文件的权限应为 600

    sh 复制代码
    chmod 600 /home/naura/.ssh/authorized_keys

3. 验证公钥文件内容

确保 ~/.ssh/authorized_keys 文件中的公钥格式正确,没有多余的空格或换行符。

4. 重新尝试 SSH 连接

完成上述步骤后,重新尝试使用公钥进行 SSH 连接:

sh 复制代码
ssh naura@naura

5. 检查日志

如果问题仍然存在,再次查看 SSH 日志文件以获取更多详细信息:

sh 复制代码
tail -f /var/log/auth.log

6. 其他可能的问题

  • SELinux:如果你的系统启用了 SELinux,确保 SELinux 没有阻止 SSH 访问。可以临时禁用 SELinux 进行测试:

    sh 复制代码
    sudo setenforce 0
  • 防火墙:确保防火墙允许 SSH 连接。

通过以上步骤,你应该能够解决 SSH 公钥认证被拒绝的问题。如果问题仍然存在,请提供更多的日志信息以便进一步诊断。

相关推荐
getapi4 分钟前
Ubuntu 22.04 服务器的系统架构是否为 amd64 x86_64
linux·服务器·ubuntu
消失的旧时光-194320 分钟前
Linux 入门核心命令清单(工程版)
linux·运维·服务器
艾莉丝努力练剑28 分钟前
【Linux:文件】Ext系列文件系统(初阶)
大数据·linux·运维·服务器·c++·人工智能·算法
小天源31 分钟前
Cacti在Debian/Ubuntu中安装及其使用
运维·ubuntu·debian·cacti
Trouvaille ~1 小时前
【Linux】TCP Socket编程实战(一):API详解与单连接Echo Server
linux·运维·服务器·网络·c++·tcp/ip·socket
芷栀夏1 小时前
深度解析 CANN 异构计算架构:基于 ACL API 的算子调用实战
运维·人工智能·开源·cann
全栈工程师修炼指南1 小时前
Nginx | stream 四层反向代理:SSL、PREREAD 阶段模块指令浅析与实践
运维·网络·网络协议·nginx·ssl
威迪斯特2 小时前
CentOS图形化操作界面:理论解析与实践指南
linux·运维·centos·组件·图形化·桌面·xserver
一方热衷.2 小时前
在线安装对应版本NVIDIA驱动
linux·运维·服务器
独自归家的兔2 小时前
ubuntu系统安装dbswitch教程 - 备份本地数据到远程服务器
linux·运维·ubuntu