Hướng dẫn dùng SFTP để chuyển file an toàn với server từ xa

6 năm trước

 SFTP là gì ?

FTP hay File Transfer Protocol là phương pháp phổ biên dùng để chuyển file giữa hai hệ thống từ xa với nhau.

SFTP là viết tắt của SSH File Transfer Protocol hay Secure File Protocol là hai giao thức riêng biệt đi kèm với SSH hoạt động theo cách giống sau qua một kết nối an toàn. Lợi ích của chúng là khả năng tận dụng kết nối an toàn để chuyển các file và đi qua hệ thống file trên cả hệ thống cục bộ và từ xa.

Ở hầu hết trường hợp, SFTP được ưa chuộng hơn sơ với FTP bởi vì các tính năng bảo mật tiềm ẩn và khả năng kết nối SSH. FTP là mội giao thức không bảo mật mà ta chỉ nên sử dụng trong trường hợp bất đắc dĩ hoặc trên mạng bạn tin tưởng

Cho dù SFTP được tích hợp trong nhiều công cụ đồ hoạ, bài này sẽ hướng dẫn cách để sử dụng nó trông qua dòng command tương tác

Làm thế nào để kết nối với SFTP

Theo mặc định, SFTP sử dụng giao thức SSH để chứng thực và thiết lập một kết nối an toàn. Bởi vì điều này mà phương pháp chứng thực tương tự có sẵn trong SSH.

Cho dù password rất dễ để sử dụng và cài đặt, chúng tôi khuyên bạn nen tạo chìa khoá SSH và chuyển khoá công cộng của bạn tới bất cứ hệ thống nào bạn cần truy cập. Điều này an toàn hơn rất nhiều mà cũng có thể tiết kiệm thời gian của bạn trong dài hạn.

Nếu bạn có thể kết nối đến thiết bị của bạn sử dụng SSH thì sau đó bạn sẽ phải hoàn thành tất cả những yêu cầu cần thiết để sử dụng SFTP để quản lí file. Kiểm tra truy cập SSH với dòng command sau:

ssh username@remote_hostname_or_IP

Nếu nó hoạt động, thoát ra trở lại bằng cách gõ:

exit

Bạn có thể thiết lập một kết nối SSH và sau đó mở một phiên làm việc SFTP sử dung kết nối đó với dòng command sau:

sftp username@remote_hostname_or_IP

Bạn sẽ kết nói hệ thống từ xa và dấu nhắc của bạn sẽ đổi thành dấu nhắn SFTP.

Nếu bạn đang làm việc trên cổng SSH ( không phải cổng mặc định 22) thì sau đó bạn có thể mở phiên làm việc SFTP như sau:

sftp -oPort=custom_port username@remote_hostname_or_IP

Điều này sẽ kết nối bạn đến hệ thống từ xa bằng cổng của bạn.

Tìm sự giúp đỡ trong SFTP

Command help là một command hữu dụng nhất để học đầu tiên.Nó sẽ cho bạn truy cập với bản tóm tắt các sự trợ giúp của SFTP. Nó sẽ hiện ra bằng cách có những dấu nhắc sau:

help
?

Nó sẽ hiện ra danh sách của các command đang có sẵn:

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'
. . .

Bạn có thể phát hiện ra thêm một vài command ở phần dưới đây.

 

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

Chúng ta có thể điều hướng thông qua hệ thống từ xa sử dụng nhiều command hoạt động tương tự như đối tác shell của chúng.

Trước tiên, hãy tự định hướng cho mình bằng cách tìm ra ​chúng ta đang thư mục nào trên hệ thống từ xa. Giống như trong một phiên làm việc shell điển hình, chúng ta có thể gõ lệnh sau để tới thư mục hiện tại:

pwd
Remote working directory: /home/demouser

Chúng ta có thể xem nội dung thư mục hiện tạo  của hệ thống từ xa mới command tương tự khác:

ls
Summary.txt info.html temp.txt testDirectory

Lưu ý rằng các command trong giao diện SFTP không phải là các command shell thông thường và không phải là tính năng phong phú, nhưng chúng thực hiện một số flag tùy chọn quan trọng hơn:

ls -la
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 thư mục khác, gõ command:

cd testDirectory

Bây giờ chúng ta có thê đi qua hệ thống file từ xa nhưng nếu mà chúng ta cần phải truy cập hệ thống file cụ bộ? Chúng ta có thể điều hướng các lệnh đến hệ thống file cục bộ bằng cách sử dụng chúng với  "l".

Tất cả các lệnh đã thảo luận cho đến nay có các địa phương tương đương. Chúng ta có thể in thư mục cục bộ:

lpwd
Local working directory: /Users/demouser

 Chúng ta có thể list những tư mục hiện tại trên thiết bị cục bộ:

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

Chúng ta cũng có thể thay đổi thư mục mà chúng ta muốn tương tác với trên hệ thống cục bộ:

lcd Desktop
 

Chuyển file với SFTP

Điều hướng các hệ thống file từ xa và cục bộ là có hạn chế lợi ích mà không có khả năng chuyển các file giữa hai hệ thống.

Chuyển file từ xa đến hệ thống cục bộ

 Nếu chúng ta  muốn download file từ máy chủ từ xa, gõ dòng command sau:

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

Như bạn có thể thấy, command "get" download file từ xa đến một file với cùng tên trên hệ thống cục bộ.

Chúng ta có thể copy file từ xa với tên khác nhau:

get remoteFile localFile

