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

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

1. 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]

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.

2. 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 screenkhá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.

3. 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 đó!