Có thể nói rằng SCP là protocol có độ an toàn cao nhất ở màn hình security, do sử dụng SSH, tương tự SFTP.
SCP được cho là tốc độ truyền nhanh hơn so với SFTP, nhưng nếu sử dụng SCP này thì cần có shell của hệ UNIX cho server. Khi tạo web server, trong hầu hết server đang có shell, nhưng mình không biết được có sell của hệ UNIX hay không. Vì vậy, cũng có trường hợp chỉ có thể gửi file bằng SFTP.
SCP thường được cài ở gần như tất cả các server Linux kernel, vì vậy deploy đơn giản hơn Rsync, ko phải server nào cũng cài.
Lệnh mẫu
Chi tiết về các tham số trong lệnh:
1. scp: Đây là lệnh sử dụng để sao chép tệp hoặc thư mục từ một máy tính (local) sang một máy tính khác (remote) qua giao thức SSH (Secure Copy Protocol).
2. -r: Tham số -r (recursive) giúp sao chép thư mục và tất cả các tệp con bên trong thư mục đó. Nếu bạn không sử dụng tham số này, scp chỉ sao chép các tệp đơn lẻ.
3. -q: Tham số -q (quiet) giúp scp chạy mà không hiển thị thông báo quá trình sao chép. Điều này có nghĩa là bạn sẽ không thấy các thông báo chi tiết như “copying file” trong quá trình sao chép.
4. -i ~/your/key: Tham số -i chỉ định tệp khóa SSH (private key) để xác thực với máy chủ từ xa thay vì sử dụng mật khẩu. Trong đó ~/your/key là đường dẫn đến tệp khóa cá nhân (private key) mà bạn sử dụng để kết nối SSH tới server.
5. -P 22: Tham số -P chỉ định cổng SSH để kết nối tới máy chủ từ xa. Trong trường hợp này, cổng được chỉ định là 22 (cổng mặc định của SSH). Lưu ý: Cần phải viết chữ hoa -P vì -p là tham số cho việc bảo vệ quyền của tệp.
6. app: Đây là thư mục (hoặc tệp) trên máy cục bộ mà bạn muốn sao chép. Trong trường hợp này, app là thư mục mà bạn muốn gửi tới server từ xa.
7. "user@host:/home/directory": Đây là nơi bạn muốn sao chép thư mục app tới trên server từ xa. Trong đó:
• user: là tên người dùng (username) trên server từ xa.
• host: là địa chỉ IP hoặc tên miền của máy chủ từ xa.
• /home/directory: là thư mục đích trên server từ xa mà bạn muốn sao chép dữ liệu vào. Thư mục này phải tồn tại và bạn cần có quyền ghi vào đó.
8. || { echo "Deploy failed"; exit 1; }:
• || là toán tử logic trong shell, có nghĩa là “hoặc”. Nếu lệnh phía trước (scp) thất bại (tức là trả về mã lỗi khác 0), lệnh phía sau sẽ được thực thi.
• { echo "Deploy failed"; exit 1; } là một khối lệnh shell:
• echo "Deploy failed": Hiển thị thông báo “Deploy failed” nếu lệnh scp không thành công.
• exit 1: Thoát khỏi script với mã lỗi 1 (thường dùng để báo lỗi).
Ví dụ thực tế
Nếu bạn có một thư mục ứng dụng app trên máy tính của mình và muốn sao chép nó tới thư mục /home/directory trên máy chủ từ xa, sử dụng khóa SSH để xác thực, lệnh này sẽ làm việc mà không cần nhập mật khẩu. Nếu có lỗi, bạn sẽ thấy thông báo “Deploy failed”.
Lệnh trên cũng có thể được đưa vào quy trình CI/CD, ví dụ Gitlab CI, khai báo lệnh trên vào tập lệnh .gitlab-ci.yml cũng sẽ cung cấp action tương tự.
Đăng nhận xét