.NET SSH 库对比测试报告:FxSsh vs Microsoft Dev Tunnels SSH

测试目标:使用 OpenSSH 客户端 对两个 .NET SSH 服务端库 FxSsh (commit 3f7eb6)Dev Tunnels SSH (Microsoft.DevTunnels.Ssh 3.12.40)能力、传输速度、内存占用 进行全面测试,覆盖各自每一种可用的密码算法

FxSsh

Dev Tunnels SSH Library


0. 摘要

维度 结论
密码算法广度 两库都只支持 3 种密码 ,且都不支持 chacha20-poly13053des-cbcaes*-cbc(除 DevTunnels 的 aes256-cbc)、arcfour 等。FxSsh 独有 aes128-gcm;DevTunnels 独有 aes256-cbc
密钥交换 FxSsh 更广(6 种,含 group18-sha512ecdsa-nistp521);DevTunnels 仅 4 种,缺 group18nistp521
主机密钥 FxSsh 支持 5 种(含 ecdsa-nistp521);DevTunnels 仅 4 种,缺 nistp521,且两者都不支持 ssh-ed25519 / ssh-rsa(SHA1)。
速度 FxSsh 整体更快 。同档 CTR:FxSsh 161 MB/s vs DevTunnels 56 MB/s(≈2.9×);同档 GCM:FxSsh 311 MB/s vs DevTunnels 243 MB/s(≈1.3×)。DevTunnels 的 CTR 模式是明显短板(~57 MB/s)。
内存 FxSsh 更精简:基线 67 MB、峰值 ~93 MB;DevTunnels 基线 83 MB、峰值 ~99 MB(多约 15 MB 基线、5--8 MB 峰值)。

1. 测试对象

版本 / 提交 定位 类型
aimeast/FxSsh commit 3f7eb6 高层 SSH 服务端库(含 sftp/exec/shell/tcp-forward) 服务端库
Microsoft Dev Tunnels SSH NuGet Microsoft.DevTunnels.Ssh 3.12.40 底层 SSH 协议库(无 SshServer 类、无内置 SFTP) 协议库

DevTunnels.Ssh 是底层协议库,不提供现成的 SSH 服务器或 SFTP 服务。为实现公平对比,两个库都采用 exec 通道bash -c '...')承载数据传输,绕开 DevTunnels 缺失的 SFTP。


2. 测试环境

操作系统 Linux 6.6.117 (x86_64)
CPU AMD EPYC 9754 128-Core(可见 32 vCPU)
内存 126 GB
.NET 10.0.302 (SDK + Runtime)
OpenSSH 客户端 OpenSSH_9.6p1, OpenSSL 3.0.13
网络 本地回环 127.0.0.1(排除网络带宽干扰,瓶颈落在 .NET 服务端加密速度)
服务端端口 FxSsh → 2222;DevTunnels → 2223
认证 none(两库均开启 none 认证,仅用于基准测试)

3. 测试方法与公平性说明

  1. 能力探测 :对 OpenSSH 客户端的 ssh -Q cipher/kex/mac/key 每一项算法,分别用 -c/-o KexAlgorithms=/-o MACs=/-o HostKeyAlgorithms= 强制指定该算法发起真实握手。握手成功即记为该库支持该算法(即"客户端 ∩ 服务端"可协商集合,也就是真实可用能力)。
  2. 传输速度 :每条连接执行 ssh host 'head -c 200000000 /dev/zero'(200 MB 纯 CPU 负载,避免磁盘 I/O 干扰),用 date +%s.%N 计时;下载方向由服务端加密 ,因此吞吐量反映 .NET 服务端库该密码算法的加密性能。每算法 预热 1 次 + 实测 5 次,取中位数为主、均值/极值辅助。
  3. 内存占用 :在传输进行期间轮询服务端进程 /proc/<pid>/statusVmRSS(当前常驻)并取峰值;另记录 VmHWM(进程生命周期峰值)与连接前基线 VmRSS
  4. 完整性校验:每次传输后比对接收字节数(均为 200 000 000 字节),确认 exec 通道二进制安全。
  5. 传输载体统一 :两库均使用 exec(cat/head),保证对比基准一致。

4. 能力对比(基于 OpenSSH 真实握手)

4.1 密码算法(Encryption / Cipher)

