问题现象

ssh 使用密码远程的时候正常,ssh 秘钥登录提示未注册,centos7.5 的云服务器。

排查步骤

  1. 检查 /etc/ssh/sshd_config 和 /etc/ssh/ssh_config 的配置,与正常的云服务器做对比 egrep -v “#^$” /etc/ssh/sshd_config ,并没有发现异常

  2. 检查了.ssh 目录权限和 authorized_keys 文件权限,一般 .ssh 目录的权限为 700 或者 755 authorized_keys 的文件权限为 600 或者 644,没有发现异常

  3. 检查了防火墙以及 /etc/hosts.deny /etc/hosts.allow 有没有配置黑名单,并没有异常

  4. 清空 know_hosts 的内容,还是不行

  5. 开启了的 debug,有以下内容

    debug1: kex_input_ext_info: server-sig-algs=<rsa-sha2-256,rsa-sha2-512>
    debug3: receive packet: type 6
    debug2: service_accept: ssh-userauth
    debug1: SSH2_MSG_SERVICE_ACCEPT received
    debug3: send packet: type 50
    debug3: receive packet: type 51
    debug1: Authentications that can continue: publickey
    debug3: start over, passed a different list publickey
    debug3: preferred gssapi-keyex,gssapi-with-mic,publickey,keyboard-interactive,password
    debug3: authmethod_lookup publickey
    debug3: remaining preferred: keyboard-interactive,password
    debug3: authmethod_is_enabled publickey
    debug1: Next authentication method: publickey
    debug1: Trying private key: /root/kp-89l1y95c
  6. systemctl sshd status 的时候发现了一个报错

    Disconnected from 152.136.157.37 port 51400 [preauth]
  7. 然后查了一下 /var/log/secure 的日志,里面有个关键的报错

    Oct 10 23:50:18 i-jlabc309 sshd[2797]: Authentication refused: bad ownership or modes for directory /root

然后想到可能是 root 目录权限的问题,之前只检查了 .ssh 目录的权限,结果果然是 root 目录权限为 600,改成 700 以后就正常了

最终原因

sshd 为了安全,对属主的目录和文件权限有所要求。如果权限不对,则 ssh 的免密码登录不生效。 用户目录权限为 755 或者 700,就是不能是 77x。 .ssh 目录权限一般为 755 或者 700。 rsa_id.pub 及 authorized_keys 权限一般为 644 rsa_id 权限必须为 600

还需要检查一下属主信息,如果不对的话,需要做以下修改 chown root.root /root chown root.root -R /root/.ssh