跳到主要内容

5. Authentication Requests (认证请求)

所有认证请求必须使用以下消息格式。只定义了前几个字段, 其余字段取决于认证方法。

byte      SSH_MSG_USERAUTH_REQUEST
string user name in ISO-10646 UTF-8 encoding [RFC3629]
string service name in US-ASCII
string method name in US-ASCII
.... method specific fields

'user name' 和 'service name' 在每次新的认证尝试中重复出现, 并且可以更改。服务器实现必须在每条消息中仔细检查它们, 如果它们发生变化, 必须清除任何累积的认证状态。如果无法清除认证状态, 则当 'user name' 或 'service name' 更改时, 它必须断开连接。

'service name' 指定认证后要启动的服务。可能提供几种不同的已认证服务。如果请求的服务不可用, 服务器可以立即断开连接或在以后的任何时间断开连接。推荐发送适当的断开连接消息。在任何情况下, 如果服务不存在, 则绝对不能接受认证。

如果请求的用户不存在, 服务器可以断开连接, 或者可以发送一个虚假的可接受认证 'method name' 值列表, 但永远不接受任何方法。这使得服务器可以避免披露哪些帐户存在的信息。在任何情况下, 如果 'user name' 无效或不被服务器端配置允许, 服务器绝对不能授予访问权限。

'method name' 字段告诉服务器客户端想要使用哪种认证方法。根据方法的不同, 其余字段可能为空或可能包含特定于方法的数据。