1.简介(ssh) | 1. Introduction (ssh)
1导言
SSH是一种用于在不安全网络上进行安全远程登录和其他安全网络服务的协议。
1.1范围和宗旨
SSH在客户机和服务器之间提供了一个单一的、全双工和面向字节的连接.。该协议还提供隐私、完整性、服务器身份验证和中间人保护.
大ssh
应用程序是Erlang中SSH传输、连接和身份验证层协议的实现。它规定如下:
- 编写自定义SSH客户端和服务器应用程序的API函数
- 在SSH上可用的Erlang shell
- SFTP客户端(
ssh_sftp
)和服务器(ssh_sftpd
)
1.2先决条件
假定读者熟悉Erlang编程语言,OTP的
概念,并且对公钥
有基本的了解。
1.3 SSH协议概述
从概念上讲,SSH协议可以分为四层:
图1.1:SSH协议体系结构
运输协议
SSH传输协议是一种安全的低级传输。它提供了强大的加密,加密主机认证和完整性保护。至少支持消息认证码(MAC)和加密算法。有关详细信息,请参见ssh(3)
手册页ssh
。
认证协议
SSH身份验证协议是运行在SSH传输层协议上的通用用户身份验证协议.。大ssh
应用程序支持以下用户身份验证:
- 使用公钥技术。不支持RSA和DSA,X 509-证书。
- 使用键盘-交互式身份验证。这适用于在客户端不需要任何特殊软件支持的交互式身份验证方法。相反,所有身份验证数据都是从键盘输入的。
- 使用纯基于密码的身份验证方案。在这里,纯文本密码在通过网络发送之前是加密的。
ssh:connect/[3,4]
和中提供了几种用于认证处理的配置选项ssh:daemon/[2,3]
。
通过实现以下行为,可以定制公钥处理ssh
*
- 模块
ssh_client_key_api
。
- 模块
ssh_server_key_api
。
连接协议
SSH连接协议通过传输管道提供应用支持服务,例如信道复用,流量控制,远程程序执行,信号传播和连接转发。用于处理SSH连接协议的函数可以在中的模块ssh_connection
中找到ssh
。
通道
所有终端会话,转发连接等都是通道。多个通道被复用到一个连接中。所有通道都是流量控制的。这意味着在收到一条消息以指示窗口空间可用之前,不会向通道对等设备发送任何数据。的初始窗口大小
指定的信道数据的多少字节,可以被发送到对等信道不调整窗口。通常,SSH客户端打开一个通道,发送数据(命令),接收数据(控制信息),然后关闭通道。该ssh_channel
行为处理SSH通道管理的通用部分。这使得编写自己的使用流控制的SSH客户端/服务器进程变得很容易,从而打开更多的关注应用程序逻辑。
渠道有以下三种口味:
子系统
- 可以作为SSH服务器的一部分运行的命名服务,例如(ssh_sftpd)
默认情况下内置于SSH守护进程(服务器)中的SFTP ,但可以禁用它。Erlangssh
守护进程可以配置为运行任何Erlang实现的SSH子系统
。
外壳
- 交互式外壳
。默认情况下,Erlang守护进程运行Erlang shell。可以通过提供自己的读取评估打印循环来定制外壳
。您也可以提供您自己的命令行界面(CLI)实施,但这是更多的工作。
主管
-一次性远程执行命令。见函数ssh_connection:exec/4
想了解更多信息。
1.4在哪里找到更多信息
有关SSH协议的详细信息,请参阅以下征求意见(RFC):
RFC 4250
-指定的礼宾编号
RFC 4251
-礼宾结构
RFC 4252
-认证协议
RFC 4253
-传输层协议
RFC 4254
-连接议定书
RFC 4344
-传输层加密模式
RFC 4716
-公钥文件格式