假设如下场景:实现主机A免密码登录到主机B,主要步骤如下:
1)在主机A中利用"ssh-keygen -t rsa" 产生相应的私钥和公钥(id_rsa和id_rsa.pub).
2)在主机A中添加自己的私钥:ssh-add id_rsa
注:很多介绍中都少了第二步,所以经常出现测试时不通过的情形。
ssh-add id_rsa
# 如果提示 could not open a connection to your authentication agent
终端做如下操作:
ssh-agent bash
ssh-add id_rsa # 输入密码
3)将主机A中的公钥id_rsa.pub拷贝到主机B的.ssh目录下,并cat id_rsa.pub >>authorized_keys 中。
4)将主机B中的authorized_keys改为只有当前用户有读写权限:chmod 600 authorized_keys
这样主机A就可以免登录到主机B了。
想让A,B机无密码互登录,那B机以上面同样的方式配置即可。
但是如何解除两台机器之间的信任关系呢?
其实很简单,把密钥删掉是不行的,可以在主机A上如此操作
(1)cd ~/.ssh
(2) vi known_hosts
(3)把known_hosts中关于主机B的那行删掉就行了
- 原理
- 1.在A上生成公钥私钥。
- 2.将公钥拷贝给server B
- 3.Server A向Server B发送一个连接请求。
- 4.Server B得到Server A的信息后,在authorized_key中查找,如果有相应的用户名和IP,则随机生成一个字符串,并用Server A的公钥加密,发送给Server A。
- 5.Server A得到Server B发来的消息后,使用私钥进行解密,然后将解密后的字符串发送给Server B。Server B进行和生成的对比,如果一致,则允许免登录。
总之:A要免密码登录到B,B首先要拥有A的公钥,然后B要做一次加密验证。对于非对称加密,公钥加密的密文不能公钥解开,只能私钥解开。