在 Windows XP,7,8 上开启 SSH 服务相对复杂,因为它不内置 OpenSSH。你需要使用第三方软件; windows 10 ,11 内置的 OpenSSH 服务器功能来启用 SSH 服务,或者使用第三方软件
| Windows xp | 系统本身并不内置 SSH 服务器,因此需要使用第三方软件来实现 SSH 功能 |
| Windows 7 | 系统本身并不内置 SSH 服务器,因此需要使用第三方软件来实现 SSH 功能 |
| windows 8 | 系统本身并不内置 SSH 服务器,因此需要使用第三方软件来实现 SSH 功能 |
| windows 10 | 内置的 OpenSSH 服务器功能来启用 SSH 服务,或者使用第三方软件 |
| windows 11 | 内置的 OpenSSH 服务器功能来启用 SSH 服务,或者使用第三方软件 |
SSH(Secure Shell)中文:安全外壳协议
简要说明
- 作用:加密的远程管理协议,替代明文的 Telnet;默认端口 22。
- 相关衍生名词
- SSH‑2:SSH Version 2,现行主流协议版本(RFC 4251‑4254),libssh2 就是实现 SSH‑2 客户端协议库。
- sshd:SSH Daemon,Linux 的 SSH服务端守护进程。
- SFTP:SSH File Transfer Protocol,基于 SSH 通道的文件传输协议。
易混淆区分
- Telnet:Teletype Network,明文远程终端,不安全。
- SCP:Secure Copy,基于 SSH 的文件拷贝工具。
小知识点:SSH 不是缩写自Secure Socket Shell,标准全称就是 Secure Shell。
SSH(Secure Shell 安全外壳协议)版本完整演进
SSH‑1(SSH 版本 1)
- 发布时间:1995 年,Tatu Ylönen 开发,最早 SSH 实现
- 背景:Telnet、rlogin 全部明文传输,账号密码、命令完全抓包可见,为解决明文风险诞生 SSH。
- 协议文档:非 RFC 标准,是早期私有协议。
- 重大缺陷
- CRC‑32 校验存在加密漏洞,攻击者可实施SSH1 CRC 劫持攻击,可以篡改加密会话内数据。
- 加密算法、密钥交换设计薄弱,安全缺陷持续被披露。
- 不支持强大的 Diffie‑Hellman 组协商,扩展性差。
- 现状:现已彻底废弃,现代 ssh 服务端默认关闭 SSH‑1 支持,几乎不再使用。
SSH‑2(SSH Version 2,现行工业标准)
SSH‑2 核心 RFC 体系
| RFC 编号 | 内容 |
|---|---|
| RFC 4251 | SSH‑2 整体架构概述 |
| RFC 4252 | 用户认证协议 Userauth |
| RFC 4253 | 传输层协议 Transport(握手、密钥交换、加密包封装,libssh2 核心实现) |
| RFC 4254 | 连接通道协议 Channel(Shell、SFTP、端口转发多路复用) |
libssh2 就是完整实现 SSH‑2 客户端协议栈,不支持老旧 SSH‑1。
SSH‑2 关键技术改进对比 SSH‑1
- 采用安全 MAC 完整性校验,彻底修复 CRC 劫持漏洞;支持 Encrypt‑then‑MAC 模式(本次 libssh2 漏洞就出在该模式解析)
- 模块化架构:传输层、认证层、通道层解耦
- 支持 DH/ECDH 密钥交换,多种加密套件可协商(AES‑GCM、ChaCha20‑Poly1305 等)
- 多路复用单 TCP 连接:一条 SSH 连接之上可以同时跑 Shell、SFTP、端口转发多个逻辑 Channel 通道
- 完善公钥认证、agent 代理转发
SSH‑2 后续迭代(没有 SSH‑3 版本)
重点:没有官方 SSH‑3 协议版本,日常说的新版本是软件实现版本(OpenSSH),不是协议版本。
OpenSSH(最主流实现)软件迭代(协议依旧跑 SSH‑2)
- OpenSSH 5.x:加入 AES‑GCM、ECDH 椭圆曲线密钥交换
- OpenSSH 6.x:移除 SSH‑1 协议支持;强化加密算法;支持 chacha20‑poly1305
- OpenSSH 7.x:大量淘汰弱算法(rc4、3des 等)
- OpenSSH 8.x:支持 ssh‑sk FIDO 安全密钥;进一步清理老旧加密套件
- OpenSSH 9.x:强化后量子加密实验支持,抵抗未来量子计算破解
很多人混淆:协议版本只有 SSH‑1 / SSH‑2;OpenSSH 是软件实现,它有自己软件号,不等于协议版本。
版本速记
- SSH‑1:1995,有严重安全漏洞,淘汰。
- SSH‑2:2001RFC 定稿,至今全球通用标准协议。
- 不存在 SSH‑3 协议;新功能都是 OpenSSH 软件升级,底层依旧是 SSH‑2 协议。
关联工具库版本补充
- libssh2:只实现 SSH‑2 客户端;最高版本 1.11.1(本次爆出 4 枚高危漏洞)
- libssh:另一套 SSH 库,同时支持客户端 + 服务端,区别 libssh2。
常见排坑
报错Protocol major versions differ: 1 vs. 2客户端试图使用 SSH‑1 去连接只开启 SSH‑2 的服务端,现在几乎不会见到。
SSH‑1 与 SSH‑2 对比简表(含报文 / 数据包结构差异)
说明:SSH‑1 为私有非 RFC 协议;SSH‑2 整套标准化 RFC4251‑4254,现代唯一在用协议。
| 对比项 | SSH‑1(SSH‑1.5) | SSH‑2(SSH Version 2) |
|---|---|---|
| 诞生年份 | 1995 Tatu Ylönen | 1996 草案,2001 正式 RFC 发布 |
| 标准化状态 | 私有协议,无正式 RFC | RFC 4251/4252/4253/4254 完整标准 |
| 协议兼容性 | 和 SSH‑2完全不兼容 | 不兼容 SSH‑1 |
| 安全校验机制 | CRC‑32 校验,存在著名 CRC 劫持漏洞,可以篡改加密流量 | HMAC / Encrypt‑then‑MAC,抗报文篡改;可区分完整性失败 |
| 密钥交换 | 固定 Diffie‑Hellman 组,算法选择极少 | 灵活 KEX 协商:DH、ECDH;可扩展后量子算法;服务端 / 客户端双向协商套件列表 |
| 加密套件 | DES、3DES、Blowfish,选择有限 | AES‑CBC、AES‑GCM、ChaCha20‑Poly1305 等,支持大量现代密码 |
| 多路复用 | 不支持;每一类功能需要新建一条 TCP 连接 | 单 TCP 连接之上多路复用多个Channel 逻辑通道:Shell、SFTP、SCP、端口转发同时跑 |
| 认证方式 | 密码、RSA 公钥 | 密码、公钥、主机认证、Keyboard‑Interactive、SSH‑SK (FIDO) |
| Agent 代理 | 简易 Agent | 完善 ssh‑agent 协议,支持 agent 转发 |
| 现状 | 全部废弃,现代 sshd 默认关闭 SSH‑1 | 工业通用标准,OpenSSH/libssh2/libssh 全部基于 SSH‑2 |
报文 / 数据包结构差异
SSH‑1 数据包结构
uint32 packet_length // 数据包总长度
uint8 padding_length // 填充字节数
byte[payload_len] payload // 有效载荷
byte[pad_len] padding // 随机填充
uint32 crc32 // CRC32校验(安全缺陷根源)
- 缺陷:仅 CRC32 做完整性校验,不是密码学安全 MAC;攻击者可位翻转篡改密文,实现会话劫持。
- 无独立 MAC 字段,CRC 同时承担校验,加密和校验耦合。
SSH‑2 标准数据包(RFC4253 transport‑packet)
libssh2fullpacket()就是组装该报文;本次 CVE‑2026‑66035 漏洞就在这个包的处理逻辑
uint32 packet_length // 不含MAC的整个包长度(4字节大端)
uint8 padding_length // 填充字节数量
byte[N] payload // 业务载荷
byte[P] padding // 随机填充,最小4字节
byte[MAC‑len] MAC // HMAC/Encrypt‑then‑MAC校验摘要(可选位置由模式决定)
- EtM Encrypt‑then‑MAC:先加密载荷 + 填充,再对密文计算 MAC;本次 libssh2 预认证漏洞触发条件之一。
- MtE MAC‑then‑Encrypt:先算明文 MAC,整体再加密。
SSH‑2:所有数值字段强制大端网络字节序;SSH‑1 同样大端,但字段定义、长度语义不一样。
关键底层差异小结
- SSH‑1:CRC32 弱校验 → 可被篡改,无 Channel 多路复用,功能简单、安全硬伤。
- SSH‑2:传输层包格式重新设计,分离加密与完整性校验;引入 Channel 多路复用,一套 TCP 连接跑多种业务(终端、文件传输、转发),可灵活切换密码套件。
- libssh2 只实现 SSH‑2,完全没有 SSH‑1 协议代码,本次全部漏洞均针对 SSH‑2 传输层 / SFTP 业务报文解析。
补充常见报错
Protocol major versions differ:1 vs 2
SSH‑2 完整握手 & 业务时序(RFC4253)
角色:Client 客户端(libssh2) ↔ Server SSH 服务端(sshd)标注漏洞区间:KEX 阶段 = 预认证区间(CVE‑2026‑66033/34/35 在此可触发);SFTP 会话 = 认证后业务层(CVE‑2026‑66032)
TCP三次握手建立连接
Client ───TCP SYN───→ Server
Client ←──TCP SYN+ACK─ Server
Client ───TCP ACK───→ Server
阶段 1:版本字符串协商(明文)
Client ──"SSH‑2.0‑libssh2_1.11.1\r\n"──→ Server 【客户端版本公告,明文】
Client ←─"SSH‑2.0‑OpenSSH_9.7\r\n"─── Server 【服务端版本公告,明文】
此阶段全部明文,还没有任何加密。
阶段 2:KEX 密钥交换(预认证,尚未输入账号密码!高危漏洞区)
Client ──KEX_INIT(客户端算法列表)──→ Server
Client ←─KEX_INIT(服务端算法列表)─── Server
# 双方协商:KEX算法、加密算法(AES‑GCM)、MAC模式(Encrypt‑then‑MAC)、压缩算法
Client ──KEX_ECDH_INIT(客户端公钥)──→ Server
Client ←─KEX_ECDH_REPLY(服务端主机公钥+服务端DH公钥+签名) ← Server
# 双方计算共享会话密钥;派生:加密key、IV、MAC密钥
# ✨ 自此之后所有报文全部加密
# ⚠️ CVE‑2026‑66033 / 66034 / 66035 预认证漏洞全部发生在KEX_INIT~KEX_REPLY流程,无需认证,恶意服务器构造畸形数据包即可攻击客户端内存
阶段 3:用户身份认证 UserAuth(RFC4252)
Client ──USERAUTH_REQUEST(用户名|密码/私钥)──→ Server
Client ←─USERAUTH_FAILURE(继续尝试其他方式)─── Server
Client ──USERAUTH_REQUEST(私钥签名)──────────→ Server
Client ←─USERAUTH_SUCCESS ─────────────────── Server
# ✅ 认证成功,会话正式就绪
# CVE‑2026‑66032 尚未到达,需要进入上层Channel业务
阶段 4:Channel 创建(RFC4254 多路复用通道)
SSH‑2 单 TCP 连接可以同时建立多条独立 Channel:shell、sftp、端口转发
Client ──CHANNEL_OPEN("session")──→ Server 请求打开session会话通道
Client ←─CHANNEL_OPEN_CONFIRM─── Server Channel建立成功,分配本地/远程channel id
Client ──CHANNEL_REQUEST("subsystem","sftp")──→ Server 请求启动SFTP子系统
Client ←─CHANNEL_SUCCESS ──────────────────── Server SFTP子系统启动完成
# 📌 SFTP逻辑通道就绪,开始执行SFTP指令交互
# ⚠️ CVE‑2026‑66032(sftp_open Double Free)就在这个之后的SFTP_FXP_OPEN应答处理逻辑
阶段 5:SFTP 业务交互(sftp.c 业务报文)
Client ─‑SFTP_FXP_OPEN(打开文件)‑‑‑‑‑‑‑‑‑‑→ Server
Client ←‑SFTP_FXP_HANDLE / 畸形成功应答‑‑‑ Server
# libssh2 sftp_open()处理服务端返回包,错误路径触发Double Free
# 完成业务读写、stat、readdir等SFTP操作
阶段 6:会话关闭
Client ─CHANNEL_CLOSE─→ Server
Client ─DISCONNECT消息─→ Server
TCP断开
时序阶段风险标记总览
| 阶段 | 是否认证完成 | 可触发漏洞 |
|---|---|---|
| 版本协商 | ❌未认证 | 无本次漏洞 |
| KEX 密钥交换 | ❌预认证 | CVE‑2026‑66033、66034、66035 |
| UserAuth 认证 | 部分交互 | 无本次漏洞 |
| Channel Open / subsystem sftp | ✅认证成功 | 到达漏洞前置条件 |
| SFTP 业务报文交互 | ✅认证成功 | CVE‑2026‑66032 Double Free RCE |
关键理解
libssh2 是客户端库;攻击链路:恶意 SSH 服务端发送畸形数据包 → 受害客户端 libssh2 解析处理报文触发内存破坏。不需要拿到客户端账号密码,KEX 阶段的 3 个漏洞,只要客户端主动连恶意服务器,握手阶段就中招。
在 Windows XP 上开启 SSH 服务相对复杂,因为它不内置 OpenSSH。你需要使用第三方软件。以下是一些常见的方法:
方法 1:使用 Cygwin
-
下载 Cygwin:
- 访问 Cygwin 官网 下载 Cygwin 安装程序。
-
安装 Cygwin:
- 运行安装程序,选择安装目录。
- 在软件包选择界面,搜索并选择
openssh进行安装。
-
配置 SSH 服务:
- 安装完成后,打开 Cygwin 终端。
- 运行以下命令以生成 SSH 密钥:
bashCopy Code
ssh-host-config - 按提示设置服务,并输入“yes”以安装服务。
-
启动 SSH 服务:
- 在 Cygwin 终端中运行以下命令:
bashCopy Code
net start sshd
- 在 Cygwin 终端中运行以下命令:
方法 2:使用其他 SSH 服务器软件
可以使用一些专门为 Windows 开发的 SSH 服务器,例如:
- FreeSSHd:简单易用,适合基本的 SSH 服务。
- Bitvise SSH Server:功能更强大,支持多种认证方式。
安装步骤(以 FreeSSHd 为例):
-
下载 FreeSSHd:
- 访问 FreeSSHd 官网 下载软件。
-
安装并配置:
- 按照安装向导进行安装。
- 安装完成后,打开 FreeSSHd,进行必要的配置,包括用户设置和端口配置。
-
启动服务:
- 在 FreeSSHd 界面中选择启动服务。
使用 SSH 连接
一旦 SSH 服务启动,你可以使用 SSH 客户端(如 PuTTY)进行连接:
ssh username@hostname
替换 username 和 hostname 为你的用户名和计算机名称或 IP 地址。
在 Windows 7 上,系统本身并不内置 SSH 服务器,因此需要使用第三方软件来实现 SSH 功能。以下是几种常见的方法:
方法 1:使用 OpenSSH for Windows
-
下载 OpenSSH:
- 访问 GitHub 上的 OpenSSH for Windows 页面,下载最新的发行版(.zip 文件)。
-
解压缩并安装:
- 解压下载的文件,将文件夹内容复制到
C:\Program Files\OpenSSH(可以根据需要选择其他位置)。
- 解压下载的文件,将文件夹内容复制到
-
安装 OpenSSH 服务:
- 打开命令提示符(以管理员身份)。
- 运行以下命令安装 SSH 服务:
bashCopy Code
cd "C:\Program Files\OpenSSH" install-sshd
-
启动 SSH 服务:
- 运行以下命令启动 SSH 服务:
bashCopy Code
net start sshd
- 运行以下命令启动 SSH 服务:
-
设置开机自启:
- 运行以下命令设置 SSH 服务在启动时自动运行:
bashCopy Code
sc config sshd start=auto
- 运行以下命令设置 SSH 服务在启动时自动运行:
方法 2:使用 Cygwin
-
下载并安装 Cygwin:
- 访问 Cygwin 官网 下载并安装 Cygwin。
-
选择 OpenSSH 包:
- 在安装过程中,当提示选择软件包时,找到 OpenSSH 并选择安装。
-
配置 SSH 服务:
- 安装完成后,打开 Cygwin 终端,运行以下命令生成 SSH 密钥对:
bashCopy Code
ssh-keygen -t rsa -b 2048
- 安装完成后,打开 Cygwin 终端,运行以下命令生成 SSH 密钥对:
-
启动 SSH 服务:
- 运行以下命令启动 SSH 服务:
bashCopy Code
/usr/bin/sshd
- 运行以下命令启动 SSH 服务:
方法 3:使用其他第三方软件
还有其他一些第三方 SSH 服务器软件,例如:
- Bitvise SSH Server
- FreeSSHd
这些工具通常提供简单的安装向导和配置界面,适合不想手动配置的用户。
注意事项
- 确保 Windows 防火墙允许 SSH 端口(默认是 22)通过。
- 在使用 SSH 进行远程连接时,确保有相应的用户凭据。
在 Windows 8 上开启 SSH 服务的过程与 Windows 7 类似,因为系统本身不自带 SSH 服务器。你可以使用第三方软件来实现。以下是几种常见的方法:
方法 1:使用 OpenSSH for Windows
-
下载 OpenSSH:
- 访问 GitHub 上的 OpenSSH for Windows 页面,下载最新的发行版(.zip 文件)。
-
解压缩并安装:
- 解压下载的文件,将内容复制到
C:\Program Files\OpenSSH(或其他位置)。
- 解压下载的文件,将内容复制到
-
安装 OpenSSH 服务:
- 以管理员身份打开命令提示符。
- 运行以下命令来安装 SSH 服务:
bashCopy Code
cd "C:\Program Files\OpenSSH" install-sshd
-
启动 SSH 服务:
- 运行以下命令启动 SSH 服务:
bashCopy Code
net start sshd
- 运行以下命令启动 SSH 服务:
-
设置开机自启:
- 运行以下命令使 SSH 服务在启动时自动运行:
bashCopy Code
sc config sshd start=auto
- 运行以下命令使 SSH 服务在启动时自动运行:
方法 2:使用 Cygwin
-
下载并安装 Cygwin:
- 访问 Cygwin 官网 下载并安装 Cygwin。
-
选择 OpenSSH 包:
- 在安装过程中,选择 OpenSSH 包进行安装。
-
配置 SSH 服务:
- 安装完成后,打开 Cygwin 终端,运行以下命令生成 SSH 密钥对:
bashCopy Code
ssh-keygen -t rsa -b 2048
- 安装完成后,打开 Cygwin 终端,运行以下命令生成 SSH 密钥对:
-
启动 SSH 服务:
- 运行以下命令启动 SSH 服务:
bashCopy Code
/usr/bin/sshd
- 运行以下命令启动 SSH 服务:
方法 3:使用其他第三方软件
你还可以考虑使用一些第三方 SSH 服务器软件,例如:
- Bitvise SSH Server
- FreeSSHd
这些工具通常提供用户友好的安装和配置界面,适合不想手动配置的用户。
注意事项
- 确保 Windows 防火墙允许 SSH 端口(默认是 22)通过。
- 在使用 SSH 进行远程连接时,确保有相应的用户凭据。
在 Windows 10 上,你可以通过内置的 OpenSSH 服务器功能来启用 SSH 服务,或者使用第三方软件。以下是使用内置功能的步骤:
方法 1:使用内置 OpenSSH 服务器
-
检查是否安装 OpenSSH 服务器:
- 打开“设置” > “应用” > “可选功能”。
- 滚动查找“OpenSSH 服务器”,如果没有,点击“添加功能”,搜索并安装它。
-
启动 OpenSSH 服务器:
- 按
Win + R,输入services.msc,然后按回车。 - 在服务列表中找到“OpenSSH SSH Server”。
- 右键点击它,选择“启动”。
- 按
-
设置开机自启:
- 右键点击“OpenSSH SSH Server”,选择“属性”。
- 在“启动类型”中选择“自动”,然后点击“应用”并“确定”。
-
检查防火墙设置:
- 确保 Windows 防火墙允许端口 22(SSH 的默认端口)通过。
- 你可以在控制面板的“系统和安全” > “Windows 防火墙” > “高级设置”中添加规则。
方法 2:使用第三方软件
如果你更喜欢使用第三方软件,可以考虑以下选项:
- Bitvise SSH Server
- FreeSSHd
这些软件通常提供简单的安装和配置向导。
使用 SSH 连接
一旦 SSH 服务启动,你可以使用 SSH 客户端(如 PuTTY 或 Windows 内置的 SSH 客户端)进行远程连接:
ssh username@hostname
替换 username 和 hostname 为你的用户名和计算机名称或 IP 地址。
在 Windows 11 上开启 SSH 服务的步骤与 Windows 10 类似,因为 Windows 11 同样内置了 OpenSSH 服务器功能。以下是具体步骤:
方法 1:使用内置 OpenSSH 服务器
-
检查是否安装 OpenSSH 服务器:
- 打开“设置”应用,选择“应用” > “可选功能”。
- 滚动查找“OpenSSH 服务器”。如果没有安装,点击“添加功能”,在列表中找到并安装它。
-
启动 OpenSSH 服务器:
- 按
Win + R,输入services.msc,然后按回车。 - 在服务列表中找到“OpenSSH SSH Server”。
- 右键点击它,选择“启动”。
- 按
-
设置开机自启:
- 右键点击“OpenSSH SSH Server”,选择“属性”。
- 在“启动类型”中选择“自动”,然后点击“应用”并“确定”。
-
检查防火墙设置:
- 确保 Windows 防火墙允许端口 22(SSH 的默认端口)通过。
- 你可以在“控制面板” > “系统和安全” > “Windows 防火墙” > “高级设置”中添加入站规则。
方法 2:使用第三方软件
如果你更喜欢使用第三方 SSH 服务器软件,可以考虑以下选项:
- Bitvise SSH Server
- FreeSSHd
这些工具通常提供用户友好的安装和配置界面。
使用 SSH 连接
一旦 SSH 服务启动,你可以使用 SSH 客户端(如 Windows 内置的 SSH 客户端或 PuTTY)进行远程连接:
ssh username@hostname
替换 username 和 hostname 为你的用户名和计算机名称或 IP 地址。

浙公网安备 33010602011771号