Trang chủ / Chuyên đề / Sử dụng sftp-to-securely-transfer-files với remote-server
Thứ ba, 13/08/2013 | 00:00 GMT+7

Sử dụng sftp-to-securely-transfer-files với remote-server

FTP, hay “Giao thức truyền file - File Transfer Protocol” 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 thích hợp 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 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ụ có giao diện đồ 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ù cách đăng nhập với password là dễ sử dụng và cài đặt theo mặc định, nhưng bạn nên tạo đăng nhập vứi SSH key (khóa-SSH) 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 (khóa-SSH) nhằm truy cập server 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  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 lệnh sau:

ssh sammy@your_server_ip_or_remote_hostname

Nếu 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 cổng SSH riêng (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.

Trợ giúp trong SFTP

Lệnh hữu ích nhất đầ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 trợ giúp SFTP. Bạn có thể gọi nó:

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 trong các phần sau.

Ta có thể duyệt 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 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 để nhận được 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 nhiề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 ký tự “l” cho local.

Ta có thể in folder làm việc local:

lpwd
Local working directory: /Users/demouser

Ta có thể xem 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

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 máy 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 tùy chọn đệ quy -r :

get -r someDirectory

Ta có thể yêu cầu SFTP giữ các quyền và thời gian truy cậ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 sang 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 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ể chạy:

put -r localDirectory

 

Lưu ý : Hiện có một lỗi trong các version OpenSSH có trong 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 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 có đủ dung lượng để hoàn tất quá trình chuyển file 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ể giải quyết vấn đề đó bằng cách có lệnh “!”.

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

Với !, các lệnh local khác cũng 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 sở hữu của 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 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 “!” , 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 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 sở hữu group của file bằng:

chgrp groupID file

Và cũng 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à kết quả 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 cá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 với 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ó quyền 644.

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 một 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 “!” :

!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 rất hữu ích để quản trị các server và chuyển các file.

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 quy trình này, hãy xem hướng dẫn 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 file của bạn, 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ó với bạn.


Tags:

Các tin trước

Quản trị packages trong Ubuntu và Debian với apt-get-apt-cache 2013-08-06

Sử dụng roles và quản lý cấp quyền trong postgresql trên vps 2013-08-05

Lệnh truy vấn SQL trong postgresql sử dụng select 2013-08-02

Các lệnh truy cấn quản lý bảng dữ liệu trong postgresql trên cloud-server 2013-08-01

Bảo mật MySQL và MariaDB Databases trên Linux VPS 2013-07-23

Cài đặt Firewall với UFW trên Ubuntu và Debian Cloud Server 2013-06-25

Cơ bản nhất về MYSQL trên Ubuntu CentOS 2012-06-12