Thứ ba, 13/08/2013 | 00:00 GMT+7

Cách sử dụng SFTP để truyền tệp an toàn bằng server từ xa

FTP, hay “Giao thức truyền file ” là một phương pháp phổ biến để truyền file giữa hai hệ thống từ xa.

SFTP, viết tắt của SSH File Transfer Protocol, hoặc Secure File Transfer Protocol, là một giao thức riêng biệt được đóng gói với SSH, hoạt động theo cách tương tự qua kết nối an toàn. Ưu điểm 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 local và từ xa.

Trong hầu hết mọi trường hợp, SFTP được ưu tiên hơn FTP vì các tính năng bảo mật cơ bản và khả năng tích hợp lại 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 của nó.

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à cài đặt kết nối an toàn. Do đó, các phương pháp xác thực tương tự có sẵn trong SSH.

Mặc dù password dễ sử dụng và cài đặt theo mặc định, ta khuyên bạn nên tạo SSH key và chuyển public key của bạn 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 nhiều và có thể giúp bạn tiết kiệm thời gian về lâu dài.

Vui lòng xem hướng dẫn này để cài đặt SSH key nhằm truy cập server 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 cần thiết để sử dụng SFTP để quản lý file . Kiểm tra quyền truy cập SSH bằng lệnh 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 lệnh :

exit 

Ta có thể cài đặt kết nối SSH và sau đó mở phiên SFTP sử dụng kết nối đó bằng cách 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à dấu nhắc của bạn sẽ chuyển thành dấu nhắc SFTP.

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), thì bạn có thể mở một 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.

Nhận trợ giúp trong SFTP

Lệnh hữu ích nhất để học đầu tiên là lệnh 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. Bạn có thể gọi nó bằng lệnh một trong hai thứ sau vào dấu nhắc :

help 
? 

Thao tác này sẽ hiển thị danh sách các lệnh 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' . . . 

Ta sẽ khám phá một số lệnh mà bạn thấy trong các phần sau.

Ta có thể chuyển thông qua hệ thống phân cấp file 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 đối tác shell của chúng.

Đầu tiên, ta hãy tự định hướng bằng cách tìm xem ta đang ở folder nào trên hệ thống từ xa. Cũng giống như trong một phiên shell điển hình, ta có thể gõ như sau để lấy folder hiện tại:

pwd 
Remote working directory: /home/demouser 

Ta có thể xem nội dung của folder hiện tại của hệ thống từ xa bằng một lệnh quen thuộc khác:

ls 
Summary.txt     info.html       temp.txt        testDirectory 

Lưu ý các lệnh trong giao diện SFTP không phải là lệnh shell bình thường và không giàu tính năng, nhưng chúng thực hiện một số cờ 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 một folder khác, ta có thể sử dụng lệnh này:

cd testDirectory 

Bây giờ ta có thể duyệt qua hệ thống file từ xa, nhưng nếu ta cần truy cập vào hệ thống file local của bạn thì sao? Ta có thể hướng các lệnh tới hệ thống file local bằng cách đặt trước chúng bằng “l” cho local .

Tất cả các lệnh được thảo luận cho đến nay đều có tương đương local . Ta có thể in folder làm việc local :

lpwd 
Local working directory: /Users/demouser 

Ta có thể liệt kê nội dung của folder hiện tại trên máy local :

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

Ta cũng có thể thay đổi folder mà ta muốn tương tác trên hệ thống local :

lcd Desktop 

Truyền file bằng SFTP

Điều hướng hệ thống file từ xa và local có giới hạn hữu ích nếu không có thể chuyển file giữa hai hệ thống.

Truyền file từ xa sang hệ thống local

Nếu ta muốn download file từ server từ xa của bạn , ta có thể thực hiện việc này bằng cách ra lệnh sau:

get remoteFile 
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” tải một file từ xa xuống file có cùng tên trên hệ thống file local .

Ta có thể sao chép file 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 có một số cờ tùy chọn. Ví dụ, ta có thể sao chép một folder và tất cả nội dung của nó bằng cách chỉ định tùy chọn đệ quy:

get -r someDirectory 

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 

Chuyển file local sang hệ thống từ xa

Việc chuyển file đến hệ thống từ xa cũng dễ dàng thực hiện bằng cách sử dụng lệnh “put” có tên thích hợp:

put localFile 
Uploading 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ộ folder local , bạn có thể phát hành:

put -r localDirectory 

Lưu ý : Hiện có một lỗi trong các version 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. Khi chạy lệnh trên để chuyển nội dung đến server bằng version OpenSSH có lỗi, sẽ xảy ra lỗi sau: Couldn't canonicalise: No such file or directory .

