Cách dùng SFTP để sync file một cách an toàn với Máy Chủ từ xa

SFTP sync file

SFTP, viết tắt của Secure File Transfer Protocol, là một giao thức riêng biệt được tích hợp sẵn trong SSH, có khả năng thực hiện các lệnh FTP qua kết nối an toàn. Thông thường, SFTP có thể thay thế trực tiếp cho FTP trong bất kỳ ngữ cảnh nào vẫn cần máy chủ FTP.

FTP, hay Giao Thức Truyền File, là một phương pháp phổ biến nhưng không mã hóa để chuyển file giữa hai hệ thống từ xa. Tính đến năm 2024, do thiếu tính bảo mật, hầu hết các phần mềm hiện đại đã không còn ưa chuộng FTP nữa và chỉ sử dụng trong một số ứng dụng cũ.

Trong hầu hết các trường hợp, SFTP được ưu tiên hơn FTP nhờ vào các tính năng bảo mật bên trong và khả năng “mượn” kết nối SSH. FTP là một giao thức không an toàn và chỉ nên được sử dụng trong những trường hợp hạn chế hoặc trong các mạng mà bạn tin tưởng.

Mặc dù SFTP được tích hợp vào nhiều công cụ đồ họa, hướng dẫn này sẽ trình bày cách sử dụng nó qua giao diện dòng lệnh tương tác.

Cách Kết Nối với SFTP

Mặc định, SFTP sử dụng giao thức SSH để xác thực và thiết lập kết nối an toàn. Vì vậy, các phương pháp xác thực có sẵn với SSH cũng có thể áp dụng cho SFTP.
Mặc dù bạn có thể sử dụng mật khẩu để xác thực theo mặc định, chúng tôi khuyến nghị tạo SSH keys và chuyển Public Key của bạn tới bất kỳ hệ thống nào cần truy cập. Điều này an toàn hơn rất nhiều và có thể tiết kiệm thời gian về lâu dài.

Vui lòng tham khảo hướng dẫn cài đặt SSH keys để truy cập máy chủ nếu bạn chưa thực hiện điều đó.

Nếu bạn có thể kết nối với máy chủ bằng SSH, nghĩa là bạn đã đáp ứng đầy đủ các yêu cầu cần thiết để sử dụng SFTP quản lý file. Hãy kiểm tra kết nối SSH với lệnh sau:

ssh sammy@your_server_ip_or_remote_hostname

Nếu lệnh trên hoạt động, thoát khỏi phiên bằng cách gõ:

exit

Bây giờ, chúng ta có thể thiết lập phiên SFTP bằng cách nhập lệnh sau:

sftp sammy@your_server_ip_or_remote_hostname

Bạn sẽ được kết nối tới hệ thống từ xa và dấu nhắc lệnh sẽ chuyển thành dấu nhắc của SFTP.

Nếu bạn đang sử dụng một cổng SSH tùy chỉnh (không phải cổng mặc định 22), bạn có thể mở phiên SFTP như sau:

sftp -oPort=custom_port sammy@your_server_ip_or_remote_hostname

Lệnh này sẽ kết nối bạn tới hệ thống từ xa qua cổng đã chỉ định.

Secure File Transfers

Nhận Trợ Giúp Trong SFTP

Lệnh trợ giúp (help) là lệnh hữu ích nhất để bạn học đầu tiên. Nó cung cấp cho bạn bản tóm tắt các lệnh SFTP khác. Bạn có thể gọi lệnh trợ giúp bằng cách gõ một trong các lệnh sau tại dấu nhắc:

help

hoặc

?

Lệnh này sẽ hiển thị danh sách các lệnh có sẵn:

Output

Available commands:
bye                                Quit sftp
cd path                            Change remote directory to 'path'
chgrp grp path                     Change group of file 'path' to 'grp'
chmod mode path                    Change permissions of file 'path' to 'mode'
chown own path                     Change owner of file 'path' to 'own'
df [-hi] [path]                    Display statistics for current directory or
                                   filesystem containing 'path'
exit                               Quit sftp
get [-Ppr] remote [local]          Download file
help                               Display this help text
lcd path                           Change local directory to 'path'

Chúng ta sẽ khám phá một số lệnh trong các phần sau.

Điều Hướng với SFTP

Chúng ta có thể điều hướng qua hệ thống tập tin của máy chủ từ xa bằng một số lệnh hoạt động tương tự như trong shell.

Đầu tiên, hãy xác định xem hiện tại bạn đang ở thư mục nào trên hệ thống từ xa. Giống như trong phiên shell thông thường, bạn có thể gõ lệnh sau để lấy thư mục hiện tại:

pwd

Output

