现有A,B俩台使用linux操作系统的服务器,其IP地址分别为192.168.20.126,192.168.20.127.
想要A服务器的root用户免密登录B服务器的root用户。
方法1:
A服务器操作:
ssh-keygen -t rsa
//在用户家目录的.ssh目录下(如没有则自动帮你生成)生成私钥id_rsa和公钥id_rsa.pub
//该对公私钥是针对A服务器root用户的,免密登录时每一个用户都要有自己的一对公私钥
scp /root/.ssh/id_rsa.pub 192.168.20.127:/root/.ssh
//将公钥传输到B服务器的/root/.ssh目录下,传输前必须保证该目录存在
B服务器操作:
cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
//将A服务器传来的公钥保存到authorized_keys文件下
该文件中将包括公钥免密登录的用户名和服务器IP地址与对应的公钥
之后A服务器的root用户便可免密登录B服务器的root用户
ssh root@192.168.20.127
方法2(简便操作):
假如现在让服务器B的root用户用公钥免密登录服务器A的root用户
只需要B服务器
ssh-keygen -t rsa
//生成基于rsa算法的公钥私钥
ssh-copy-id root@192.168.20.126
//自动将用户的公钥传输到A服务器root用户家目录下的.ssh/authorized_keys中去
之后B服务器的root用户便可直接免密登录服务器A的root用户
ssh root@192.168.20.126
这样操作变简单了许多。
密钥免密登录原理
1.将终端登录的公钥提前放入到服务器端用户对应的authorized_keys文件中。
2.当终端请求公钥免密登录服务器时,服务器生成一个随机数并根据authorized_keys文件中的该请求终端的用户和IP地址找到相对应的公钥。
3.使用找到的公钥加密步骤2中的随机数,并返回给终端。
4.终端收到该加密数据后使用自己的私钥解密,并且用哈希MD5算法对该数进行处理,之后返回给服务器。
5.服务器收到后,先对步骤2中生成的随机数进行同样的MD5算法,之后让该数与终端返回的数据进行比对,如一致则认证成功。终端公钥免密登录服务器成功。
ssh工作流程
过程 | 说明 |
---|---|
版本号协商阶段 | SSH目前包括SSH1和SSH2两个版本,双方通过版本协商确定使用的版本 |
密钥和算法协商阶段 | SSH支持多种加密算法,双方根据本端和对端支持的算法,协商出最终使用 的算法 |
认证阶段 | SSH客户端向服务器端发起认证请求,服务器端对客户端进行认证 |
会话请求阶段 | 认证通过后,客户端向服务器端发送会话请求 |
交互会话阶段 | 会话请求通过后,服务器端和客户端进行信息的交互 |
1.版本号协商:双方就ssh版本号进行协商,该过程使用明文传输。
2.密钥和算法协商阶段:双方就对面支持的加密算法进行协商,并协商出会话密钥和会话ID,来保证之后传输数据的安全性。
3.认证阶段:服务器认证客户端的身份,可以使用口令认证(密码认证),也可以使用密钥认证(上面有提)
4.认证成功后客户端对服务器端发出会话请求
5.如服务器端同意会话请求,则客户端和服务器端可进行信息的交互
ssh工作流程中分别使用到了对称加密与非对称加密,比如使用非对称加密传输了对称加密中的密钥。
常见的对称加密算法有 AES、SM4、ChaCha20、3DES、Salsa20、DES、Blowfish、IDEA、RC5、RC6、Camellia。
常见的对称加密算法有RSA算法、椭圆曲线密码算法(ECC)、ElGamal算法