内容提要
SSH 工作流程:客户端与服务器建立 TCP 连接,交换版本并协商加密算法,各自独立计算会话密钥,密钥不在网络上传输。服务器发送公钥和签名,客户端通过 known_hosts 验证主机密钥。随后客户端用私钥签名认证请求,服务器用 authorized_keys 中的公钥验证签名,私钥始终保留在本地,认证通过后开启会话。
延伸解读
会话密钥的独立计算机制
SSH 在密钥交换阶段,双方各自独立计算出相同的会话密钥,密钥本身从不通过网络传输。这种设计即使网络流量被截获,攻击者也无法直接获取会话密钥,从而保障了后续通信的机密性。理解这一点有助于认识 SSH 为何比明文协议更安全。
主机密钥验证与中间人防护
服务器发送公钥和签名后,客户端会将其与 known_hosts 文件中记录的主机密钥进行比对。如果密钥不匹配,客户端会发出警告,提示可能存在中间人攻击。这一机制让用户能够察觉连接目标是否被冒充,是 SSH 安全链条中的重要一环。
公钥认证中私钥的本地性
在认证阶段,客户端使用私钥对认证请求签名,服务器则用 authorized_keys 中的公钥验证签名。私钥始终保留在客户端本地,不会发送给服务器。这种非对称加密方式避免了私钥泄露风险,同时实现了无密码登录的便捷性。
Q&A
SSH 是如何在不安全的网络上保证安全访问的?
SSH 通过加密和认证机制保证安全。它先建立 TCP 连接,交换版本并协商加密算法,然后双方独立计算会话密钥,密钥不在网络上传输。服务器发送公钥和签名,客户端用 known_hosts 验证主机密钥。认证时客户端用私钥签名,服务器用 authorized_keys 中的公钥验证签名,私钥始终保留在本地。
SSH 连接建立过程中,会话密钥是如何生成和交换的?
SSH 客户端和服务器各自独立运行密钥交换协议,在本地计算出相同的会话密钥,但不会通过网络传输这些密钥。这样即使网络被监听,会话密钥也不会泄露。
SSH 客户端如何验证服务器的身份?
服务器会发送公钥和签名,客户端验证签名后,将主机密钥与本地 known_hosts 文件中的记录进行比对,从而确认服务器身份。
SSH 认证时,客户端的私钥会被发送到服务器吗?
不会。客户端使用私钥对认证请求进行签名,然后将数字签名发送给服务器。服务器使用客户端公钥验证签名。私钥始终保留在客户端本地,不会离开你的机器。
SSH 服务器如何验证客户端的登录请求?
服务器首先检查客户端发送的公钥是否存在于 authorized_keys 文件中。如果存在,服务器再用该公钥验证客户端发来的数字签名。验证通过后,认证完成,会话开启。
SSH 的整个工作流程包括哪些主要步骤?
主要步骤包括:1. 客户端与服务器建立 TCP 连接;2. 交换 SSH 版本并协商加密算法;3. 双方独立计算会话密钥;4. 服务器发送公钥和签名,客户端验证并检查 known_hosts;5. 客户端发送公钥并用私钥签名认证请求;6. 服务器用 authorized_keys 中的公钥验证签名;7. 认证通过,会话开启。