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命令了