今天做两台linux机器进行ssh免密认证,死活还需要输入密码,经过排查,结果其实很可笑,就是B登录A (B--->A),本该把B的公钥copy到A机器上的authorized_keys中,结果copy反了,把B的公钥copy到了A机器上,从B机器登录A机器,无论如何也不可能免密。这里不记录结果,而是记录下排查思路,这里才是最要的。
排查如下:
A-->B 在A机器上 ssh B -vvvv 后面可以多加几个v,A机器登录会打印debug过程,这里只看到公钥不被B机器认可,但看不到为啥不被接受,如图:

ssh登录中客户端的公钥不被接受,在客户端(A)是看不到的,要想看到公钥不被接受的原因,只能到服务器端(B)上打印,
首先在B端我们通过 /usr/sbin/sshd -d -p 33333 ,以DEBUG方式启动了一个ssh服务,端口是33333
在客户端(A)连接这个33333端口 ssh -p 33333 B 在服务端(B)上会打印出服务端的回应debug信息,这里可以清晰的看到为啥A上的public密钥不被接受,如下图:


其中 显示来自客户端(A)上的公钥信息,及A的公钥不能认可的原因(fd 4 clearing O_NONBLOCK) 说明、/root/.ssh/authorized_keys 里面是空的,没有公钥信息,A的公钥没有比对对象,当然不会被B接受了。
通过这个case可以了解ssh通讯的过程,及查询的文件,对于免密的ssh的调试时很有帮助的。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!