Hướng dẫn dùng SFTP để chuyển file an toàn với server từ xa
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
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.