SCP (Secure Copy) là file transfer protocol (giao thức chuyển file trên mạng), giúp di chuyển file trong hệ thống mạng an toàn và dễ dàng. Nó có thể chuyển file giữa một máy tính cá nhân đến máy chủ từ xa, hoặc chuyển file giữa 2 máy tính từ xa.
Cú pháp của SCP Command
Cú pháp đơn giản của SCP command (syntax) như sau:
scp [other options] [source username@IP]:/[directory and file name] [destination user]
Trong đó:
- [other options] là tham số bạn có thể thêm vào SCP command.
- [source username@IP] là username và IP của máy có file bạn muốn.
- [directory and file name] đường dẫn chứa file, và tên của nó.
- [destination username@IP] là username và IP của máy đích
- [destination directory] là thư mục đích nơi file được lưu
VD1: Copy file có tên là test.txt trên Server A tới Server B có địa chỉ IP là 10.0.2.2 và lưu nó tại thư mục /tmp, chúng ta dùng command sau:
scp test.txt user@10.0.2.2:/tmp
VD2: Copy thư mục /home/userA/database trên Server A tới Server B
scp -r /home/userA/database user@10.0.2.2:/tmp
Tạo ssh key để bảo mật
Để chứng thực kết nối, chúng ta cần tạo ssh key pari trong terminal bằng lệnh sau:
ssh-keygen -t rsa
Copy khóa này vào máy tính từ xa bằng lệnh:
ssh-copy-id user@remote_A
Khi bạn đã chứng thực trên máy tính từ xa, public key sẽ được copy và đã có thể chuyển file.
Nếu không nhớ mật khẩu root cho cả 2 máy, bạn có thể dùng ssh client để chọn file private identity key để RSA được đọc tự động.
Đường dẫn mặc định của host key đặt ở ~/.ssh/id_rsa.
Đối với đường dẫn /home/userA/.ssh/id_rsa , lệnh như sau:
ssh -i /home/userA/.ssh/id_rsa user@yourserver.servername.domain
Copy file local lên máy từ xa
Chúng ta sẽ copy một file có tên data.zip, tới máy tính từ xa có tên root. Sau tên username sẽ là IP máy server
Ví dụ:
scp /users/Nam/desktop/data.zip root@10.10.1.2:/home/data
Nếu bạn không có cấu hình ssh client tự động được cài đặt, bạn sẽ được hỏi nhập mật khẩu từ máy tính từ xa như sau:
root@10.10.1.2’s password: data.zip 100% 0 0.0KB/s 00:00
Nếu SSH trên port khác port mặc định 22. Trong trường hợp này, bạn cần chỉ định port cho nó:
scp -P 2322 /users/Nam/desktop/data.zip root@10.10.1.2:/home/data
Nếu bạn muốn thay đổi tên file trong quá trình copy, bạn cần nhập lệnh sau trong SCP Linux:
scp /users/Nam/desktop/data.zip root@10.10.1.2:/home/data/data_backup.zip
Nếu muốn copy một thư mục có tất cả file và thư mục con, sử dụng tham số –r như chúng tôi đã giải thích ở trên:
scp -r /users/Nam/desktop root@10.10.1.2:/home/data
Copy file từ máy chủ từ xa về máy local
Trong tiến trrình này, bạn chỉ cần đảo ngược chỗ vị trí nguồn và vị trí đích là được.
scp root@10.10.1.2:/home/data/data.zip Users/Nam/Desktop
Sau đó bạn sẽ cần nhập thông tin đăng nhập SSH, hoặc bạn đã buộc SSH client sử dụng private key trên máy tính của bạn.
Copy file file từ một máy từ xa đến máy từ xa khác
Để copy từ một remote host (máy từ xa) đến một remote host khác, bạn sẽ cần nhập password cho cả 2 tài khoản của cả 2 máy để chạy lệnh trong terminal.
Ví dụ:
scp root@10.10.1.2:/home/data/data.zip userA@172.10.0.1:/public
Lệnh trên copy file nguồn /home/data/data.zip từ host đầu tiên đến host thứ 2. Để copy folder, chỉ cần thêm option -r và xác định đường dẫn thư mục thay vì file bên trong nó.
Trong điều kiện bình thường, file sẽ đi thẳng tới remote host. Tuy nhiên, nếu bạn muốn chuyển hướng để đi thông qua máy của bạn, bạn có thêm option -3:
scp -3 root@10.10.1.2:/home/data/data.zip userA@172.10.0.1:/public
Lời kết
Trong bài này, mình đã chia sẻ các bạn cách chuyển file vô cùng tiện lợi giữa các máy tính từ xa, giữa máy tính từ xa với máy local bằng scp command. Các làm việc với nhiều server bao nhiêu bạn sẽ thấy nó lợi hại bấy nhiêu. Giao thức copy file an toàn này còn đảm bảo copy thành công mà không phải đăng nhập. Chúc các bạn thành công!
Cảm ơn bạn đã trả lời.