前因
在昨天白天突发奇想准备对我的个人博客做一波技术调整,经过了深刻的调研,我终于登录了由于期末和实验室繁忙而许久未登的服务器。
哐当,一个密码请求出现在我面前。
我之前应该是配置过 SSH 密钥免密登录的,但是由于这期间我重装了本地电脑系统,因此以为是我的本地问题,也就没再细究。
尝试
在完成了博客技术调整之后,需要一个自动部署脚本,而密码的存在是大大不利于自动化的,因此我便又看回了这个问题。
最开始我以为是本地莫名的原因优先尝试了密码登录而无视 SSH 密钥,就先登录了服务器禁用了密码登录。再次尝试登录后喜提权限拒绝
|
|
可以看到确实是 SSH 密钥出现了问题。
便将目光看向了前面提过的因为重装系统而怀疑的本地环境,检查并确保了 SSH 相关文件的权限正确。
|
|
再次尝试,问题依旧。
接着我又检查了 config
文件,也并未发现什么异常,通过 ssh -i
手动指定 SSH 密钥文件,避免受多密钥环境影响,也并未解决。
到此,对于本地可能存在的问题基本毫无头续了,我便将目光转向了服务器。
顺带在腾讯云后台检查了一遍 SSH 密钥的公钥内容,完全一致,也尝试了重新绑定一遍 SSH 密钥,并没能解决问题。
进入了腾讯云后台的 一键登录
,登录上 lighthouse
账号后再 su ubuntu
到主账号进行接下来的排查。
首先检查了服务器的 SSH 文件情况,并用同样的方法修改了一遍 SSH 相关文件权限,但依旧无法登录。
到此,基本上我过往问题的解决经验,以及互联网上搜索到常见的解决方案基本已经尝试过了,中途我也尝试过 ssh-add
一类的解决方案,但都无能为力。
解决
没办法,经验不管用,只能老老实实从日志看起了。
首先在本地连接时使用 ssh -vvv
输出完整调试信息,这里截取最后一部分。
|
|
可以看到,在我们发送完公钥等待校验之后,SSH 请求便被拒绝了,整体流程在本地是没有什么问题的,因此可以排除本地的问题。
再来到服务器上,在本地发起 SSH 请求被拒绝后,使用 journalctl -r
查阅 sshd
的输出日志,看看服务端到底因何拒绝的连接。
|
|
在日志中,我们注意到了这么一句
|
|
sshd
在抱怨 /home/ubuntu
目录的所有者/权限异常!
我顿感大事不妙,去检查了一下权限
好家伙呀 /home/ubuntu
果然喜提 0777
,这是 ssh 完全无法接受的绝对开放权限。
赶紧把 /home/ubuntu
的权限降为 0755
。
再次尝试,连接成功!
反思
后面想了想,应该是之前某次为了省事,无知的我直接暴力地把家目录 chmod -R 0777
了,一直没出问题现在才发现也是够幸运的……
我这么蠢的做法也确实是很难找到第二个了。
- Linux 完善严格的权限系统
- 日志很重要
- 权限杜绝 0777
...