什么是RSA key,有什么作用?

当我们用SSH第一次连接到某台服务器时,终端会提示 Permanently added the RSA host key for IP address ‘192.30.252.130’ to the list of known hosts.

有时我们重新连接某台已知的服务器时,又可能会看到终端提示 RSA host key for 10.18.46.111 has changed and you have requested strict checking. Host key verification failed.

RSA key changed

这个RSA key是什么,有什么作用呢?

RSA是基于RSA算法生成的一串秘钥。秘钥主要用于建立SSL/TLS对话时进行身份验证和对称秘钥交换。

当我们看到 Permanently added the RSA host key for IP address ‘192.30.252.130’ to the list of known hosts. 这样的提示时,意味着192.30.252.130 是可信任的,可以安全地连接。

假设你要连接到一台服务器,而那台服务器的host key已经保存在known_hosts文件中,终端就会使用这个秘钥来为后续的连接做验证。同样的host key也在服务端保存了一份,假设服务端的秘钥改变了,那么客户端就会发觉出异常(例如中间人攻击),从而做出相应的动作(例如显示警告或停止连接)。

如果我们确信对方是可信任的,那么这个问题的原因很可能是对方重装了系统,或者变更了SSH连接参数导致客户端无法识别。解决方法很简单,将known_hosts文件对应的服务器秘钥删除,见上图红圈对应的服务器信息。

一旦老旧的服务器秘钥删除,我们重新连接服务器时会看到添加秘钥到known_hosts的提示,如下图:

Permanently added host key to known_hosts file