Skip to content

node-scp通过 SSH 复制文件,适用于任何服务器

服务器有 SFTP 就用 SFTP,没有就用真正的 SCP 协议。一套小巧的 API,覆盖云主机、OpenWrt 路由器和网络设备。

SFTPSCP

三行代码复制一个目录 ​

ts
import { connect } from 'node-scp';

await using client = await connect({ host: 'example.com', username: 'deploy', privateKey });
await client.upload('./dist', '/var/www/app', { recursive: true });
ts
import { upload } from 'node-scp';

await upload('./dist', 'deploy@example.com:/var/www/app', { recursive: true, privateKey });
sh
npx node-scp -r ./dist deploy@example.com:/var/www/app
yaml
- uses: maitrungduc1410/node-scp-async@v1
  with:
    host: ${{ secrets.DEPLOY_HOST }}
    username: deploy
    private-key: ${{ secrets.DEPLOY_KEY }}
    source: dist/
    target: /var/www/app

适配你手上的各种服务器 ​

选择一种服务器,看看 node-scp 会如何处理。

protocol: 'auto' 会使用SFTP
client.fs可用
目录复制多个文件并行

最常见的情况,无需任何配置。

ts
await connect({ host: 'example.com', username: 'deploy', privateKey });

如何选择协议 ​

在关键场景下更快 ​

上传到同一台机器上的 OpenSSH,取多次运行的平均值。小文件场景下的差距主要来自 TCP_NODELAY,对比页面有详细解释。

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

基于 MIT 许可证发布。