Chúng ta thường xuyên có nhu cầu di chuyển file từ local sang remote hoặc ngược lại, đặc biệt khi quản lý hoặc triển khai mã trên server. Một cách hiệu quả để thực hiện việc này là thông qua Secure Copy Protocol (SCP) , một công cụ được tích hợp trong SSH (Secure Shell). Blog này sẽ hướng dẫn bạn cách sử dụng SCP trên các nền tảng Linux như Ubuntu, Linux Mint và Debian, cùng nhiều nền tảng khác.
SSH và SCP: Cơ bản để truyền tệp an toàn
SSH là từ viết tắt của Secure Shell, là một giao thức được sử dụng để truy cập server một cách an toàn. Được tích hợp trong hệ sinh thái SSH này là Secure Copy Protocol ( SCP) là một công cụ hiệu quả để truyền tệp giữa local và server. Cú pháp của nó gần giống với lệnh CP (sao chép), nhưng nó hướng đến việc remote.
SCP Command Syntax
scp [options] [username@IP]:/[directory and file name] [destination username@IP]:/[directory]
Trong đó:
- options: là các tùy chọn của lệnh SCP như mật mã, cấu hình ssh, cổng ssh, giới hạn…
- username@IP: là username và IP của máy có file bạn muốn thao tác. Nó sẽ có dạng giống như [email protected]
- :/ báo cho SCP command biết sau đó sẽ là thư mục nguồn
- [directory and file name]: đường dẫn chứa file, và tên của nó. Nó có dạng /tomosia/blog/SCP.pdf
- [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
Ví dụ:
scp -p [email protected]:/tomosia/blog/SCP.pdf [email protected]:/tms/destination
Một số tùy chọn được sử dụng trong SCP:
- –P port xác định chính xác cổng vào của server (port mặc định của TCP là 22)
- –c cipher giúp bạn xác định thuật toán mã hóa bạn muốn dùng. Một số giá trị bạn có thể đặt vào là ‘aes256-ctr’, ‘aes256-cbc’, ‘blowfish-cbc’, ‘arcfour’, ‘arcfour128’, ‘arcfour256’, ‘cast128-cbc’, aes128-ctr’, ‘aes128-cbc’, ‘aes192-ctr’, ‘aes192-cbc’, and 3des-cbc’. Lựa chọn mặc định trong cấu hình là ‘AnyStdCipher’
- –q sẽ vận hành trong chế độ im lặng, có nghĩa là chỉ có các lỗi nghiêm trong mới hiện lên.
- –r là recursive copying, có nghĩa là bao gồm tất cả thư mục con.
- -4 hoặc -6 được dùng khi bạn muốn chọn phiên bản protocol IPv4 hay IPv6.
- –p là “preserve”, dùng để lưu lại thời gian chỉnh sửa và thuộc tính của file.
- –u sẽ xóa file nguồn sau khi chuyển đổi hoàn tất.
- –c giúp nén dữ liệu khi truyền.
Những điều cần lưu ý
Vì SCP sử dụng mã hóa SSH, bạn sẽ cần dùng mật khẩu ssh để chuyển file. Hơn nữa, nó còn cần quyền đọc trên máy tính của bạn copy từ và quyền viết trên máy tính bạn copy tới.
Để chứng thực kết nối, bạn sẽ 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 remote bằng lệnh:
ssh-copy-id user@remote_machine
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 bạn 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.
Với protocol 2, đường dẫn mặc định của host key là ~/.ssh/id_dsa, còn protocol version 1 nó đặt ở ~/.ssh/id_rsa. Sau đó, bạn phải cần tìm file back-up của privaet và public key để ssh command tự động dùng chúng.
Đối với đường dẫn /back-up/home/jack/.ssh , lệnh này sẽ trông như sau:
ssh -i /back-up/home/user/.ssh/id_dsa [email protected]
Nếu bạn đang chuyển file lớn, chúng tôi khuyên dùng tmux session hoặc chạy lệnh trong một screen khác. Ngoài ra, bạn còn có thể chọn -v để buộc scp hiển thị bất kỳ lỗi kết nối, chứng thực hay cấu hình nào.
Lệnh mặc định có giá trị là –overwrite [yes] có nghĩa là quá trình này sẽ ghi đè file có cùng tên và vị trí mà không đưa ra cảnh báo. Bạn có thể thêm –overwrite no hay –overwrite ask trong scp command để chắc chắn rằng việc ghi đè đã được thông qua.
Copy dữ liệu bằng SCP Command Linux giữa hai hệ thống
#1: Từ local sang remote
Chúng ta sẽ copy một file có tên tms-scp.zip, tới máy tính từ xa có tên root. Sau tên username sẽ là IP máy remote
Ví dụ:
scp /tms/blog/tms-scp.zip [email protected]:/blog/writing
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:
[email protected]’s password:
novel3.zip 100% 0 0.0KB/s 00:00
Nếu port trên máy remote 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 /tms/blog/tms-scp.zip [email protected]:/blog/writing
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 /tms/blog/tms-scp.zip [email protected]:/blog/writing/new-tms-scp.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 /tms/blog/tms-scp.zip [email protected]:/blog/writing
#2: Từ remote về local
Trong trường hợp này, bạn chỉ cần đảo ngược chỗ vị trí nguồn và vị trí đích là được. Lần này, chúng tôi đang copy file tms-scp.zip từ máy remote về local:
scp [email protected]:/blog/writing/tms-scp.zip /tms/blog/tms-scp.zip
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.
#3: Từ remote A sang remote B
Để copy từ remote A sang remote B, 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 [email protected]:/blog/writing/tms-scp.zip [email protected]:/publishing
Lệnh trên copy file nguồn /blog/writing/tms-scp.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ó, như chúng tôi đã làm.
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 [email protected]:/blog/writing/tms-scp.zip [email protected]:/publishing
Tổng kết về lệnh SCP trong Linux
Lệnh SCP trong Linux là một trong những phương pháp hiệu quả và an toàn nhất để truyền tệp giữa local và remote được kết nối qua mạng. Cho dù bạn cần SCP từ local đến remote hay thực hiện các thao tác sao chép tệp SSH, hướng dẫn này đều đáp ứng được nhu cầu của bạn.
Luôn nhớ xác minh các hoạt động SCP của bạn để đảm bảo các tệp chính xác đã được chuyển.
Thanks for reading …