Bắt đầu
Trang này đưa bạn từ một dự án trống tới lần tải lên đầu tiên chỉ trong vài phút.
1. Cài đặt
sh
npm install node-scpsh
pnpm add node-scpsh
yarn add node-scpsh
bun add node-scpnode-scp có sẵn type cho TypeScript và dùng được với cả import lẫn require.
2. Kết nối và sao chép
ts
import { readFileSync } from 'node:fs';
import { connect } from 'node-scp';
const client = await connect({
host: 'example.com',
username: 'deploy',
privateKey: readFileSync('/home/me/.ssh/id_ed25519'),
});
try {
await client.upload('./dist', '/var/www/app', { recursive: true });
await client.download('/var/log/app.log', './logs/app.log');
console.log(`copied over ${client.protocol}`); // 'sftp' hoặc 'scp'
} finally {
await client.close();
}Đoạn code trên làm những việc sau:
connect()mở kết nối SSH, đăng nhập và chọn giữa SFTP và SCP.upload()sao chép thư mụcdisttrên máy bạn để/var/www/apptrở thành bản sao của nó. Cầnrecursive: trueđể sao chép thư mục, giốngscp -r.download()sao chép một tệp từ máy chủ về. Thư mục cục bộ còn thiếu (./logs) sẽ được tạo.close()đóng kết nối. Luôn đóng kết nối, nếu không process sẽ không thoát.
Để ngôn ngữ tự đóng kết nối giúp bạn
Với await using, kết nối được đóng ở cuối block, kể cả khi có lỗi xảy ra. Cú pháp này cần Node 24 trở lên, hoặc TypeScript 5.2 trở lên (TypeScript sẽ biên dịch nó cho các bản Node cũ hơn).
ts
await using client = await connect({ host, username, privateKey });
await client.upload('./dist', '/var/www/app', { recursive: true });
// kết nối được đóng tại đây3. Đăng nhập theo cách máy chủ yêu cầu
| Bạn có | Truyền vào connect() |
|---|---|
| Một tệp private key | privateKey: readFileSync(path) |
| Private key có passphrase | privateKey và passphrase |
| ssh-agent đang chạy | agent: process.env.SSH_AUTH_SOCK |
| Mật khẩu | password: process.env.SSH_PASSWORD |
Đừng để thông tin bí mật nằm trong code: hãy đọc chúng từ tệp, biến môi trường hoặc kho lưu trữ secret. Trang Kết nối trình bày cách đăng nhập keyboard interactive, đi qua jump host và kiểm tra host key.
4. Hoặc không cần viết code
Cùng engine đó chạy được ngay trong terminal:
sh
npx node-scp -r ./dist deploy@example.com:/var/www/appXem Dòng lệnh, hoặc GitHub Action nếu bạn dùng CI.
Đọc tiếp
- Tải lên và tải xuống: tệp sẽ nằm ở đâu, bộ lọc, quyền truy cập, sao chép song song.
- Tiến độ và hủy: thanh tiến độ và
AbortSignal, kèm demo trực tiếp. - Tệp trong bộ nhớ: ghi thẳng một chuỗi hoặc stream vào tệp trên máy chủ.
- Xử lý lỗi: mã lỗi ổn định để bạn rẽ nhánh xử lý.