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 公钥认证被拒绝的问题。如果问题仍然存在,请提供更多的日志信息以便进一步诊断。

相关推荐
梦奇不是胖猫1 分钟前
[ 计算机网络 | 第四章 ] 网络层 02 网际协议IP
运维·服务器·网络·网络协议·tcp/ip·计算机网络
Wonderful U1 分钟前
基于Python+Django+psutil的轻量化服务器自动化监控平台实战
服务器·python·django
蜀道山老天师2 分钟前
Docker安装配置全教程(含银河麒麟服务器部署+镜像加速)
运维·docker·容器
愿天垂怜2 分钟前
【C++脚手架】etcd 的介绍与使用
java·linux·服务器·c语言·c++·中间件·etcd
春生野草7 分钟前
Socket、Servlet、Tomcat
运维·服务器·网络
kvnew7 分钟前
Ubuntu 26.04 一键安装/修复拼音输入法fcitx5+Rime
linux·运维·ubuntu
Komorebi_99998 分钟前
Day3:监控、日志、限流、成本管控、版本灰度
大数据·运维·人工智能·大模型
ITyunwei09878 分钟前
运维团队如何抓住AI?
大数据·运维·人工智能
小则又沐风a8 分钟前
进程篇: 进程概念的补充(了解环境变量和虚拟地址空间)
linux·运维·服务器·c++
艾莉丝努力练剑9 分钟前
【Linux网络】Linux 网络编程:传输层协议TCP(五)
linux·运维·网络·计算机网络·udp