文档章节

二、ssh 协议:SSH 验证协议 —— 公钥认证

for。
 for。
发布于 2016/07/13 22:58
字数 760
阅读 106
收藏 3
ssh

在密钥交换完成后,进入 SSH 验证协议阶段。这个阶段所有数据加密传输。

所有验证请求必须使用以下消息格式。只定义了前几个域,其余的域依赖于验证方法。

byte    SSH_MSG_USERAUTH_REQUEST
string  user name,采用 ISO-10646 UTF-8 编码[RFC3629]
string  service name,采用 US-ASCII
string  method name,采用 US-ASCII
....    方法特有的域

user name: 用户名。

service name: 规定了验证完成后启动的服务。

method name: 验证方式名。

常用的验证方式有:

keyboard-interactive: 键盘交互验证。

publickey: 公钥认证。

gssapi-with-mic: gssapi 方式认证。

公钥认证方法

1. 客户端请求

客户端可先使用以下消息来询问使用 "publickey" 方法验证是否可被接受。

byte    SSH_MSG_USERAUTH_REQUEST
string  user name,采用 ISO-10646 UTF-8 编码[RFC3629]
string  service name,US-ASCII 编码
string  "publickey"
boolean FALSE
string  public key algorithm name
string  public key blob

public key algorithm name: 公钥算法名。

public key blob: 可包含证书。

2. 服务端响应

服务器必须以 SSH_MSG_USERAUTH_FAILURE 或 SSH_MSG_USERAUTH_PK_OK 进行应答。

1) 公钥算法不支持或者拒绝验证

任何公钥算法都可供用于验证。如果服务器不支持一些算法,它必须简单的拒绝请求。

如果服务器拒绝验证请求,它必须进行如下响应:

byte        SSH_MSG_USERAUTH_FAILURE
name-list   authentications that can continue
boolean     partial success

authentications that can continue: 一个逗号分隔的名称列表,包含服务器认为可用的 'method name' 值。

partial success: 如果验证请求被成功的处理了,则 'partial success' 的值必须为 TRUE,表示需要更多的验证。如果请求没有被成功处理,该值必须为 FALSE。

2) 服务端支持该验证方式

如果服务器支持该公钥算法,则发送:

byte    SSH_MSG_USERAUTH_PK_OK
string  public key algorithm name from the request
string  public key blob from the request

3. 客户端发送

要执行实际的验证,客户端可在其后发送一个用私钥生成的签名。

客户端也可直接发送签名,而不首先检验该密钥是否可接受。发送签名的数据包如下:

byte    SSH_MSG_USERAUTH_REQUEST
string  user name
string  service name
string  "publickey"
boolean TRUE
string  public key algorithm name
string  public key to be used for authentication
string  signature

'signature' 的值是使用私钥对下列数据(按下列顺序)的签名:

string  session identifier
byte    SSH_MSG_USERAUTH_REQUEST
string  user name
string  service name
string  "publickey"
boolean TRUE
string  public key algorithm name
string  public key to be used for authentication

4. 服务端响应

当服务器接收到该消息,它必须检查提供的密钥是否可接受。如果是,还必须检查签名是否正确。如果两个检查都成功,则该方法成功。

服务器也可要求进一步验证。如果不需要更多的验证, 服务器必须以 SSH_MSG_USERAUTH_SUCCESS 响应。

byte    SSH_MSG_USERAUTH_SUCCESS

如果请求失败或需要更多的验证,服务器必须以 SSH_MSG_USERAUTH_FAILURE 响应。

byte        SSH_MSG_USERAUTH_FAILURE
name-list   authentications that can continue
boolean     partial success

参考文档

http://git.oschina.net/lowkey2046/libssh/tree/master/document

© 著作权归作者所有

共有 人打赏支持
for。

for。

粉丝 85
博文 47
码字总数 18257
作品 0
深圳
程序员
私信 提问
由SecureCRT引发的思考和学习

前言 由于业务需要,最近在云上新购买了一批centos7.0的服务器,用脚本批量添加了用户(脚本请见我之前的博客/秘钥认证用户自动控制:http://my.oschina.net/pwd/blog/388254),加完秘钥之后发...

运维技术
2016/01/07
448
0
小白学习大数据之路——ssh安装及原理

预备知识: 1.软链接和硬链接的区别:linux环境下软链接相当于windows环境下的快捷方式,硬链接则是指通过索引节点来进行连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都...

阿亮学长123
2016/12/20
22
0
openssh网络安全分析

1 背景 SSH协议出现之前,在网络设备管理上广泛应用的一种方式是Telnet。Telnet协议的优势在于通过它可以远程地登录到网络设备上,对网络设备进行配置,为网络管理员异地管理网络设备提供了极...

卢米米
2017/12/17
0
0
ssh 协议详解

一、 前言 使用SSH可以在本地主机和远程服务器之间进行加密地传输数据,实现数据的安全。而OpenSSH是SSH协议的免费开源实现,它采用安全、加密的网络连接工具代替了telnet、ftp等古老明文传输...

奋斗的阿Q
2017/02/07
0
0
SSH、SSL与HTTPS

关于加密 在解释SSH、SSL与HTTPS协议之前我先介绍一下非对称加密协议。在1976年以前,所有的加密都采用对称加密,既A使用某种加密规则对信息加密,B收到信息后逆向加密规则解密数据。这通信方...

我在睡觉
2017/03/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Confluence 6 自定义你的空间

通过对你的空间进行界面的自定义能够让你的空间更加出类拔萃。 如果你具有空间管理员权限,你可以修改你空间的颜色配色,添加你自己的空间标识,选择是否在你空间中显示边栏。或者你可以进入...

honeymose
53分钟前
1
0
Ubuntu18.04 安装MySQL

1.安装MySQL sudo apt-get install mysql-server 2.配置MySQL sudo mysql_secure_installation 3.设置MySQL非root用户 设置原因:配置过程为系统root权限,在构建MySQL连接时出现错误:ERROR...

AI_SKI
今天
3
0
3.6 rc脚本(start方法) 3.7 rc脚本(stop和status方法) 3.8 rc脚本(以daemon方式启动)

3.6-3.7 rc脚本(start、stop和status方法) #!/usr/bin/env python# -*- coding: utf-8 -*-# [@Version](https://my.oschina.net/u/931210) : python 2.7# [@Time](https://my.oschina.......

隐匿的蚂蚁
今天
3
0
Cnn学习相关博客

CNN卷积神经网络原理讲解+图片识别应用(附源码) 笨方法学习CNN图像识别系列 深度学习图像识别项目(中):Keras和卷积神经网络(CNN) 卷积神经网络模型部署到移动设备 使用CNN神经网络进行...

-九天-
昨天
5
0
flutter 底部输入框 聊天输入框 Flexible

想在页面底部放个输入框,结果键盘一直遮住了,原来是布局问题 Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text("评论"), ...

大灰狼wow
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部