Command "get" cũng có một số flag tuỳ chọn. Ví dụ, chúng ta có thê copy một thư mục và tất cả nội dung của nó bằng cách chỉ định đệ quy tuỳ chọn:

get -r someDirectory

Chúng ta có thể bảo SFTP duy trì quyền và thời gian truy cập bằng cách sử dụng flag "-P" hoặc "-p"

get -Pr someDirectory

Chuyển file cục bộ đến hệ thống từ xa

Chuyển các file vào hệ thống từ xa chỉ đơn giản là thực hiện bằng cách sử dụng command "put" hợp lí

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

Cùng một flag hoạt động với "get" để áp dụng  "put". Nên để copy toàn bộ thư mục cục bộ, ấn 

put -r localDirectory
Lưu ý

 Hiện tại có một lỗi trong các phiên bản OpenSSH đi kèm với bản phát hành Ubuntu hiện tại( ít nhất là bản 14.04 cho tới 15.10) ngăn không cho command hoạt động chính xác. Khi gõ lệnh trên để chuyển nội dung tới một server sử dụng phiên bản lỗi của SSH, lỗi sau sẽ cho ra kết quả là Couldn't canonicalise: No such file or directory. Để xử lí nó, tạo thư mục đích trên đầu cuối từ xa bằng cách gõ mkdir localDirectory. Sau đó thì lệnh trên sẽ hoạt động mà không bị lỗi.

Một công cụ quen thuộc hữu ích khi download và upload file là lệnh "df", hoạt động tương tự như phiên bản dòng lệnh. Bằng cách này, bạn có thể kiểm tra xem bạn có đủ không gian để hoàn thành việc chuyển mà bạn mong muốn:

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

Nên nhớ rằng không có sự thay đổi cục bộ nào của command này nhưng chúng ta có thể tránh nó bằng cách dùng command  "!"

Lệnh "!" sẽ đưa chúng ta đến shell cục bộ nơi chúng ta có thể chạy bất cứ command nào có sẵn trên hệ thống cục bộ của chúng ta.Chúng ta có thể kiểm tra công dụng của nó bằng cách:

!
df -h
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 cứ command cục bộ nào khác sễ hoạt động như mong muốn. Để quay trở lại phiên làm việc SFTP, gõ

exit

Bạn bây giờ có thể thấy dấu nhắc SFTP đã trở lại.

 

Thao tác file đơn giản với SFTP

SFTP cho phép bạn thực hiện thao tác file đơn giản cái mà rẩ hữu dụng khi làm việc với phân cấp file.

Ví dụ, bạn có thể thay đổi người sở hữu của một file trên hệ thống từ xa với:

chown userID file

 Lưu ý rằng, khác với command  " chmod " của hệ thống, command SFTP không chất nhận tên người dùng nhưng thay vì sử dụng các UID. Thật không may rằng không có cách nào dễ dàng để biết được UID thích hợp từ bên trong giao diện SFTP.

Điều này có thể thực hiện với:

get /etc/passwd
!less passwd
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ì tự đưa ra command "!", chúng tôi đã sử dụng nó như một tiền tố cho một command shell cục bộ. Điều này làm việc để chạy bất kỳ lệnh có sẵn trên thiết bị cục bộ của chúng tôi và có thể đã được sử dụng với các command cục bộ "df" trước đó

UID sẽ là cột thứ 3 của file, được miêu tả bởi các kí tự dấu hai chấm:

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

chgrp groupID file

Một lần nữa, không có cách nào dễ dàng để có được một danh sách các nhóm của hệ thống từ xa. Chúng ta có thể làm việc với nó bằng command sau:

 

get /etc/group
!less group
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 giữ ID của nhóm có gắn tên trong cột đầu tiên. Đây là những gì chúng ta đang tìm kiếm.

Rất may, lệnh "chmod" hoạt động như mong muốn trên hệ thống tệp tin từ xa:

chmod 777 publicFile
Changing mode on /home/demouser/publicFile

Không có command để điều khiển các quyền của file cục bộ, nhưng bạn có thể thiết lập umask cục bộ, sao cho mọi file được copy vào hệ thống cục bộ sẽ có quyền thích hợp.

 Điều này có thể thực hiện với command  " lumask ".

lumask 022
Local umask: 022

 

Bây giờ tất cả các file thường xuyên tải về (miễn là flag "-p" không được sử dụng) sẽ có 644 quyền truy cập.

SFTP cho phép bạn tạo các thư mục trên cả hai hệ thống cục bộ và từ xa với "lmkdir" và "mkdir" tương ứng. Chúng hoạt động như mong đợi.

Phần còn lại của các command file chỉ nhắm mục tiêu hệ thống tập tin từ xa:

ln
rm
rmdir

Các command này tạo lại hành vi cơ bản của các phiên bảnshell . Nếu bạn cần phải thực hiện những hành động trên hệ thống tập tincục bộ, hãy nhớ rằng bạn có thể thả vào một shell bằng cách dùng command này:

!

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 với "!" như sau:

 

!chmod 644 somefile

Khi bạn kết thục phiên làm việc SFTP, dùng "exit" hoặc "bye" để đóng kết nối.

bye
 

Kết luận

Cho dù SFTP là một công cụ đơn giản nhưng nó rất hữu ích trong việc quản lí server và chuyển file giữa chúng.

Nếu bạn quen dùng FTP hay SCP để thực hiện việc chuyển file, 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 bạn cần có trong danh mục của bạn.