一、背景
3台linux服务器搭建集群需要互相做ssh免密,按正常流程操作后验证,免密未生效,还需要输入密码,开始了一路问题定位的历程。。。。
原理请移步 linux服务配置ssh免密
二、思路
(一)确认免密操作无误
1、查看B服务器./ssh/authorized_keys文件,密钥已添加无误,说明免密操作正常
(二)检查文件权限无误(常见问题)
1、用户家目录/home/xxx的权限如果为777,那么修改为755或者700
2、/home/xxx/.ssh目录的权限,它的权限要求是:700
3、密钥文件authorized_keys的权限,它的权限要求是:600
(三)ssh调试验证
1、客户端调试
ssh -vvv user@ip
2、服务端调试
/usr/sbin/sshd -d -p 2222
在客户端去连接这个新端口
ssh -vvv $ip -p 2222 -l $username
发现服务端正常,客户端没看出问题,就是连不上
(四)sshd 服务端debug日志开启
# 修改文件
sudo vi /etc/ssh/sshd_config
# 设置StrictModes 为no,不检查文件权限
#StrictModes yes
StrictModes no
###日志添加该行
LogLevel DEBUG3
# 重启服务
sudo service sshd restart
(五)查看错误日志
客户端
ssh -vvv user@ip
服务端
tail -200f /var/log/secure 【查看系统日志】
终于可以看清错误日志
/home/xxx/authorized_keys on permissions
可文件权限检查明明没问题
(六)selinux enforce disable
SELinux插件开启时会为系统中开启的每一个程序和每一个文件加载一个标签,特定标签的程序只能读取或者操作特定标签的文件,如果标签不配套,该访问就会被禁止,这种在文件上的标签被称为 安全上下文,在程序上的标签为sebool
值
关闭selinux后,免密正常