linux中authorized_keys和known_hosts的区别

authorized_keys和known_hosts是SSH连接中的两个重要文件,但其用途不同

authorized_keys:

  • 存储已授权的公钥,用于SSH登录验证
  • 位于服务端,一般为~/.ssh/authorized_keys
  • 格式为公钥字符串,每行一条公钥
  • SSH客户端登录时,会提供私钥进行签名,服务端会匹配authorized_keys中的公钥进行验证
  • 只有匹配的公钥才会授权客户端登录

例如:我在A机器上执行ssh-keygen来生成公钥和私钥,然后我通过ssh-copy-id B机器,那么此时会将A机器的公钥发送到B机器,公钥的位置就会存储在B机器的~/.ssh/authorized_keys文件中

ssh通过密钥登录原理如下:

  • 客户端生成RSA公钥和私钥
  • 客户端将自己的公钥存放到服务器(ssh-copy-id命令)
  • 当客户端发起登录请求的时候,服务端随机返回一个字符串
  • 客户端通过私钥对字符串进行加密,然后再次发送给服务端
  • 服务端通过存储的公钥对字符串进行解密,如果与预期的相同,认证通过,可以登录

known_hosts:

  • 存储已知主机的公钥,用于SSH主机验证
  • 位于客户端,一般为~/.ssh/known_hosts
  • 格式为”主机名 公钥类型 公钥字符串”
  • SSH客户端连接服务端时,会检查known_hosts是否有该主机名及公钥
  • 如果有,且公钥匹配,则验证通过,否则会提示新增或替换公钥
  • 用于防止中间人攻击,确保客户端连接的是预期的SSH服务器

例如:我通过A机器的ssh命令连接到B机器,连接成功后,会在A机器的~/.ssh/known_hosts文件中储存B机器的公钥信息,是存储在客户端本机的

总结:

authorized_keys用于保存客户端的公钥信息,此文件位于远程的服务端~/.ssh/下

known_hosts:保存服务端的公钥信息,此文件位于客户端的~/.ssh/下

标签