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/下


