SFTP là một giao thức truyền file an toàn, có thể truyền trên cả hệ thống cục bộ và từ xa. Bài viết dưới đây sẽ hướng dẫn sử dụng SFTP để truyền file bằng Remote Server đơn giản, hiệu quả nhất.
Nội dung
Giới thiệu
FTP (File Transfer Protocol) là một phương pháp truyền file không mã hóa giữa hai hệ thống từ xa. SFTP (SSH File Transfer Protocol, hoặc Secure File Transfer Protocol) là một giao thức riêng biệt được packaged với SSH. Ưu điểm của nó là khả năng tận dụng kết nối an toàn để truyền file và truyền qua hệ thống file trên cả hệ thống cục bộ và hệ thống từ xa.
Giữa SFTP hoặc FTP, bạn nên sử dụng SFTP vì đó là một cách chuyển file an toàn hơn.
Trong bài viết này, chúng tôi sẽ hướng dẫn cách sử dụng SFTP thông qua command line interface.
Cách kết nối với SFTP
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 pháp xác thực tương tự cũng có sẵn trong SSH.
Mặc dù password dễ sử dụng và được thiết lập theo mặc định, bạn vẫn nên tạo key SSH và chuyển public key khóa của mình sang bất kỳ hệ thống nào mà bạn cần truy cập. Điều này an toàn hơn và tiết kiệm thời gian về lâu dài.
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ý file. Kiểm tra quyền truy cập SSH bằng command sau:
ssh sammy@your_server_ip_or_remote_hostname
Nếu cách đó hoạt động, hãy thoát ra ngoài bằng cách nhập:
exit
Bây giờ chúng ta có thể thiết lập một phiên SFTP bằng command sau:
sftp sammy@your_server_ip_or_remote_hostname
Bạn sẽ kết nối hệ thống từ xa và prompt của bạn sẽ chuyển thành SFTP prompt.
Nếu bạn đang làm việc trên một cổng SSH tùy chỉnh (không phải cổng mặc định 22), bạn có thể mở một phiên SFTP như sau:
sftp -oPort=custom_port sammy@your_server_ip_or_remote_hostname
Bạn sẽ được kết nối với hệ thống từ xa bằng cổng được chỉ định.
Nhận trợ giúp trong SFTP
Command hữu ích nhất để tìm hiểu là command trợ giúp. Điều này cung cấp cho bạn quyền truy cập vào bản tóm tắt trợ giúp SFTP. Hãy nhập vào prompt:
help
hoặc
?
Thao tác này sẽ hiển thị danh sách các command có sẵn:
Output
Available commands:
bye Quit sftp
cd path Thay đổi remote directory thành 'path'
chgrp grp path Thay đổi nhóm file 'path' thành 'grp'
chmod mode path Đổi permissions của file 'path' thành 'mode'
chown own path Thay đổi owner của file 'path' thành 'own'
df [-hi] [path] Hiển thị thống kê cho thư mục hoặc
filesystem hiện tại có chứa 'path'
exit Quit sftp
get [-Ppr] remote [local] Download file
help Hiển thị help text
lcd path Thay đổi local directory thành 'path'
. . .
Điều hướng bằng SFTP
Có thể di chuyển qua hệ thống file trên server bằng cách sử dụng một số command có chức năng tương tự như các shell counterpart.
Trước tiên, hãy tìm xem bạn hiện đang ở thư mục nào trên hệ thống từ xa. Hãy nhập:
pwd
Output
Remote working directory: /home/demouser
Có thể xem nội dung thư mục hiện tại của hệ thống từ xa bằng command:
ls
Output
Summary.txt info.html temp.txt testDirectory
Lưu ý rằng các command trong SFTP interface không phải là shell command bình thường và không giàu tính năng. Nhưng chúng thực hiện một số flag tùy chọn quan trọng hơn:
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
Để đến một thư mục khác, sử dụng command:
cd testDirectory
Bây giờ bạn có thể duyệt qua hệ thống file từ xa. Nếu bạn cần truy cập vào hệ thống file cục bộ, bạn có thể hướng các command tới hệ thống file cục bộ bằng cách đặt l
trước chúng cho cục bộ (local).
Tất cả các lệnh được thảo luận đều có các local tương đương. Bạn có thể in directory làm việc cục bộ:
lpwd
Output
Local working directory: /Users/demouser
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
Thay đổi dir mà bạn muốn tương tác trên hệ thống cục bộ:
lcd Desktop
Truyền file bằng SFTP
Chuyển các file từ xa đến hệ thống cục bộ
Nếu bạn muốn download file từ server từ xa, dùng lệnh sau:
get remoteFile
Output
Fetching /home/demouser/remoteFile to remoteFile
/home/demouser/remoteFile 100% 37KB 36.8KB/s 00:01
Theo mặc định, command get
sẽ tải một file từ xa xuống một file có cùng tên trên hệ thống file cục bộ.
Bạn có thể sao chép file từ xa sang một tên khác bằng cách:
get remoteFile localFile
Command get
cũng có một số flag tùy chọn. Ví dụ: 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
Bạn 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 -P
hoặc –p
flag:
get -Pr someDirectory
Truyền file cục bộ sang hệ thống từ xa
Việc chuyển các file đến hệ thống từ xa được thực hiện bằng cách sử dụng lệnh:
put localFile
Output
Uploading localFile to /home/demouser/localFile
localFile 100% 7607 7.4KB/s 00:00
Các flag tương tự của get
được áp dụng cho put
. Vì vậy, để sao chép toàn bộ thư mục cục bộ, bạn có thể dùng:
put -r localDirectory
Lưu ý: Hiện có một lỗi trong các phiên bản OpenSSH được cung cấp cùng với các bản phát hành Ubuntu hiện tại (ít nhất là 14.04 đến 15.10) ngăn lệnh trên hoạt động chính xác:
Couldn't canonicalise: No such file or directory.
Để khắc phục sự cố này, hãy tạo thư mục đích ở phía remote server bằng cách nhập mkdir localDirectory
.
Một công cụ hữu ích khi download và upload file là command df
. Nó hoạt động tương tự như phiên bản command line. Với lệnh này, bạn có thể kiểm tra xem có đủ dung lượng để hoàn tất quá trình chuyển file hay không:
df -h
Output
Size Used Avail (root) %Capacity
19.9GB 1016MB 17.9GB 18.9GB 4%
Không có biến thể cục bộ của command này, nhưng nó có thể được khắc phục bằng cách dùng command !
.
Các command !
đưa bạn vào 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 hệ thống cục bộ của mình. Kiểm tra disk usage bằng cách gõ:
!
tiếp theo là
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
Để quay lại phiên SFTP, hãy nhập:
exit
Thao tác file đơn giản với SFTP
SFTP cho phép bạn thực hiện kiểu bảo trì file cơ bản khi làm việc với cấu trúc phân cấp file.
Ví dụ: bạn có thể thay đổi chủ sở hữu của file trên hệ thống từ xa bằng:
chown userID file
Lệnh SFTP sử dụng UID thay vì username.
Để biết UID từ bên trong SFTP interface, nhập lệnh:
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
. . .
Chú ý thay vì đưa ra lệnh !
của chính nó, hãy sử dụng nó làm tiền tố cho một shell command cục bộ. Việc này sẽ giúp chạy bất kỳ command nào có sẵn trên máy cục bộ. Hoặc có thể đã được sử dụng với command df
cục bộ trước đó.
UID sẽ nằm trong cột thứ ba của file và được mô tả bằng các 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 file bằng:
chgrp groupID file
Để có được danh sách các nhóm của hệ thống từ xa sử dụng command sau:
get /etc/group
!less group
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 được liên kết với tên trong cột đầu tiên.
Rất may, lệnh chmod
hoạt động như mong đợi trên hệ thống file từ xa:
chmod 777 publicFile
Output
Changing mode on /home/demouser/publicFile
Không có lệnh nào để thao tác permission đối với file cục bộ. Nhưng bạn có thể đặt umask
cục bộ. Khi đó, bất kỳ file nào được sao chép vào hệ thống cục bộ sẽ có quyền thích hợp.
lumask 022
Output
Local umask: 022
Bây giờ tất cả các file thông thường được tải xuống (miễn là flag -p không được sử dụng) sẽ có 644 quyền.
SFTP cho phép bạn tạo 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 command file chỉ nhắm vào hệ thống file từ xa:
ln
rm
rmdir
Các lệnh này sao chép hành vi cơ bản của các phiên bản shell. Nếu bạn cần thực hiện các hành động này trên hệ thống file cục bộ, hãy nhớ rằng bạn có thể thả vào shell bằng cách đưa ra command sau:
!
Hoặc thực hiện một command duy nhất trên hệ thống cục bộ bằng cách đặt !
trước lệnh:
!chmod 644 somefile
Khi bạn kết thúc phiên SFTP, đóng kết nối bằng:
bye
Kết luận
SFTP là một công cụ hữu ích để quản trị các server và chuyển các file giữa chúng. Ví dụ như bạn có thể sử dụng SFTP để cho phép user cụ thể chuyển file mà không cần quyền truy cập SSH.
Nếu bạn đã quen với việc sử dụng FTP hoặc SCP, SFTP chính là một cách tốt để tận dụng điểm mạnh của cả hai.
Theo digitalocean.com