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.
Điều hướng bằng SFTP
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.
Các tin liên quan
Cách thiết lập server Git riêng trên VPS2013-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
Kiến thức cơ bản về quyền của Linux và cách sử dụng Umask trên VPS
2013-07-10
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 thêm tệp swap trên server cloud Arch Linux
2013-06-28
Cách cài đặt server DNS BIND trên CentOS 6
2013-06-12