在安装好SSH的机子上,一般配置SSH单向(例如只从A机免密码登录到B机)免密码登录步骤如下:
在A机上:
cd ~/.ssh
ssh-keygen -t rsa # 在~/.ssh目录下生成公私钥对
cat id_rsa.pub >> authorized_keys # 将公钥追加到A机的authorized_keys文件中,则A机可以免密码登录本机
scp ./rsa_id.pub destination.host:~/.ssh # 将公钥发送到B机子~/.ssh目录下
在B机子上:
cd ~/.ssh
cat id_rsa.pub >> authorized_keys # 在~/.ssh目录下将公钥追加到authorized_keys文件中,至此,A机可以免密码登录B机(第一次登录时,需要输入B机子的登录密码)
chmod 600 authorized_keys # 如果第二次登录时仍旧需要输入密码,请确认authorized_keys文件的权限
上述是设置A机免密码登录B机,如果需要进一步配置B机免密码登录A机,则在B机~/.ssh目录下ssh-keygen -t rsa生成自己的公私钥对之后(因为之前已经将A机的公钥文件rsa_id.pub发送到了B机的~/.ssh目录下,此时会提示覆盖该文件,这个可以直接覆盖,因为A机公钥已存在于authorized_keys文件中),在发送给A机之前,最好生成一份B机公钥副本(cp rsa_id.pub rsa_id.pub.B),以免覆盖了A机下面已经存在的A机自己的公钥。A机在得到B机的公钥后,将B机公钥追加到authorized_keys文件中,B机即可免密码登录A机(第一次登录也是需要密码)。最后清理A机下B机的公钥文件,并清理B机上B机自己的公钥副本,不然会影响登录,时间一长也容易搞混。
自己在实践过程中,正是因为直接将B机的公钥发送给A机从而覆盖了A机自己的公钥文件,导致A-B单向登录时还可以,一配置双向登录后,A-B单向登录也不行了(A机公钥已被替换)。(如果只是A/B两个自己,可以用scp命令直接将公钥复制到远程机子的authorized_keys文件中,但多机情况下该命令会将之前的内容直接覆盖,要是scp有文件追加功能就好了。)
出现这个情况的原因是自己实现对SSH登录原理不甚清楚,从而走了不少弯路。看来果真知其所以然,才能知其各种然。
同样附上自己参考的几篇比较有用的博文:SSH原理、Secure Shell(Wikipedia)、SSH原理与运用(一):远程登录(主要参看评论)、ssh配置authorized_keys后仍然需要输入密码的问题、ssh 无密码验证 及 ssh localhost 仍然需要密码的解决方案、SSH双向免密码登陆:::linux配置双机SSH信任
如果文章对你有用,请在收藏之余“顶/赞”一下以示鼓励吧 (/ω\)