Skip to content

Chọn giao thức ​

Trả lời ngắn gọn: thường thì bạn không cần chọn. Giá trị mặc định protocol: 'auto' sẽ yêu cầu SFTP từ máy chủ và chuyển sang SCP khi máy chủ không có. client.protocol cho bạn biết giao thức nào đã được chọn.

protocol: 'auto' sẽ dùngSFTP
client.fscó sẵn
Sao chép thư mụcnhiều tệp song song

Trường hợp phổ biến nhất, không cần cấu hình gì.

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

'auto' quyết định thế nào ​

Bước dò SFTP tốn một round trip ngay sau khi đăng nhập. SCP chỉ được thử khi bạn thực sự truyền tệp, vì mỗi thao tác SCP đều chạy chương trình scp trên máy chủ.

Mỗi giao thức cho bạn những gì ​

SFTPSCP
upload(), download()cócó
writeFile(), readFile()cócó (stream không có size sẽ được đọc hết vào bộ nhớ)
client.fs (list, stat, mkdir, rm, rename)cókhông, là undefined
Sao chép song song nhiều tệp trong thư mụccó, qua concurrencykhông, từng tệp một
total trong tiến độ tải xuốngcókhông
Chạy trên Dropbear, OpenWrt, thiết bị mạngchỉ khi có cài SFTP servercó
Chạy trên máy chủ chỉ cho SFTP (ForceCommand internal-sftp)cókhông

Lỗi dùng cùng một bộ mã trên cả hai giao thức, nên ERR_NOT_FOUND luôn nghĩa là "không tìm thấy" dù giao thức nào đang chạy.

Ép dùng một giao thức ​

ts
// Cần client.fs hoặc sao chép song song nhiều tệp: báo lỗi sớm nếu thiếu SFTP.
await connect({ ...options, protocol: 'sftp' });

// Thiết bị bạn biết chắc không có SFTP: bỏ qua bước dò.
await connect({ ...options, protocol: 'scp' });

Khi scp không nằm trong PATH của máy chủ, hãy chỉ đường dẫn tới nó bằng scpCommand: '/usr/bin/scp'.

Muốn tìm hiểu sâu hơn? ​

SCP hay SFTP vào năm 2026? giải thích cách hai giao thức hoạt động, OpenSSH 9 đã thay đổi những gì và mỗi giao thức vẫn mạnh hơn ở đâu.

Phát hành theo giấy phép MIT.