ssh关于known_hosts文件

ssh关于known_hosts文件

   张吉吉     2020年12月10日 10:19     1568    

为什么在ssh的client端会产生一个known_hosts的文件呢

主要就是防止中间人攻击的。

以操作系统来说的话,当我新安装上操作系统的时候,是不会有known_hosts文件的。

当去使用ssh client给ssh server端发送请求以后,ssh client会首先去known_hosts中进行查找,如果known_hosts中找到了有关于ssh server端的认证的公钥,就建立起连接。

第一次使用ssh登录ssh server会有一个询问,其默认协议是ECDSA,如果客户端同意以后,会将/etc/ssh/ssh_host_ecdsa_key.pub中的public key记录到known_hosts中。

等再一次登录的时候,就会提示ssh client直接输入密码即可。

 

对于客户端添加public key也有一个参数控制,这个参数就是StrictHostKeyChecking。

此参数在/etc/ssh/ssh_config中。

 

(1)其默认值是ask

如果将此标志设置为ask(缺省值),则只有在用户确认这是他们真正想做的事情之后,新的主机密钥才会添加到用户已知的主机文件中,并且ssh将拒绝连接到其主机密钥已更改的主机。

[root@216-nginx-proxy-2 .ssh]# ssh 192.168.0.221

The authenticity of host '192.168.0.221 (192.168.0.221)' can't be established.

ECDSA key fingerprint is SHA256:Y60an3UBQHGTHPelEPDy4rQoPdjyPz7OrxjnKNUWzfs.

ECDSA key fingerprint is MD5:61:90:f2:31:f6:79:2f:ff:e8:17:c4:29:4c:1e:6c:fb.

Are you sure you want to continue connecting (yes/no)? yes

所以就会有一个询问,用户到底同不同意进行添加这个public key,这样就必须用户自己去判断所添加的主机是不是目标主机。

在之前文章中有过问题 《SSH远程主机标识已更改 在连接的时候提示 REMOTE HOST IDENTIFICATION HAS CHANGED!

这个就是ask的功能,当密钥发生了改变,就提示这个信息。

 

(2)yes参数

yes这个对中间人攻击提供了最大的保护,因为其不允许服务端主机自动添加public key到客户端。也不会询问用户,就直接进行了拒绝。除非用户手动添加public key到known_hosts中。这说明用户对服务端也是具有绝对的控制权。

以下是提示的信息。

No ECDSA host key is known for 192.168.0.221 and you have requested strict checking.

Host key verification failed.

如果想要登录只需要将ssh服务端/etc/ssh/ ssh_host_ecdsa_key.pub中的内容添加到ssh客户端即可。


(3)no参数

如果将此标志设置为no,ssh将自动向用户已知的主机文件添加新的主机密钥,并允许在某些限制下继续连接更改了主机密钥的主机。


文章评论

0

其他文章