Skip to content

什么是 node-scp? ​

node-scp 用于在 Node.js 程序和任何能通过 SSH 访问的机器之间复制文件。它建立一条 SSH 连接,服务器支持 SFTP 时用 SFTP 传输,不支持时用经典的 SCP 协议。无论哪种情况,你的代码都不用改。

为什么还要再做一个 SSH 文件库? ​

大多数 Node.js 库只支持 SFTP。对普通的 Linux 服务器来说这没问题,但很多机器根本没有 SFTP 服务器:运行 Dropbear 的 OpenWrt 和其他嵌入式 Linux 设备、网络设备、精简镜像。在这些机器上,SFTP 库会报错 Unable to start subsystem: sftp。node-scp 同时实现了 SCP 协议,所以依然可以工作。

除此之外,那些原本需要你自己实现的功能也都已经具备:递归复制、整个目录树的进度、过滤器、用 AbortSignal 取消、在两种协议下含义一致的类型化错误,以及命令行工具和 GitHub Action。

从哪里开始 ​

我想要……使用阅读
在 Node.js 程序中复制文件connect() 和客户端方法快速开始
复制一次就结束upload() / download() 辅助函数单次调用的辅助函数
在终端或脚本中复制npx node-scp命令行
在 CI 中部署maitrungduc1410/node-scp-async@v1GitHub Action
保留为 node-scp 0.x 编写的代码node-scp/legacy从 node-scp 0.x 升级
替换 scp2 包node-scp/scp2从 scp2 迁移

它不适合做什么 ​

node-scp 专注于传输文件。如果你的主要工作是执行远程命令,或者需要用到 SFTP 协议的方方面面,其他库可能更合适,对比页面会告诉你该选哪个。你仍然可以通过 client.ssh 执行命令,它就是底层的 ssh2 客户端。

环境要求 ​

  • 推荐 Node.js 22 或更高版本。Node 20 仍可使用,但已经停止维护。
  • 任意 SSH 服务器。SFTP 需要服务器提供 SFTP 子系统,SCP 需要服务器上有 scp 程序。几乎所有服务器都至少具备其中之一。

基于 MIT 许可证发布。