算法 FxSsh DevTunnels 说明
aes256-ctr 两者共有
aes256-gcm@openssh.com 两者共有(AEAD)
aes128-gcm@openssh.com FxSsh 独有
aes256-cbc DevTunnels 独有
aes128-ctr / aes192-ctr 两者均未提供
aes128-cbc / aes192-cbc / 3des-cbc 不支持
chacha20-poly1305@openssh.com 两者均无 ChaCha20 实现

两库默认均只注册 3 种密码 。FxSsh 源码静态注册表为 {aes256-ctr, aes128-gcm, aes256-gcm};DevTunnels 默认配置为 {aes256-ctr, aes256-cbc, aes256-gcm}(且其 EncryptionAlgorithm 仅按 256 位密钥注册,未暴露 128/192 位变体)。

4.2 密钥交换(KEX,固定 aes256-ctr

算法 FxSsh DevTunnels
ecdh-sha2-nistp256
ecdh-sha2-nistp384
ecdh-sha2-nistp521
diffie-hellman-group14-sha256
diffie-hellman-group16-sha512
diffie-hellman-group18-sha512
curve25519-sha256 / @libssh.org
diffie-hellman-group*-sha1 / -exchange-*
sntrup761x25519-sha512@openssh.com

FxSsh 的 KEX 覆盖面更广 (6 种 vs 4 种),尤其包含更现代的 group18-sha512ecdsa-nistp521

4.3 MAC(固定 aes256-ctr;AEAD 密码下 MAC 不生效)

算法 FxSsh DevTunnels
hmac-sha2-256
hmac-sha2-512
hmac-sha2-256-etm@openssh.com
hmac-sha2-512-etm@openssh.com
其余(sha1 / md5 / umac / etm 变体)

两者 MAC 支持完全一致(仅 SHA-2 系列)。

4.4 主机密钥算法

算法 FxSsh DevTunnels
rsa-sha2-256
rsa-sha2-512
ecdsa-sha2-nistp256
ecdsa-sha2-nistp384
ecdsa-sha2-nistp521
ssh-ed25519 / ssh-rsa(SHA1)

FxSsh 比 DevTunnels 多支持 ecdsa-nistp521 主机密钥;两者都不支持 ssh-ed25519(现代首选)与 ssh-rsa(SHA1)。

4.5 压缩

算法 FxSsh DevTunnels
none(无压缩) ✅(隐式)
zlib@openssh.com / zlib

两者均不支持 zlib 压缩 。FxSsh 压缩表仅注册 none;DevTunnels 压缩算法列表为空(仅隐式 none)。


5. 传输速度(每种密码算法,200 MB,5 次实测,单位 MB/s)

密码算法 中位数 均值 最小 最大
FxSsh aes256-ctr 161.5 188.0 143.1 302.5
FxSsh aes128-gcm@openssh.com 285.8 259.8 204.7 297.1
FxSsh aes256-gcm@openssh.com 310.8 278.2 133.7 369.9
DevTunnels aes256-ctr 56.0 56.4 53.2 60.9
DevTunnels aes256-cbc 179.3 177.0 162.1 183.2
DevTunnels aes256-gcm@openssh.com 243.4 229.2 155.3 267.4

关键观察:

  • FxSsh 在两个共有算法上均更快 :CTR 161 vs 56(≈2.9×),GCM 311 vs 243(≈1.3×)。
  • DevTunnels 的 CTR 模式严重偏慢(~57 MB/s) ,仅为自身 GCM 的 1/4、CBC 的 1/3。这是该库 CtrModeCryptoTransform 实现的特征性短板。
  • FxSsh 的最快算法是 aes256-gcm(311 MB/s);DevTunnels 的最快也是 aes256-gcm(243 MB/s)------GCM(AEAD) 是两者的最高性能路径
  • 少数运行出现较大抖动(如 FxSsh gcm 偶发 133 MB/s、ctr 偶发 143 MB/s),源于共享沙箱的 GC/调度波动;中位数已能稳定反映趋势。

6. 内存占用(服务端进程 RSS,单位 KB / 约 MB)

密码算法 峰值 RSS 区间 均值峰值 备注
FxSsh aes256-ctr 74 804 -- 87 052 83 886 基线 67 320
FxSsh aes128-gcm@openssh.com 88 776 -- 93 088 91 353 基线 67 320
FxSsh aes256-gcm@openssh.com 89 812 -- 93 512 92 026 生命周期峰值 VmHWM 90 000
DevTunnels aes256-ctr 86 528 -- 91 304 88 814 基线 82 568
DevTunnels aes256-cbc 94 320 -- 94 620 94 469 基线 82 568
DevTunnels aes256-gcm@openssh.com 98 152 -- 98 592 98 447 生命周期峰值 VmHWM 98 592

换算为 MB(÷1024):

基线 RSS GCM 峰值 CTR 峰值
FxSsh 67.3 MB ~93.5 MB ~87.1 MB
DevTunnels 82.6 MB ~98.6 MB ~91.3 MB

关键观察:

  • FxSsh 内存占用显著更低:基线少约 15 MB,峰值少约 5--8 MB。
  • 两库均呈现 GCM(AEAD) > CTR/CBC 的内存占用(AEAD 需额外 tag/nonce 缓冲),符合预期。
  • 单连接传输期间额外内存增量很小(几 MB),说明密码算法本身对常驻内存影响有限,库运行时基线才是主要差异来源

7. 综合结论

  1. 算法覆盖面 :FxSsh(较老但功能更全)在 KEX/主机密钥上反而更广 ;DevTunnels(微软官方、偏保守默认配置)仅 aes256 系列、缺 nistp521/group18、无 ssh-ed25519两者密码算法都很少(各 3 种),且都缺 ChaCha20 这一现代主流算法。
  2. 性能FxSsh 综合性能更优 ,尤其 CTR 模式下约为 DevTunnels 的 3 倍。DevTunnels 的 CTR 实现是明显瓶颈 ,若选用 DevTunnels 应优先使用 aes256-gcm
  3. 资源占用FxSsh 更轻量(内存少 ~15--20%)。DevTunnels 作为通用隧道协议库,运行时开销更大。
  4. 工程可用性 :DevTunnels.Ssh 是底层协议库,无现成 SSH 服务器/ SFTP ,需自行用 SshServerSession + 手动 TCP 接入 + 通道事件处理搭建服务端(本报告即如此实现);FxSsh 提供开箱即用的 SshServerSftpService。若需快速搭建 SSH 服务端,FxSsh 更省事;若已在使用 Dev Tunnels 隧道生态,则 DevTunnels.Ssh 可复用其协议栈(但需自行补齐服务端能力)。
  5. 安全建议 :两库都支持 AEAD(aes*-gcm),生产环境应优先选用 GCM 算法以获得加密+完整性一体化与最佳性能。

8. 附录:复现步骤与产物

8.1 服务端程序

  • FxSsh 基准服务端:/root/.codebuddy/artifact/sshbench/fxssh-bench/Program.cs(已构建为 FxSshBench.dll
  • DevTunnels 基准服务端:/root/.codebuddy/artifact/sshbench/dt-bench/Program.cs(已构建为 DtBench.dll
    • 关键实现:用 SshServerSession + TcpListener + none 认证 + ChannelOpening 中挂载 ch.Request 处理 exec;因库未把 exec 反序列化为 CommandRequestMessage,命令字符串改由 SshMessage.RawBytes 按 SSH 线格式手动解析。

8.2 测试脚本与原始数据

  • 能力枚举:/root/.codebuddy/artifact/sshbench/enum.sh/tmp/enum_fxssh.txt/tmp/enum_dt.txt
  • 速度/内存基准:/root/.codebuddy/artifact/sshbench/bench.sh/tmp/bench_results.csv
  • 服务端日志:/tmp/fxssh.log/tmp/dt.log

8.3 运行命令示例

bash 复制代码
# FxSsh 服务端
dotnet /root/.codebuddy/artifact/sshbench/fxssh-bench/bin/Release/net10.0/FxSshBench.dll 2222
# DevTunnels 服务端
dotnet /root/.codebuddy/artifact/sshbench/dt-bench/bin/Release/net10.0/DtBench.dll 2223
# 单密码握手探测(能力)
ssh -p 2222 -c aes256-ctr -o PreferredAuthentications=none -o StrictHostKeyChecking=no \
    -o UserKnownHostsFile=/dev/null -o BatchMode=yes 127.0.0.1 'true'
# 速度/内存传输
ssh -p 2223 -c aes256-gcm@openssh.com -o PreferredAuthentications=none -o StrictHostKeyChecking=no \
    -o UserKnownHostsFile=/dev/null -o BatchMode=yes 127.0.0.1 'head -c 200000000 /dev/zero' >/dev/null

注:本报告所有"支持/不支持"结论均来自 OpenSSH 客户端与对应服务端的实际握手结果,而非仅凭文档或源码推断。


9. 署名

  • 测试执行:workbuddy 自主测试
  • 使用智能体:hy3 智能体
  • 生成时间:2026-08-03