问题背景
在项目中会使用python中的Paramiko ssh模块完成对远程服务器的部署和执行命令。当在某一次对新镜像进行部署时,却发现Paramiko的ssh模块使用无密码方式却一直无法连接到指定服务器。使用密码方式去可以登录成功。
Paramiko模块一直会提示Authentication (publickey) failed
问题,整个过程还是挺曲折的,所以记录和分析给大家。 以下是解决和分析该问题的主要关键步骤:
问题分析
使用putty工具使用用户名和密码方式登录的远程服务器,查看ssh服务状态,输入systemctl status sshd
,以下是服务器ssh登录提示,关键信息就是"SSH Authentication Refused: Bad Ownership or Modes for Directory"
原来报错信息是因为新镜像中/root目录没有权限或者读写模式异常导致的。
同时我直接在linux系统中使用ssh命令连接本地,发现竟然也需要输入密码才可以,提示信息如下:
通过查资料了解到,需要使用chmod命令对/root
目录和/root/.ssh
设置读写权限。
解决关键步骤
-
设置/root目录权限
chmod 750 /root
-
设置ssh目录权限
chmod 600 /root/.ssh
问题验证
ssh 连接到本地不需要密码
使用systemctl status sshd
命令查看也没有报之前的错误,重新使用工具可以正常连接到远程服务器。