最近在设置ssh 的时候遇到了一个问题,就是我明明在远程主机上设置好了公钥,但是每次登录的时候还是需要我输入密码,于是开始尝试排查问题。
首先我想到了日志,如果是秘钥配对异常的话应该是会报日志错误的吧。于是我尝试使用系统日志检查sshd

journalctl --unit=sshd

使用快捷键G(vim 中直接定位到文件末尾的快捷键)定位到日志最后面,获取到了我最近一次登录的日志信息。经过仔细检查发现了一行报错日志:
在这里插入图片描述
这里的报错日志还是很能说明问题的:

Authentication refused: bad ownership or modes for file /home/admin/.ssh/authorized_

将这行报错日志复制到网上一搜,果然后大神早已经给出报错原因和解决方案。原来这里是我的文件权限设置异常,由于 authorized_keys这个文件我自己创建的,而 ssh 处于安全性考虑,对.ssh目录下的文件权限内容有着严格的权限要求,如下:
在这里插入图片描述
简单描述来说就是文件authorized_keys除了属主拥有读写(-rw)权限以外属组其他用户是没有任何权限的,我的问题就是出在了这里。

之前我的用户目录文件夹可能是由于做了什么配置使得属组拥有了读的权限,从而导致连带的.sshauthorized_keys文件在创建时继承了用户文件夹的权限,也都拥有了属组的读取权限。这对于 ssh 来说是不允许的,因此ssh在比对秘钥的时候无法打开authorized_keys从而导致秘钥配对失败。而ssh此时没有放弃连接,尝试询问用户密码。最终产生了用户配置了公钥却仍然需要输入密码的问题。

知道问题原因后处理起来也比较简单了,只需修改相对应的目录权限即可:

cd .ssh
chmod 700 ../
chmod 700 .
chmod 600 authorized_keys

参考资料

SSH无密钥配置和配置公钥
SSH Authentication Refused: Bad Ownership or Modes for Directory

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