Skip to content

与同类库对比 ​

Node.js 有不少优秀的 SSH 文件传输库。本页尽量客观地说明每个库在什么情况下是更好的选择。数据核对于 2026 年 9 月。

node-scp 1.xssh2-sftp-client 12.xnode-ssh 13.xscp2 0.5
每周下载量约 2.5 万约 310 万约 45 万约 1.3 万
最近发布2026202620252016,已停止维护
SFTP支持支持支持支持
SCP 协议(没有 SFTP 的服务器)支持不支持不支持不支持,尽管名字叫 scp2
自动选择 SFTP / SCP支持不支持不支持不支持
执行远程命令通过 client.ssh不支持支持,是主要功能不支持
远程文件操作常用操作在 client.fs 中,其余通过 client.sftpAPI 最丰富少量只有 mkdir
并行传输目录支持支持支持不支持
进度、过滤器、AbortSignal三者都有进度和过滤器按文件的进度、过滤器只有事件
与协议无关的错误码支持部分支持不支持不支持
TypeScript 类型自带单独的 @types 包自带无
ES 模块与 CommonJS两者都支持CommonJSCommonJSCommonJS
命令行与 GitHub Action支持不支持不支持不支持

以下情况选 ssh2-sftp-client ​

  • 你只和支持 SFTP 的普通服务器打交道;
  • 你需要它覆盖面很广的 SFTP 功能(远程文件流、rcopy、追加写入、扩展的 stat 处理),并看重它多年的生产环境使用经验;
  • 你想要使用最广泛的选择。

以下情况选 node-ssh ​

  • 执行命令是主要工作,复制文件只是附带任务;
  • 你希望用一个对象完成 execCommand、putFiles 和 getDirectory。

以下情况选 node-scp ​

  • 你的部分目标是路由器、嵌入式设备、网络设备或精简系统,上面没有 SFTP;
  • 你要复制大量小文件,并且在意速度(见下文);
  • 你想要与协议无关的错误码、取消功能和整个目录树的进度;
  • 你希望同一个工具既能作为库,也能作为命令行和 GitHub Action 使用;
  • 你正在使用 scp2,需要一个有人维护的替代品。

关于基准测试数据 ​

在大量小文件的场景下,node-scp 领先很多:

10 个目录中的 200 个 4 KiB 文件 (越低越好)
node-scp (SFTP)
52 ms
node-scp (SCP)
67 ms
node-ssh
484 ms
ssh2-sftp-client
534 ms
单个 16 MiB 文件 (越低越好)
node-scp (SCP)
53 ms
node-scp (SFTP)
57 ms
ssh2-sftp-client
94 ms
node-ssh
104 ms

领先的主要原因是一项设置:node-scp 为 SSH socket 开启了 TCP_NODELAY,而其他库保留了 Nagle 算法。在其他库中,对底层 ssh2 客户端调用 setNoDelay(true),也能获得大部分同样的提升。对于单个大文件,各个库的表现很接近,因为它们在 SFTP 下都使用 ssh2 的流水线式 fastPut / fastGet。

基准测试位于 bench/transfer.bench.ts。在针对你自己的环境下结论之前,请设置 NODE_SCP_BENCH_HOST、NODE_SCP_BENCH_PORT、NODE_SCP_BENCH_USER 和 NODE_SCP_BENCH_PASSWORD,在你自己的服务器上运行它们。

基于 MIT 许可证发布。