Để khắc phục sự cố này, trước tiên hãy tạo folder đích trên đầu từ xa bằng lệnh mkdir localDirectory . Sau đó, lệnh trên sẽ hoàn thành mà không có lỗi.

Một công cụ quen thuộc hữu ích khi download và tải lên file là lệnh “df”, hoạt động tương tự như version dòng lệnh. Bằng cách sử dụng 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 
    Size     Used    Avail   (root)    %Capacity   19.9GB   1016MB   17.9GB   18.9GB           4% 

Xin lưu ý không có biến thể local của lệnh này, nhưng ta có thể khắc phục điều đó bằng cách phát hành “!” chỉ huy.

Các "!" lệnh đưa ta vào một shell local , nơi ta có thể chạy bất kỳ lệnh nào có sẵn trên hệ thống local của bạn . Ta có thể kiểm tra việc sử dụng đĩa bằng lệnh :

! 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 kỳ lệnh local 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  

Đến đây bạn sẽ thấy dấu nhắc SFTP trả về.

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 hữu ích khi làm việc với cấu trúc folder-file .

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:

chown userID file  

Lưu ý , không giống như lệnh “chmod” của hệ thống, lệnh SFTP không chấp nhận tên user mà thay vào đó sử dụng UID. Thật không may, không có cách nào dễ dàng để biết UID thích hợp từ bên trong giao diện SFTP.

Một công việc liên quan xung quanh có thể được hoàn thành 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ú ý cách thay vì đưa ra dấu “!” của chính nó, ta đã sử dụng nó làm tiền tố cho một lệnh shell local . Điều này hoạt động để chạy bất kỳ lệnh nào có sẵn trên máy local của ta và có thể đã được sử dụng với lệnh “df” local trước đó.

UID sẽ nằm trong cột thứ ba của file , được mô tả bằng các ký tự dấu hai chấm.

Tương tự, ta có thể thay đổi chủ sở hữu group của file bằng:

chgrp groupID file 

, không có cách nào dễ dàng để có được danh sách các group của hệ thống từ xa. Ta có thể giải quyết vấn đề này bằng lệnh 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 chứa ID của group được liên kết với tên trong cột đầu tiên. Đây là những gì ta đang tìm kiếm.

Rất may, lệnh “chmod” hoạt động như mong đợi trên hệ thống file từ xa:

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

Không có lệnh nào để thao tác quyền đối với file local , nhưng bạn có thể đặt umask local , để các file nào được sao chép vào hệ thống local sẽ có quyền thích hợp.

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

lumask 022 
Local umask: 022 

Bây giờ tất cả các file thông thường được download (miễn là cờ “-p” không được sử dụng) sẽ có 644 quyền.

SFTP cho phép bạn tạo folder trên cả hệ thống local và hệ thống từ xa với “lmkdir” và “mkdir” tương ứng. Những hoạt động như mong đợi.

Phần còn lại của các lệnh file chỉ nhắm đến 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 version shell. Nếu bạn cần thực hiện các hành động này trên hệ thống file local , hãy nhớ rằng bạn có thể thả vào shell bằng cách ra lệnh sau:

! 

Hoặc thực hiện một lệnh duy nhất trên hệ thống local 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 bạn , hãy sử dụng “exit” hoặc “bye” để đóng kết nối.

bye 

Kết luận

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

Ví dụ: bạn có thể sử dụng SFTP để cho phép user cụ thể truyền file mà không cần quyề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 ta về Cách bật SFTP mà không cần truy cập Shell trên Ubuntu 16.04 và về Cách bật SFTP mà không cần truy cập Shell trên CentOS 7 .

Nếu bạn đã quen với việc sử dụng FTP hoặc SCP để thực hiện chuyển tiền của bạn , SFTP là một cách tốt để tận dụng thế mạnh của cả hai. Mặc dù nó không phù hợp cho mọi tình huống, nhưng nó là một công cụ linh hoạt cần có trong tiết mục của bạn.


Tags:

Các tin trước

Cách thiết lập server Git riêng trên VPS 2013-08-02
Cách cài đặt và cấu hình firewall server cấu hình (CSF) trên Ubuntu 2013-07-29
Cách bảo mật server cloud chống lại SQL Injection 2013-07-05
Cài đặt và sử dụng Vim Text Editor trên Cloud Server 2013-07-03
Cách cài đặt Zend Server 6 trên VPS CentOS 6.4 2013-07-03
Cài đặt và sử dụng Vim Text Editor trên Cloud Server 2013-07-03
Cách sử dụng Z Shell (zsh) trên server cloud 2013-07-01
Cách cài đặt server DNS BIND trên CentOS 6 2013-06-12
Cách cài đặt eJabberd XMPP Server trên Ubuntu 2013-06-04
Cách cấu hình tmux trên server cloud 2013-05-20