您正在将服务器计算机对客户端计算机的身份验证与用户对服务器计算机的身份验证混淆。
服务器认证
建立SSH连接时发生的第一件事是服务器将其公共密钥发送给客户端,并向客户端证明(由于公共密钥加密)它知道相关联的私钥。这将对服务器进行身份验证:如果协议的这一部分成功完成,则客户端将知道服务器是它所假装的人。
客户端可以检查服务器是否为已知服务器,而不是某些流氓服务器试图以正确的身份通过。SSH仅提供一种简单的机制来验证服务器的合法性:它会~/.ssh/known_hosts
在客户端计算机上的文件(也有系统范围的文件/etc/ssh/known_hosts
)中记住您已连接的服务器。第一次连接服务器时,您需要通过其他某种方式进行检查,以确保服务器提供的公钥确实是您要连接的服务器的公钥。如果您具有要连接的服务器的公钥,则可以将其~/.ssh/known_hosts
手动添加到客户端上。
在向服务器发送任何机密数据之前,必须先对服务器进行身份验证。特别是,如果用户身份验证涉及密码,则不得将密码发送到未经身份验证的服务器。
用户认证
只有当远程用户可以证明他们有权访问该帐户时,服务器才允许该用户登录。根据服务器的配置和用户的选择,用户可以提供几种形式的凭据之一(以下列表并不详尽)。
- 用户可以提供他尝试登录的帐户的密码;然后,服务器验证密码是否正确。
- 用户可以呈现公共密钥并证明他拥有与该公共密钥相关联的私有密钥。这与用于验证服务器的方法完全相同,但是现在用户正在尝试证明其身份,而服务器正在对其进行验证。如果用户证明他知道私钥并且公钥在帐户的授权列表中(
~/.ssh/authorized_keys
在服务器上),则接受登录尝试。
- 另一种类型的方法涉及将验证用户身份的工作的一部分委托给客户端计算机。当许多机器共享相同的帐户时,这会在受控环境(例如企业)中发生。服务器通过与另一端使用的机制相同的机制对客户端计算机进行身份验证,然后依靠客户端对用户进行身份验证。