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.
Duyệt file với SFTP
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.
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