一次由tar解压引起的ssh登录失败事故

今天在服务器上解压缩一个文件(.tar.gz)的时候,忘记添加解压目的地路径参数(-C [dir path]),导致直接解压到了/root目录,然后简单地将相关文件从/root下面删除掉后就下线愉快地写代码去了。过了一段时间,当我再尝试登录服务器时(ssh密钥登录),被提示ssh:Permission denied(public key)当时就慌乱了。

还好同事的机器还连着这台服务器,赶紧拿来查看,首先查看.ssh/authorizedKey,发现这个文件是空的,正常应该是有一个登录公钥的。立马将登录用的公钥输出到这个文件里面,再次尝试登录,依然失败。接下来就慌了,重新生成了一对公私钥,再次尝试登录,依然失败。额滴神呢?!我都开始怀疑ssh免密码登录的设置方式了。后来在同事的提醒下去查看是否是权限问题,最终定位到/root文件夹的owner被改成了mysql:mysql,所以当我们以root用户ssh登录的时候就找不到对应的公钥了,也就无法完成正常登录了。解决方法很简单,将/root的owner修改会root:root就可以了。

后来在本地环境我又重现了下这个问题,确认是tar在解压的时候会保留压缩文件内容的owner信息,所以当我没有指定解压路径的时候,就默认使用了当前路径,也就是/root,而我解压缩的文件的owner是mysql:mysql,所以在解压完成后/root的owner就被tar修改为了mysql:mysql。如果要是解压缩的owner是当前执行tar命令的用户,可以添加op两个命令行参数,也即tar zxvfop *.tar.gz,这样解压出来的文件的owner就是root了。

真是不用不知道,一用吓一跳,到现在还有些手抖呢!!!

标签: none

添加新评论