linux 中 ssh 免密登录原理解析
免密登录配置
- 客户端生成公钥私钥对
- 服务端保存公钥到 authorized_keys [scp/ssh-copy-id]
- /etc/ssh/sshd_config 配置重启
- know_hosts 会记录链接主机信息 首次会询问
原理解析
- 在客户端使用ssh-keygen生成一对密钥:公钥+私钥
- 将客户端公钥追加到服务端的authorized_key文件中,完成公钥认证操作
- 认证完成后,客户端向服务端发起登录请求,并传递公钥到服务端
- 服务端检索authorized_key文件,确认该公钥是否存在
- 如果存在该公钥,则生成随机数R,并用公钥来进行加密,生成公钥加密字符串pubKey(R)
- 将公钥加密字符串传递给客户端
- 客户端使用私钥解密公钥加密字符串,得到R
- 服务端和客户端通信时会产生一个会话ID(sessionKey),用MD5对R和SessionKey进行加密,生成摘要(即MD5加密字符串)
- 客户端将生成的MD5加密字符串传给服务端
- 服务端同样生成MD5(R,SessionKey)加密字符串
- 如果客户端传来的加密字符串等于服务端自身生成的加密字符串,则认证成功
- 此时不用输入密码,即完成建连,可以开始远程执行shell命令了