Ngày đăng: 3 tháng 7 năm 2023
FTP, File Transfer Protocol (Giao thức truyền tệp), là một phương pháp truyền tệp phổ biến, không được mã hóa giữa hai hệ thống từ xa. Kể từ năm 2022, nó đã không còn được sử dụng bởi hầu hết các phần mềm hiện đại do thiếu tính bảo mật và hầu như chỉ có thể được sử dụng trong các ứng dụng cũ.
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 trong SSH có thể thực hiện các lệnh FTP qua kết nối an toàn. Thông thường, nó có thể hoạt động như một sự thay thế drop-in trong bất kỳ ngữ cảnh nào mà máy chủ FTP vẫn cần thiết.
Trong hầu hết các trường hợp, SFTP thích hợp hơn FTP vì các tính năng bảo mật cơ bản của nó và khả năng hỗ trợ trên kết nối SSH. FTP là một giao thức không an toàn chỉ nên được sử dụng trong một số trường hợp hạn chế hoặc trên 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ó thông qua giao diện dòng lệnh tương tác.
Theo 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. Do đó, các phương thức xác thực tương tự có sẵn trong SSH.
Mặc dù bạn có thể xác thực bằng mật khẩu theo mặc định nhưng chúng tôi khuyên bạn nên tạo khóa SSH và chuyển public key của mình sang bất kỳ hệ thống nào bạn cần truy cập. Điều này an toàn hơn nhiều và có thể giúp bạn tiết kiệm thời gian trong thời gian dài.
Vui lòng xem hướng dẫn này để thiết lập khóa SSH nhằm truy cập máy chủ của bạn nếu bạn chưa làm như vậy.
Nếu bạn có thể kết nối với máy bằng SSH, thì bạn đã hoàn thành tất cả các yêu cầu cần thiết để sử dụng SFTP để quản lý tệp. Kiểm tra quyền truy cập SSH bằng lệnh sau:
- ssh sammy@your_server_ip_or_remote_hostname
Nếu nó hoạt động, hãy thoát ra bằng cách gõ:
- exit
Bây giờ chúng ta có thể thiết lập phiên (session) SFTP bằng cách đưa ra lệnh sau:
- sftp sammy@your_server_ip_or_remote_hostname
Bạn sẽ kết nối hệ thống từ xa và prompt (lời nhắc) của bạn sẽ thay đổi thành SFTP prompt.
Nếu bạn đang làm việc trên cổng SSH tùy chỉnh (không phải cổng mặc định 22), thì bạn có thể mở phiên SFTP như sau:
- sftp -oPort=custom_port sammy@your_server_ip_or_remote_hostname
Điều này sẽ kết nối bạn với hệ thống từ xa bằng cổng được chỉ định của bạn.
Lệnh hữu ích nhất để tìm hiểu đầu tiên là lệnh trợ giúp. Điều này cho phép bạn truy cập vào bản tóm tắt các lệnh SFTP khác. Bạn có thể gọi nó bằng cách nhập một trong hai lệnh này vào prompt:
- help
hoặc
- ?
Điều này sẽ hiển thị một danh sách các lệnh có sẵn:
OutputAvailable 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 mà bạn thấy trong các phần sau.
Chúng ta có thể điều hướng qua hệ thống phân cấp tệp của hệ thống từ xa bằng cách sử dụng một số lệnh có chức năng tương tự như các shell counterpart của chúng.
Trước tiên, hãy tự định hướng bằng cách tìm xem chúng ta hiện đang ở thư mục nào trên hệ thống từ xa. Giống như trong một shell session điển hình, chúng ta có thể gõ lệnh sau để lấy thư mục hiện tại:
- pwd
OutputRemote working directory: /home/demouser
Chúng ta có thể xem nội dung của thư mục hiện tại của hệ thống từ xa bằng một lệnh quen thuộc khác:
- ls
OutputSummary.txt info.html temp.txt testDirectory
Lưu ý rằng các lệnh có sẵn trong giao diện SFTP không khớp 1:1 với cú pháp trình bao thông thường và không có nhiều tính năng. Tuy nhiên, chúng thực hiện một số cờ tùy chọn quan trọng hơn, chẳng hạn như thêm -la
vào ls
để xem thêm siêu dữ liệu (metadata) tệp và quyền:
- ls -la
Outputdrwxr-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
. . .
Để đến một thư mục khác, chúng ta có thể đưa ra lệnh này:
- cd testDirectory
Bây giờ chúng ta có thể duyệt qua hệ thống tệp từ xa, nhưng nếu chúng ta cần truy cập hệ thống tệp cục bộ thì sao? Chúng ta có thể hướng các lệnh tới hệ thống tệp cục bộ bằng cách đặt trước chúng một l
cho cục bộ.
Tất cả các lệnh được thảo luận cho đến nay đều có equivalents cục bộ. Chúng tôi có thể in thư mục làm việc cục bộ:
- lpwd
OutputLocal working directory: /Users/demouser
Chúng ta 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
OutputDesktop local.txt test.html
Documents analysis.rtf zebra.html
Chúng tôi cũng có thể thay đổi thư mục mà chúng tôi muốn tương tác trên hệ thống cục bộ:
- lcd Desktop
Nếu chúng tôi muốn tải xuống các tệp từ máy chủ từ xa của mình, chúng tôi có thể thực hiện việc đó bằng cách sử dụng lệnh get
:
- get remoteFile
OutputFetching /home/demouser/remoteFile to remoteFile
/home/demouser/remoteFile 100% 37KB 36.8KB/s 00:01
Như bạn có thể thấy, theo mặc định, lệnh get
tải một tệp từ xa xuống một tệp có cùng tên trên hệ thống tệp cục bộ.
Chúng tôi có thể sao chép tệp từ xa sang một tên khác bằng cách chỉ định tên sau đó:
- get remoteFile localFile
Lệnh get
cũng chấp nhận một số cờ tùy chọn. Chẳng hạn, chúng ta có thể sao chép một thư mục và tất cả nội dung của nó bằng cách chỉ định tùy chọn đệ quy:
- get -r someDirectory
Chúng ta có thể yêu cầu SFTP duy trì các quyền và thời gian truy cập thích hợp bằng cách sử dụng cờ -P
hoặc -p
:
- get -Pr someDirectory
Việc truyền tệp sang hệ thống từ xa cũng hoạt động theo cách tương tự, nhưng với lệnh put
:
- put localFile
OutputUploading localFile to /home/demouser/localFile
localFile 100% 7607 7.4KB/s 00:00
Các cờ tương tự hoạt động với get
áp dụng cho put
. Vì vậy, để sao chép toàn bộ thư mục cục bộ, bạn có thể chạy lệnh put -r
:
- put -r localDirectory
Một công cụ quen thuộc hữu ích khi tải xuống và tải tệp lên là lệnh df
, hoạt động tương tự như phiên bản dòng lệnh. Sử dụng điều này, bạn có thể kiểm tra xem bạn có đủ dung lượng để hoàn tất quá trình chuyển mà bạn quan tâm hay không:
- df -h
Output Size Used Avail (root) %Capacity
19.9GB 1016MB 17.9GB 18.9GB 4%
Xin lưu ý rằng không có biến thể cục bộ nào của lệnh này, nhưng chúng ta có thể giải quyết vấn đề đó bằng cách phát lệnh !
yêu cầu.
Các lệnh !
đưa chúng tôi vào một local shell, nơi chúng tôi có thể chạy bất kỳ lệnh nào có sẵn trên hệ thống cục bộ của mình. Chúng tôi có thể kiểm tra việc sử dụng disk bằng cách gõ:
- !
và sau đó
- df -h
OutputFilesystem 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 sẽ hoạt động như mong đợi. Để quay lại phiên SFTP của bạn, hãy nhập:
- exit
Bây giờ bạn sẽ thấy lời nhắc SFTP quay lại.
SFTP cho phép bạn thực hiện một số loại quản lý hệ thống tệp. Chẳng hạn, bạn có thể thay đổi chủ sở hữu của tệp trên hệ thống từ xa bằng:
- chown userID file
Lưu ý rằng, không giống như lệnh chmod
hệ thống, lệnh SFTP không chấp nhận tên người dùng mà thay vào đó sử dụng UID. Thật không may, không có cách tích hợp nào để biết UID thích hợp từ bên trong giao diện SFTP.
Như một giải pháp thay thế, bạn có thể đọc từ tệp /etc/passwd
, tệp liên kết tên người dùng với UID trong hầu hết các môi trường Linux:
- get /etc/passwd
- !less passwd
Outputroot: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 ý cách thay vì đưa lệnh !
, chúng tôi đã sử dụng nó làm tiền tố cho lệnh local shell. Điều này hoạt động để chạy bất kỳ lệnh nào có sẵn trên máy cục bộ của chúng tôi và có thể đã được sử dụng với lệnh df
cục bộ trước đó.
UID sẽ nằm trong cột thứ ba của tệp, được phân định bằng ký tự dấu hai chấm.
Tương tự, chúng ta có thể thay đổi chủ sở hữu nhóm của tệp bằng:
- chgrp groupID file
Một lần nữa, không có cách tích hợp nào để có được danh sách các nhóm của hệ thống từ xa. Chúng ta có thể giải quyết nó bằng lệnh sau:
- get /etc/group
- !less group
Outputroot: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 được liên kết với tên trong cột đầu tiên. Đây là những gì chúng tôi đang tìm kiếm.
Lệnh chmod
SFTP hoạt động như bình thường trên hệ thống tệp từ xa:
- chmod 777 publicFile
OutputChanging mode on /home/demouser/publicFile
Không có lệnh tương đương để thao tác các quyền của tệp cục bộ, nhưng bạn có thể đặt umask cục bộ để mọi tệp được sao chép vào hệ thống cục bộ sẽ có các quyền tương ứng.
Điều đó có thể được thực hiện với lệnh lumask
:
- lumask 022
OutputLocal umask: 022
Giờ đây, tất cả các tệp thông thường được tải xuống (miễn là không sử dụng cờ -p
) sẽ có 644 quyền.
SFTP cũng cho phép bạn tạo các thư mục trên cả hệ thống cục bộ và hệ thống từ xa với lmkdir
và mkdir
tương ứng.
Phần còn lại của các lệnh tệp chỉ nhắm mục tiêu hệ thống tệp từ xa:
- ln
- rm
- rmdir
Các lệnh này sao chép hành vi cốt lõi của các shell equivalent của chúng. Nếu bạn cần thực hiện những hành động này trên hệ thống tệp cục bộ, hãy nhớ rằng bạn có thể chuyển sang shell bằng cách đưa ra lệnh sau:
- !
Hoặc thực thi một lệnh duy nhất trên hệ thống cục bộ bằng cách đặt trước lệnh bằng !
như vậy:
- !chmod 644 somefile
Khi bạn kết thúc phiên SFTP của mình, hãy sử dụng exit
hoặc bye
để đóng kết nối.
- bye
Mặc dù cú pháp SFTP kém toàn diện hơn nhiều so với công cụ shell hiện đại, nhưng nó có thể hữu ích để cung cấp khả năng tương thích với cú pháp FTP kế thừa hoặc để hạn chế cẩn thận chức năng có sẵn cho người dùng từ xa của một số môi trường.
Ví dụ: bạn có thể sử dụng SFTP để cho phép người dùng cụ thể truyền tệp 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ủa chúng tôi về Cách bật SFTP mà không cần truy cập Shell.
Nếu bạn đã quen sử dụng FTP hoặc SCP để thực hiện quá trình chuyển của mình, SFTP là một cách tốt để tận dụng điểm mạnh của cả hai. Mặc dù nó không phù hợp với mọi tình huống, nhưng nó là một công cụ linh hoạt cần có trong danh mục của bạn.