Remote working directory: /home/demouser

Chúng ta có thể xem nội dung của thư mục hiện tại trên hệ thống từ xa bằng một lệnh quen thuộc khác:

ls

Output

Summary.txt     info.html       temp.txt        testDirectory

Lưu ý rằng các lệnh có trong giao diện SFTP không hoàn toàn giống với cú pháp shell và không đầy đủ tính năng như trong shell. Tuy nhiên, chúng vẫn hỗ trợ một số tham số quan trọng, ví dụ như thêm -la vào lệnh ls để xem thêm thông tin metadata và quyền truy cập file:

ls -la

Output

drwxr-xr-x    5 demouser   demouser       4096 Aug 13 15:11 .
drwxr-xr-x    3 root     root         4096 Aug 13 15:02 ..
-rw-------    1 demouser   demouser          5 Aug 13 15:04 .bash_history
-rw-r--r--    1 demouser   demouser        220 Aug 13 15:02 .bash_logout
-rw-r--r--    1 demouser   demouser       3486 Aug 13 15:02 .bashrc
drwx------    2 demouser   demouser       4096 Aug 13 15:04 .cache
-rw-r--r--    1 demouser   demouser        675 Aug 13 15:02 .profile
. . .

Để chuyển sang thư mục khác, chúng ta có thể dùng lệnh:

cd testDirectory

Bây giờ, chúng ta có thể duyệt qua hệ thống tập tin của máy chủ từ xa, nhưng nếu bạn cần truy cập hệ thống tập tin cục bộ thì sao? Bạn có thể chuyển hướng các lệnh sang hệ thống cục bộ bằng cách thêm chữ l ở đầu lệnh.

Tất cả các lệnh được thảo luận cho đến nay đều có phiên bản tương ứng cho hệ thống cục bộ. Chúng ta có thể in ra thư mục làm việc cục bộ bằng lệnh:

lpwd

Output

Local working directory: /Users/demouser

Chúng ta cũng có thể liệt kê nội dung của thư mục hiện tại trên máy cục bộ:

lls

Output

Desktop			local.txt		test.html
Documents		analysis.rtf		zebra.html

Và bạn cũng có thể thay đổi thư mục làm việc cục bộ bằng lệnh:

lcd Desktop

Chuyển File với SFTP

Tải File từ Máy Chủ Từ Xa

Nếu bạn muốn tải file từ máy chủ từ xa, hãy sử dụng lệnh get:

get remoteFile

Output

Fetching /home/demouser/remoteFile to remoteFile
/home/demouser/remoteFile                       100%   37KB  36.8KB/s   00:01

Như bạn thấy, theo mặc định lệnh get sẽ tải file từ xa về với cùng tên file trên hệ thống cục bộ.

Bạn có thể sao chép file từ xa về với tên file khác bằng cách chỉ định tên file sau lệnh:

get remoteFile localFile

Lệnh get cũng chấp nhận một số tham số. Ví dụ, để sao chép một thư mục và toàn bộ nội dung bên trong, bạn có thể sử dụng tham số đệ quy:

get -r someDirectory

Để yêu cầu SFTP bảo toàn các quyền và thời gian truy cập của file, sử dụng tham số -P hoặc -p:

get -Pr someDirectory

Tải File từ Máy Cục Bộ Lên Máy Chủ Từ Xa

Chuyển file lên máy chủ từ xa hoạt động tương tự nhưng sử dụng lệnh put:

put localFile

Output

Uploading localFile to /home/demouser/localFile
localFile                                     100% 7607     7.4KB/s   00:00

Các tham số tương tự như với lệnh get cũng áp dụng cho lệnh put. Vậy nên, để sao chép toàn bộ thư mục cục bộ, bạn có thể dùng lệnh:

put -r localDirectory

Một công cụ hữu ích khi tải xuống và tải lên file là lệnh df, hoạt động tương tự như phiên bản dòng lệnh. Bằng lệnh này, bạn có thể kiểm tra xem có đủ dung lượng để hoàn thành việc chuyển file hay không:

df -h

Output

Size     Used    Avail   (root)    %Capacity
 19.9GB   1016MB   17.9GB   18.9GB           4%

Lưu ý, lệnh này không có phiên bản cục bộ, nhưng chúng ta có thể khắc phục điều đó bằng cách sử dụng lệnh !.

Lệnh ! cho phép bạn thoát ra một shell cục bộ, nơi bạn có thể chạy bất kỳ lệnh nào có sẵn trên máy cục bộ của mình. Ví dụ, để kiểm tra dung lượng ổ đĩa, gõ:

!

sau đó:

df -h

Output

Filesystem      Size   Used  Avail Capacity  Mounted on
/dev/disk0s2   595Gi   52Gi  544Gi     9%    /
devfs          181Ki  181Ki    0Bi   100%    /dev
map -hosts       0Bi    0Bi    0Bi   100%    /net
map auto_home    0Bi    0Bi    0Bi   100%    /home

Bất kỳ lệnh cục bộ nào khác cũng hoạt động như mong đợi. Để quay trở lại phiên SFTP, gõ:

exit

Bạn sẽ thấy dấu nhắc SFTP trở lại.

SFTP sync file

Các Tác Vụ Quản Lý File Đơn Giản với SFTP

SFTP cho phép bạn thực hiện một số thao tác quản lý hệ thống tập tin. Ví dụ, bạn có thể thay đổi chủ sở hữu của một file trên hệ thống từ xa bằng lệnh:

chown userID file

Lưu ý rằng, khác với lệnh chmod của hệ thống, lệnh SFTP này không chấp nhận tên người dùng mà thay vào đó dùng UID. Rất tiếc, không có cách tích hợp sẵn để biết UID phù hợp ngay trong giao diện SFTP.

Như một cách khắc phục, bạn có thể đọc file /etc/passwd – file này liên kết tên người dùng với UID trong hầu hết các hệ thống Linux:

Sau đó, chạy lệnh sau trong shell cục bộ:

get /etc/passwd
!less passwd

Output

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh

Lưu ý rằng, thay vì chỉ gõ lệnh ! một mình, chúng ta đã dùng nó làm tiền tố cho lệnh shell cục bộ. Lệnh này cho phép chạy bất kỳ lệnh nào có trên máy cục bộ và cũng có thể được sử dụng với lệnh df cục bộ như đã nêu ở trên.

UID sẽ nằm ở cột thứ ba của file, được phân tách bởi dấu hai chấm.

Tương tự, chúng ta có thể thay đổi nhóm sở hữu của file với lệnh:

chgrp groupID file

Lại một lần nữa, không có cách tích hợp sẵn để liệt kê các nhóm của hệ thống từ xa, chúng ta có thể khắc phục điều đó bằng lệnh sau:

get /etc/group
!less group

Sau đó, dùng lệnh:

Output

root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:
. . .

Cột thứ ba chứa ID của nhóm tương ứng với tên ở cột đầu tiên, đó chính là thông tin chúng ta cần.

Lệnh chmod trong SFTP hoạt động như bình thường trên hệ thống tập tin từ xa:

chmod 777 publicFile

Output

Changing mode on /home/demouser/publicFile

Không có lệnh tương đương để thao tác quyền của file cục bộ, nhưng bạn có thể đặt umask cục bộ để các file được sao chép về có quyền phù hợp.

Điều này có thể được thực hiện bằng lệnh lumask:

lumask 022

Output

Local umask: 022

Giờ đây, tất cả các file thông thường được tải về (miễn là không sử dụng tham số -p) sẽ có quyền 644.

SFTP cũng cho phép bạn tạo thư mục trên cả hệ thống cục bộ và từ xa bằng lệnh lmkdir và mkdir tương ứng.

Các lệnh file còn lại chỉ nhắm vào hệ thống tập tin từ xa:

ln
rm
rmdir

Những lệnh này tái hiện hành vi cơ bản của các lệnh shell tương đương. Nếu bạn cần thực hiện những thao tác này trên hệ thống cục bộ, hãy nhớ rằng bạn có thể thoát ra shell bằng cách gõ:

!

Hoặc chạy một lệnh cục bộ đơn lẻ bằng cách thêm dấu ! trước lệnh, ví dụ:

!chmod 644 somefile

Khi bạn hoàn tất phiên SFTP, hãy sử dụng lệnh exit hoặc bye để đóng kết nối.

bye

Kết Luận

Mặc dù cú pháp của SFTP không phong phú như các công cụ shell hiện đại, nhưng nó hữu ích trong việc duy trì sự tương thích với cú pháp FTP cũ hoặc trong việc hạn chế chặt chẽ các chức năng dành cho người dùng từ xa trong một số môi trường nhất định.

Ví dụ, bạn có thể sử dụng SFTP để cho phép những người dùng nhất định chuyển file mà không cần truy cập SSH. Để biết thêm thông tin về quy trình này, hãy xem hướng dẫn “Cách bật sftp không cần truy cập shell trên ubuntu 20.04.”

Nếu bạn đã quen sử dụng FTP hoặc SCP để chuyển file, SFTP là một cách tốt để kết hợp ưu điểm của cả hai giao thức. Dù không phù hợp cho mọi tình huống, SFTP là một công cụ linh hoạt mà bạn nên có trong kho công cụ của mình.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *