在 sshd(8) 手册页中:
OpenSSH SSH 守护程序仅支持 SSH 协议 2。每个主机都有一个特定于主机的密钥,用于标识主机。每当客户端连接时,守护程序都会使用其公共主机密钥进行响应。客户端将主机密钥与自己的数据库进行比较,以验证它没有更改。前向保密是通过 Diffie-Hellman 密钥协议提供的。该密钥协议产生共享会话密钥。会话的其余部分使用对称密码进行加密。
(由我强调)
有人可以向我解释身份验证过程是如何工作的吗?我认为:
- 每个主机都有一个唯一的 ssh 密钥(公共和私有)
- 当客户端连接到服务器时,sshd 守护进程为客户端提供公钥
- 客户然后做一些我不明白的事情
- 之后,该会话的其余部分被加密。
我对么?有人可以详细解释一下客户端将主机密钥与自己的数据库进行比较以验证它没有更改是什么意思吗?
当您
ssh
进入(以前未知的)机器时,您将获得以下查询(例如 ECDSA 类型的密钥):回答时
yes
:主机指纹现在添加到文件中
~/.ssh/known_hosts
(默认位置)。对于未来的连接,主机可以用这个指纹唯一标识,因此不会出现对话。但是,如果主机未能这样做,您将收到有关主机更改的警告。这是为了确保没有人可能只是捕获主机、重定向域等,而您作为
ssh
-client 没有收到有关此的警告。将其与您手动接受一次的网站证书进行比较,如果它发生更改,则该网站被标记为不安全。