主机之间的 ssh 信任,简单地说,就是主机之间使用 ssh 命令登录主机不需要密码。
一、主机之间配置信任关系
将主机 A (47.100.247.242) 作为信任主机,主机 B(101.132.242.27) 作为远程主机,配置实现主机 A 免密登录到主机 B,主要步骤如下:
- 在主机 A 中产生相应的私钥和公钥(id_rsa 和 id_rsa.pub)
[testuser@cloudgw ~]$ pwd
/home/testuser
[testuser@cloudgw ~]$ ssh-keygen -t rsa
输入命令后,一路回车即可。
- 在主机 A 中添加自己的私钥
[testuser@cloudgw ~]$ cd .ssh/
[testuser@cloudgw .ssh]$ ssh-add id_rsa
Identity added: id_rsa (id_rsa)
备注: 如果提示 Could not open a connection to your authentication agent,终端做如下操作:
[testuser@cloudgw .ssh]$ ssh-agent bash
[testuser@cloudgw .ssh]$ ssh-add id_rsa
- 将主机 A 中的公钥 id_rsa.pub 拷贝到主机 B 的 .ssh目录下
[testuser@cloudgw .ssh]$ scp id_rsa.pub 101.132.242.27:~/.ssh/
- 在主机 A 上远程执行命令,在主机 B 上生成认证文件
[testuser@cloudgw .ssh]$ ssh 101.132.242.27 'cat .ssh/id_rsa.pub >> .ssh/authorized_keys'
备注:两台主机登录用户名相同的情况下,ssh 命令可以缺省用户名。若指定用其他用户名登录,只需指定用户名即可,即 ssh [email protected]。
- 登录主机 B,将 authorized_keys 改为只有当前用户有读写权限
[testuser@iZuf6crxor2b7uwzq9sutyZ ~]$ pwd
/home/testuser
[testuser@iZuf6crxor2b7uwzq9sutyZ ~]$ cd .ssh/
[testuser@iZuf6crxor2b7uwzq9sutyZ .ssh]$ ls
authorized_keys id_rsa.pub known_hosts
[testuser@iZuf6crxor2b7uwzq9sutyZ .ssh]$ chmod 600 authorized_keys
如上操作完成之后,主机 A 就可以免密登录到主机 B 了。想让 A、B 机无密码互登录,那 B 机以上面同样的方式配置即可。
扩展:若需要设置主机 A 也能同时免密登录其他多台主机,只需重复操作上述步骤 3-5 即可,或在主机 A 上先生成认证文件,修改文件权限后,再将认证文件 scp 到其他服务器。
二、解除信任关系
如何解除两台主机之间的信任关系呢?操作很简单,把密钥删掉是不行的,可以在主机A上如此操作:
[testuser@cloudgw ~]$ cd ~/.ssh
[testuser@cloudgw ~]$ vi known_hosts
把 known_hosts 中关于主机 B 的那行删掉即可。
三、原理
- 在主机 A 上生成公钥、私钥。
- 将公钥拷贝给主机 B。
- 主机 A 向主机 B 发送一个连接请求。
- 主机 B 得到主机 A 的信息后,在 authorized_keys 中查找,如果有相应的用户名和IP,则随机生成一个字符串,并用主机 A 的公钥加密,发送给主机 A。
- 主机 A 得到主机 B 发来的消息后,使用私钥进行解密,然后将解密后的字符串发送给主机 B。主机 B 将收到的字符串和生成的字符串进行对比,如果一致,则允许免密登录。
总之:A 要免密登录到 B,B 首先要拥有 A 的公钥,然后 B 要做一次加密验证。对于非对称加密,公钥加密的密文不能用公钥解开,只能用私钥解开。
文章参考: