Welcome to Blog IT Knowleage Sharing!

Wednesday, August 19, 2015

Các mẫu lệnh SCP trên Linux

SCP - Viết tắt của Secure copy.

Scp là một công cụ dùng để copy hay chuyển dữ liệu giữa các máy chủ (hosts). Nó được xem như là một công cụ giống với chương trình ssh. Thực ra nó sử dụng một kết nối ssh để thực thi chạy ngầm trong việc chuyển dữ liệu. Scp được dùng để tham chiếu cho cả hai định nghĩa về giao thức (protocol) và lập trình (program) dòng lệnh thể hiện cách nó chép dữ liệu và cũng được ứng dụng như là một phần trong bộ công cụ OpenSSH.

Cài đặt SCP.

Scp được có sẵn khi cài đặt các phiên bản Linux nằm trong gói openssh. Trong Ubutu/Debian chẳng hạn, thì gói openssh-client cung cấp sẵn chương trình scp.


$ dpkg -L openssh-client | grep scp
/usr/bin/scp
/usr/share/man/man1/scp.1.gz
 
Trong gói OpenSSH đã cung cấp sẵn các công cụ như ssh, scp,sftp mà chúng ta không cần phải cài đặt điều gì thêm.


Sử dụng Scp. 
Cú pháp cơ bản :

$ scp source_file_path destination_file_path

Tùy thuộc vào từng máy chủ (host), đường dẫn cần phải đầy đủ tất cả địa chỉ host, số cổng kết nối, user và password. Vì thế nếu việc gửi dữ liệu từ máy hiện tại (local) đến máy từ xa (uploading) thì cấu trúc sẽ theo đường dẫn đến tập tin, chẳng hạn như sau:

$ scp ~/my_local_file.txt user@remote_host.com:/some/remote/directory

Khi muốn chép dữ liệu từ một máy từ xa về máy hiện tại (downloading), thì chỉ cần đảo ngược lại:

$ scp user@remote_host.com:/some/remote/directory ~/my_local_file.txt

# just download the file
$ scp user@192.168.1.3:/some/path/file.txt .

Việc này khá thông dụng trong scp, ngoài ra còn có nhiều lựa chọn khác nữa mà scp cung cấp và hỗ trợ, theo mặc định thì scp sẽ chép đè lên file hiện hành nếu trùng tên, do đó có thể sử dụng một công cụ tương tự khác để tránh việc làm này đó là rsync, Các tham chiếu có trong scp.

Verbose output.
Với tham số này (verbose: -v) sau dong lenh scp thì nó sẽ xuất ra những thông tin đang chạy ngầm khi scp đang thực thi việc chép dữ liệu. Việc này khá hữu ích khi xãy ra lỗi trong quá trình chép tập tin, hay việc chép dữ liệu bị thất bại giữa chừng, nó chỉ ra chính xác thời điểm mà ở đó nó bị lỗi.

$ scp -v ~/test.txt root@192.168.1.3:/root/help2356.txt
Executing: program /usr/bin/ssh host 192.168.1.3, user root, command scp -v -t /root/help2356.txt
OpenSSH_6.2p2 Ubuntu-6ubuntu0.1, OpenSSL 1.0.1e 11 Feb 2013
debug1: Reading configuration data /home/enlightened/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to 192.168.1.3 [192.168.1.3] port 22.
debug1: Connection established.
..... OUTPUT TRUNCATED
 
Chép dữ liệu với nhiều tập tin trong danh mục.
Với nhiều tập tin cần được chép thì chỉ cần thêm khoảng trắng giữa các tập tin trong dòng lệnh.

$ scp foo.txt bar.txt username@remotehost:/path/directory/
 
Để chép nhiều tập tin từ một máy từ xa đến thư mục hiện tại sử dụng dòng lệnh sau:
$ scp username@remotehost:/path/directory/\{foo.txt,bar.txt\} .

$ scp root@192.168.1.3:~/\{abc.log,cde.txt\} .
Chép toàn bộ thư mục (Recursively)
Để chép toàn bộ thư mục từ một máy đến một máy khác sử dụng -r kèm theo.

$ scp -v -r ~/Downloads root@192.168.1.3:/root/Downloads
 
Chép các tập tin (files) giữa 2 máy từ xa.
Scp cho phép chép các tập tin giữa 2 máy từ xa bất kỳ. 

$ scp user1@remotehost1:/some/remote/dir/foobar.txt user2@remotehost2:/some/remote/dir/
 
Tăng tốc việc truyền dữ liệu với nén tập tin.
Một hỗ trợ khá tuyệt vời để tăng tốc trong việc chuyển dữ liệu để giúp tiết kiệm thời gian, chỉ cần thêm tham số C (compression) vào dòng lệnh, tập tin sẽ được nén trong quá trình chuyển và được giải nén sau khi việc chép hoàn tất.

$ scp -vrC ~/Downloads root@192.168.1.3:/root/Downloads
 
Giới hạn băng thông sử dụng. 
Nếu không muốn scp lấy toàn bộ băng thông có sẵn thì sử dụng tham số -l (limit) để giới hạn gói tin chuyển đi, đơn vị được tính là Kbit/s.

$ scp -vrC -l 400 ~/Downloads root@192.168.1.3:/root/Downloads
 
Kết nối với cổng được định nghĩa trên máy từ xa (remote host).
Nếu máy từ xa được mở cổng ssh khác với cổng mặc định (port 22), thì có thể cho thêm tham số -P trong dòng lệnh.

$ scp -vC -P 2200 ~/test.txt root@192.168.1.3:/some/path/test.txt
 
Duy trì thuộc tính của tập tin.
Tham số '-p' (smallcase) cho phép duy trì các thuộc tính của tập tin như thời gian chỉnh sửa, số lần truy cập...

$ scp -C -p ~/test.txt root@192.168.1.3:/some/path/test.txt
 
Chế độ chạy ngầm.
Trong chế độ này, scp sẽ triệt để chặn cũng như ẩn hay khóa các cảnh báo cũng như  những thông điệp phân tích xuất hiện trong quá trình chuyển tập tin.

$ scp -vCq ~/test.txt root@192.168.1.3:/some/path/test.txt
 
Chỉ định thêm tập tin xác thực.
Khi sử dụng tham chiếu này để hỗ trợ bảo mật cho việc xác thực, thì cần định nghĩa sẵn một tập tin nhận dạng mà nó chứa khóa cá nhân (private key). Lựa chọn này được cho phép trực tiếp trong dòng lệnh ssh.

$ scp -vCq -i private_key.pem ~/test.txt root@192.168.1.3:/some/path/test.txt
 
 Sử dụng tập tin ssh-config
 Sử dụng tham chiếu -'F' để chỉ định một tập tin có sẵn cấu hình ssh.
$ scp -vC -F /home/user/my_ssh_config ~/test.txt root@192.168.1.3:/some/path/test.txt
 
Sử dụng mã hóa khác.
Mặc định thì scp đã mã hóa tập tin khi truyền dữ liệu, tuy nhiên có thể sử dụng một loại mã hóa nào đó khác với mặc định thì chỉ cần thêm tham chiếu như ví dụ.

$ scp -c blowfish -C ~/local_file.txt username@remotehost:/remote/path/file.txt
 
Tổng quát.
Mặc dù scp là rất hiệu dụng trong truyền dữ liệu an toàn, tuy nhiên nó còn thiếu chức năng đồng bộ hóa tập tin khi truyền lỗi hay trùng tên, tất cả chức năng của nó là sao chép từ nơi này đến nơi khác.

Một công cụ khác cũng mạnh mẽ không kém đố là Rsync, nó không chỉ có tất cả các chức năng của scp mà còn thêm chức năng đồng bộ hóa tập tin giữa 2 máy chủ. 




No comments:

Post a Comment