Làm thế nào sử dụng SCP command để chuyển file

Biết cách chuyển file an toàn rất quan trọng, đặc biệt khi bạn đang thuê VPS. Bạn có thể làm vậy dễ dàng bằng SCP command. Trong bài này, chúng tôi sẽ chỉ bạn cách dùng SCP commands và cách hoạt động của nó.

SCP commands chính xác là gì? Dựa trên Berkeley Software Distribution (BSD) Remote Copy Protocol (RCP), 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. Để dễ hiểu SCP giống như một kết hợp giữa RCP và SSH (Secure Shell). Nó dựa trên RCP để thực hiện thao tác copy, và SSH để mã hóa mọi thông tin truyền đi, và chứng thực máy tính từ xa là đúng máy cần truyền.

Lập trình viên full stack thường sử dụng SCP command vì tính an toàn và bảo mật của nó, lại không phải dựa vào hosting bên thứ 3 như Github. Đây là cách dễ nhất để giữ dữ liệu của bạn không bị “trưng ra” cho packet sniffer (đánh cắp dữ liệu trên internet).

Nhưng không giống Rsync, bạn chỉ cần biết lệnh SCP với username và password hoặc passphrase là có thể chuyển file được rồi. Nó đơn giản hóa cả quá trình này, và bạn không phải đăng nhập vào bất kỳ máy tính nào.

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 username@IP]:/[destination directory]

Có thể trông hơi phức tạp, nhưng đừng lo, chúng tôi sẽ giải thích từng thành một!

Trong ví dụ trên, chúng tôi thực hiện chuyển file giữa 2 VPS server.

  • [other options] là tham số bạn có thể thêm vào SCP command. Chúng tôi sẽ tổng hợp các tham số phổ biến nhất cho bạn sau
  • [source username@IP] là username và IP của máy có file bạn muốn. Nó sẽ giống có dnag5 root@123.123.123.12
  • :/ 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 /users/Edward/Desktop/SCP.png
  • [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

Trong ví dụ của chúng tôi nó sẽ trông như sau:

scp -p root@162.168.1.1:/media/scp.png edward@162.168.1.2:/desktop/destination

Vậy thôi, đơn giản quá phải không! Nếu bạn đang copy từ máy local, bạn sẽ không cần nhập địa chỉ IP, đường dẫn sẽ có dạng like /desktop/folder_name.

Ngoài ra bạn còn có các lựa chọn nhập tham số để tùy chỉnh lệnh SCP. Có gần 20 tùy chỉnh bạn có thể dùng. Những cách dùng phổ biến nhất là:

  • –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ầu 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 tính từ xa 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 user@yourserver.servername.domain

Pro tip: lựa chọn này có giá trị mặc định là –overwrite [yes], vì vậy trừ khi bạn ghi là –overwrite no hay –overwrite ask trong scp command, 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.

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.

Copy Files bằng SCP Command Linux

Điểm tuyệt vời nhất của SCP là nó cho chuyển file giữa 2 host, hoặc giữa host và máy local. Hãy xem cách dùng SCP linux như thế nào trong cả 2 trường hợp nhé.

Copy file local lên máy từ xa

Chúng ta sẽ copy một file có tên scp.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/Edward/desktop/scp.zip root@191.162.0.2:/writing/article

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@191.162.0.2’s password:
novel3.zip   100% 0 0.0KB/s 00:00

Nhưng hãy cứ cho là máy tính từ xa đã cấu hình để nhận kết nối 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/Edward/desktop/scp.zip root@191.162.0.2:/writing/article

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/Edward/desktop/scp.zip root@191.162.0.2:/writing/article/howtoscp.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/Edward/desktop root@191.162.0.2:/writing/article

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. Lần này, chúng tôi đang copy file scp.zip từ máy chủ từ xa đến máy local:

scp root@191.162.0.2:/writing/articles/SCP.zip Users/Edward/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@191.162.0.2:/writing/article/scp.zip edward@11.10.0.1:/publishing

Lệnh trên copy file nguồn /writing/article/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 root@191.162.0.2:/writing/article/scp.zip edward@11.10.0.1:/publishing

Vậy thôi, xong rồi đó!

Lời kết

Trong bài này, bạn đã học được 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.

Hơn nữa, nó còn mã hóa mọi dữ liệu truyền đi bằng secure shell, đảm bảo thông tin an toàn không bị xâm nhập.

Author
Tác giả

Hai G.

Hải G. là chuyên gia quản lý, vận hành các dịch vụ website. Anh có nhiều năm kinh nghiệm về VPS, Hosting, technical SEO, CMS. Đặc biệt yêu thích WordPress và đã dùng nó hơn 5 năm nay. Sở thích của anh là đọc, viết blog, đi du lịch và tư vấn cho các bạn trẻ khởi nghiệp.