传统那些检查端口、防火墙、秘钥对不对之类的流程请查阅别处,咱们就不提了
来点高级的,在上面这些查了都没问题的情况下,秘钥就是不生效,还是得输入密码,怎么排查?
开启服务器端的log
以下都需要root权限,docker内的root也可以
vi /etc/ssh/sshd_config
把下面这俩前面的注释取消,使生效
# Logging
SyslogFacility AUTH
LogLevel VERBOSE
确保下面这行是没被注释的:
PubkeyAuthentication yes
把sshd开到前端便于看log
很多说通过/var/log/xxx 看日志的,有时候没这个文件,有时候没这个权限等等,并不可行
step1 关闭ssh服务
对,没看错,service sshd stop 或者 service ssh stop 或者 systemctl stop sshd.service 等,需要在自己的环境下确认下哪个能用
step2 人工开启sshd
which sshd看一下sshd的完整路径,比如是 /usr/sbin/sshd
执行:/usr/sbin/sshd -d
解释:手动开启ssh服务,-d 是debug模式,前面关闭ssh是因为不关的话会占用端口,这里就不能手动开启了
客户端触发连接
ssh -pxxxx xxx@xxx -v,在连接命令的后面加个 -v
执行命令后客户端和服务端都会有log打印,一般是服务端的信息比较有价值,会提示拒绝秘钥的原因,比如home目录权限有问题、秘钥文件权限等等的,自行看log修复吧
恢复ssh守护进程
把刚才的 sshd -d程序退出,然后参考前面关闭ssh服务的命令,stop换成start开启服务就好

被折叠的 条评论
为什么被折叠?



