问题

之前通过密钥能正常连接ssh的linux机器,现在无法连接

❯ ssh ws
root@ws: Permission denied (publickey).

初步排查

  1. ~/.ssh/authorized_keys中检查公钥,发现还在且无误

  2. /etc/ssh/sshd_config中检查ssh服务的配置,发现和常用的配置并无区别

  3. 检查~/.ssh/authorized_keys~/.ssh的权限,分别是600和700无误

  4. 检查了客户端~/.ssh/config配置,并无发现有什么特殊的错误配置,换另一台原来能正常连接的机器发现也报同样错误无法连接了。初步排除客户端问题

  5. verbose mode日志,能看到尝试了各种公钥,但是认证并未成功。但是从这里并不能直接看出原因

     ❯ ssh ws -v
     OpenSSH_9.4p1, LibreSSL 3.3.6
     ...
     debug1: Authentications that can continue: publickey
     debug1: Trying private key:
     ...
     root@ws: Permission denied (publickey).

发现问题

上述ssh常见的配置都检查确认无误后,只能更进一步看更详细的日志了

(base) ➜  / tail -f /var/log/auth.log
Feb  9 13:17:01 workstation CRON[1766]: pam_unix(cron:session): session closed for user root
Feb  9 13:36:20 workstation sshd[1771]: Authentication refused: bad ownership or modes for directory /root
Feb  9 13:36:20 workstation sshd[1771]: Authentication refused: bad ownership or modes for directory /root
Feb  9 13:36:22 workstation sshd[1771]: Connection closed by authenticating user root 10.10.10.1 port 54372 [preauth]
...

从这里可以看出根本原因是/root目录的权限出现问题了

drwxr-xr-x  20  501 staff 4.0K Feb  9 13:50 root

原因

恍然大悟,出问题之前曾尝试使用idea的deployment功能向这台服务器upload文件,第一次目录选错了,导致idea向/root直接传文件,它顺带就把/root的权限给改了。后来把deployment的目标目录更正成了/root下的某个子目录,但是权限问题就这么留下了。

修复

chown root:root /root

总结

除了注意~/.ssh~/.ssh/authorized_keys的权限和归属,~的权限归属同样重要!

文章目录