1. RSA公钥私钥配置:
可能是个例:Windows配置RSA密钥对无法免密登录。Windows端配置了私钥id_rsa和公钥id_rsa.pub。将id_rsa.pub放到服务器 ~/myname/.ssh/目录下,并且更名为authorized_keys后,无法免密登录(后文提到的.ssh文件夹权限,authorized_keys问题均配置正确,并且没有SELinux禁止访问问题)。
解决方案:Linux服务器生成密钥对成功免密登录。在服务器端生成私钥公钥对,将私钥下载到windows的 C:/Users/myname/.ssh/目录下,因为我有多个服务器,所以修改了私钥id_rsa的名字为id_rsa228,并且配置该目录下的配置文件C:/Users/myname/.ssh/config,添加IdentityFile子段指定私钥的路径,即可成功。
2. 服务器端文件夹权限,及SELinux禁止访问
2.1. Linux服务器端~/myname/.ssh文件夹权限,及文件权限的问题
2.2. SELinux禁止访问~/myname/.ssh的问题
参考这篇博文
3. 排查方法:
3.1. Linux服务器端,使用ssh的debug模式:
sudo /usr/sbin/sshd -d -p 2222
启动后如下图
如果防火墙禁止使用2222端口
#防火墙开放2222端口
sudo firewall-cmd --permanent --add-port=2222/tcp
#重新加载生效
sudo firewall-cmd --reload
3.2 Windows客户端,这里我使用cmd进行调试
#-i指定私钥,对应C:/Users/myname/.ssh/config配置文件中的“IdentityFile”字段
ssh -vvv myname@203.28.XXX.XXX -p 2222 -i C:/Users/myname/.ssh/id_rsa228
上述命令回车,服务器端如果有“Authentication refused: bad ownership or modes for directory”这个提示,就参考这篇博文修改权限
如果正常登录,则调试成功!
3.2 但是也不一定
调试结束后,在windows的cmd里登录
ssh myname@203.28.XXX.XXX -i C:/Users/myname/.ssh/id_rsa228
仍然要求输入密码,这是怎么回事?
这里就需要看服务器端的日志了:
a. 在Linux服务器端执行如下命令
sudo vim /etc/ssh/sshd_config
找到“LogLevel”字段,删除前边的“#”,并修改为“LogLevel Debug”
b. 重新在cmd里输入命令登录,并且查看日志
sudo vim /var/log/messages
如果有上图中SELinux阻止访问文件,则参考这篇博文修改权限