在 sshd(8) 手册页中:
OpenSSH SSH 守护程序仅支持 SSH 协议 2。每个主机都有一个主机特定的密钥,用于识别主机。每当客户端连接时,守护程序都会使用其公共主机密钥进行响应。客户端将主机密钥与其自己的数据库进行比较,以验证它没有更改。前向保密是通过 Diffie-Hellman 密钥协议提供的。该密钥协商产生共享会话密钥。会话的其余部分使用对称密码进行加密。
(由我强调)
有人可以向我解释身份验证过程是如何工作的吗?我认为:
- 每个主机都有一个唯一的 ssh 密钥(公共和私有)
- 当客户端连接到服务器时,sshd 守护进程向客户端提供公钥
- 那么客户做一些我不明白的事情
- 之后,该会话的其余部分将被加密。
我对么?有人可以详细解释一下是什么意思吗客户端将主机密钥与自己的数据库进行比较,以验证它没有更改方法?
答案1
有人可以详细解释客户端将主机密钥与自己的数据库进行比较以验证其未更改意味着什么吗?
当您ssh
进入一台(以前未知的)机器时,您将收到此查询(例如 ECDSA 类型密钥):
ssh user@newhost:
The authenticity of host 'newhost (<IP-address>)' can't be established.
ECDSA key fingerprint is SHA256:<fingerprint>.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
当回答时yes
:
Warning: Permanently added 'newhost,<fingerpint>' (ECDSA) to the list of known hosts.
主机指纹现已添加到文件中~/.ssh/known_hosts
(默认位置)。
对于将来的连接,可以使用该指纹唯一地识别主机,因此不会出现对话。但是,如果主机未能这样做,您将收到有关主机更改的警告。这是为了确保没有人可以捕获主机、重定向域等,除非您作为ssh
客户端收到有关此的警告。
将其与您手动接受一次的网站证书进行比较,如果它发生更改,则该网站将被标记为不安全。