三层职责各不相同
SSH的传输层提供服务器认证、机密性和完整性保护,通常运行在可靠字节流上。上面的用户认证协议再确认客户端所代表的用户,随后连接协议承载实际服务。
因此,“能够建立加密通道”和“有权登录某个账号”不是同一检查。服务器主机密钥帮助客户端识别对端,用户凭据则由服务器结合账号与权限规则判断。
公钥、口令与会话绑定
用户认证可以采用公钥、口令等定义好的方法,客户端声明用户和服务,服务器按所允许的方法继续交换。公钥方法需要证明持有相应私钥,而不是把私钥交给服务器保存。
服务器身份检查同样重要。若客户端没有可靠地确认主机密钥,传输虽然仍可能加密,却不能仅凭“加密了”排除主动中间人替换目标的风险。
公钥认证签名也绑定本次会话:RFC 4252规定签名数据包含会话标识、用户名、请求服务和公钥等字段,而不是只签一个与登录无关的固定字符串。客户端可先询问服务器是否接受某把公钥,但这一步不等于已经证明持有私钥;真正认证还要验证相应签名,并可能继续完成服务器要求的其他认证方式。这样,公开密钥、签名证明和账号授权分别有明确位置。
一条连接承载多个通道
SSH连接协议把终端会话、转发连接等作为不同逻辑通道,多个通道复用同一受保护连接。两端分别给通道编号,并用窗口和最大报文大小控制数据发送。
通道并不自动扩大远程权限:能否打开终端、执行命令或转发连接,仍受服务端策略限制。协议提供传送与认证机制,账号授权和目标服务规则仍需独立成立。
参考:[3]