Sao chép các thư mục và tập tin từ xa sang cục bộ bằng SCP

Sao chép các thư mục và tập tin từ xa sang cục bộ bằng SCP
Shell

Truyền tệp bằng SCP: Hướng dẫn nhanh

Giao thức sao chép an toàn (SCP) là một công cụ tiện dụng để truyền tệp và thư mục giữa các máy từ xa và máy cục bộ. Nếu bạn thường xuyên sử dụng SSH để truy cập máy chủ của mình, việc biết cách sao chép các thư mục và tệp một cách hiệu quả là điều cần thiết để quản lý dữ liệu của bạn.

Trong hướng dẫn này, chúng ta sẽ khám phá cách sử dụng SCP để sao chép thư mục từ xa có tên foo vào máy cục bộ của bạn, đặc biệt là để /nhà/người dùng/Máy tính để bàn. Hướng dẫn này giả định sự hiểu biết cơ bản về các lệnh SSH và terminal.

Yêu cầu Sự miêu tả
scp -r Sao chép một cách an toàn thư mục và nội dung của nó từ máy chủ từ xa sang máy cục bộ theo cách đệ quy.
paramiko.SSHClient() Tạo một phiên bản máy khách SSH bằng Python để hỗ trợ các hoạt động SSH.
scp.get() Sử dụng ứng dụng khách SCP bằng Python để truy xuất các tệp hoặc thư mục từ máy chủ từ xa đến đường dẫn cục bộ.
ansible.builtin.fetch Mô-đun Ansible để tìm nạp tệp từ máy từ xa sang máy cục bộ.
flat: no Tùy chọn trong mô-đun tìm nạp Ansible để duy trì cấu trúc thư mục trong khi sao chép.
validate_checksum: yes Đảm bảo tính toàn vẹn của các tệp được sao chép bằng cách xác thực tổng kiểm tra của chúng.

Hiểu SCP để truyền tệp

Tập lệnh shell được cung cấp minh họa cách sử dụng scp để sao chép một thư mục từ máy chủ từ xa sang máy cục bộ. Đầu tiên, nó xác định các biến cho tên người dùng, máy chủ và thư mục từ xa cũng như thư mục cục bộ. Tập lệnh sau đó sẽ thực thi scp -r lệnh, viết tắt của "sao chép an toàn" và cho phép sao chép đệ quy các thư mục. Cú pháp ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_DIR} chỉ định đường dẫn nguồn, trong khi ${LOCAL_DIR} chỉ định đường dẫn đích trên máy cục bộ. Kịch bản kết thúc bằng cách lặp lại một thông điệp thành công.

Tập lệnh Python đạt được mục tiêu tương tự nhưng sử dụng paramiko thư viện để xử lý các kết nối SSH và scp thư viện để thực hiện sao chép an toàn. Sau khi nhập các thư viện cần thiết, nó đặt các biến cho các thư mục từ xa và cục bộ. Tập lệnh tạo một phiên bản máy khách SSH bằng cách sử dụng paramiko.SSHClient() và kết nối với máy chủ từ xa bằng connect phương pháp. Sau đó nó tạo một cá thể máy khách SCP với số 8 và sử dụng scp.get phương pháp sao chép thư mục từ xa vào máy cục bộ. Cuối cùng, tập lệnh đóng máy khách SCP.

Tự động truyền tệp với Ansible

Playbook Ansible là một phương pháp khác để sao chép tệp từ máy chủ từ xa sang máy cục bộ. Ansible sử dụng cấu hình dựa trên YAML để xác định nhiệm vụ. Playbook bắt đầu bằng cách đặt tên cho tác vụ và chỉ định máy chủ, trong trường hợp này là localhost. Sau đó nó xác định một tác vụ để tìm nạp một thư mục từ xa bằng cách sử dụng ansible.builtin.fetch mô-đun. Các src thuộc tính chỉ định thư mục từ xa, trong khi thuộc tính dest thuộc tính chỉ định đích cục bộ. Các flat: no tùy chọn đảm bảo rằng cấu trúc thư mục được duy trì trong quá trình sao chép.

Các fail_on_missing: yes tùy chọn đảm bảo rằng playbook sẽ bị lỗi nếu thư mục nguồn không tồn tại, cung cấp thêm một lớp xử lý lỗi. Ngoài ra, validate_checksum: yes tùy chọn xác minh tính toàn vẹn của các tệp được sao chép bằng cách kiểm tra tổng kiểm tra của chúng, đảm bảo rằng các tệp được chuyển chính xác và không bị hỏng. Cách tiếp cận này đặc biệt hữu ích để tự động hóa các tác vụ truyền tệp lặp đi lặp lại một cách nhất quán và đáng tin cậy.

Sử dụng SCP để chuyển tập tin từ xa sang cục bộ

Shell Script để truyền tệp SCP

# Copying a remote folder to local directory using SCP
#!/bin/bash
# Define variables
REMOTE_USER="your_username"
REMOTE_HOST="your_server_address"
REMOTE_DIR="/path/to/remote/folder"
LOCAL_DIR="/home/user/Desktop"
# Execute SCP command
scp -r ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_DIR} ${LOCAL_DIR}
echo "Folder copied successfully to ${LOCAL_DIR}"

Tự động chuyển tệp SCP bằng Python

Tập lệnh Python để chuyển SCP tự động

import paramiko
from scp import SCPClient
# Define variables
remote_user = "your_username"
remote_host = "your_server_address"
remote_dir = "/path/to/remote/folder"
local_dir = "/home/user/Desktop"
# Create SSH client and connect
ssh = paramiko.SSHClient()
ssh.load_system_host_keys()
ssh.connect(remote_host, username=remote_user)
# Create SCP client and transfer files
scp = SCPClient(ssh.get_transport())
scp.get(remote_dir, local_dir, recursive=True)
scp.close()

Sử dụng Ansible để quản lý việc truyền tệp SCP

Playbook Ansible để truyền tệp SCP

--- 
- name: Copy folder from remote to local
  hosts: localhost
  tasks:
    - name: Copy remote folder to local directory
      ansible.builtin.fetch:
        src: "/path/to/remote/folder"
        dest: "/home/user/Desktop"
        flat: no
        fail_on_missing: yes
        validate_checksum: yes

Các kỹ thuật và cân nhắc SCP nâng cao

Ngoài việc truyền tệp cơ bản, SCP còn cung cấp một số tính năng và tùy chọn nâng cao có thể vô giá đối với các tác vụ phức tạp hơn. Một tính năng như vậy là khả năng sử dụng các ký tự đại diện để chỉ định nhiều tệp hoặc thư mục. Ví dụ, sử dụng scp user@remote_host:/path/to/files/*.txt /local/path/ sẽ sao chép tất cả các tệp .txt từ thư mục từ xa sang thư mục cục bộ. Điều này có thể tiết kiệm thời gian và hợp lý hóa quy trình công việc khi xử lý nhiều tệp.

Một tính năng hữu ích khác là -P tùy chọn, cho phép bạn chỉ định số cổng cho kết nối SCP. Điều này đặc biệt hữu ích nếu dịch vụ SSH của bạn chạy trên cổng không chuẩn. Ví dụ, sử dụng scp -P 2222 user@remote_host:/path/to/file /local/path/ sẽ kết nối với máy chủ từ xa trên cổng 2222. Ngoài ra, -C tùy chọn có thể được sử dụng để nén dữ liệu trong quá trình truyền, điều này có thể giảm đáng kể thời gian truyền đối với các tệp lớn. Điều này đạt được bằng cách thêm -C vào lệnh SCP, chẳng hạn như trong scp -C user@remote_host:/path/to/largefile /local/path/.

Các câu hỏi thường gặp về việc truyền tệp SCP

  1. Làm cách nào để sao chép toàn bộ thư mục bằng SCP?
  2. Sử dụng lệnh scp -r user@remote_host:/path/to/remote/dir /local/path/ để sao chép đệ quy một thư mục.
  3. Tôi có thể sao chép tập tin từ một cổng cụ thể bằng SCP không?
  4. Có, bạn có thể chỉ định cổng bằng scp -P port_number user@remote_host:/path/to/file /local/path/.
  5. Làm cách nào tôi có thể sao chép nhiều tệp bằng SCP?
  6. Sử dụng các ký tự đại diện như scp user@remote_host:/path/to/files/*.txt /local/path/ để sao chép nhiều tập tin.
  7. Có thể nén tập tin trong quá trình truyền SCP không?
  8. Có, thêm -C tùy chọn cho lệnh SCP của bạn, chẳng hạn như scp -C user@remote_host:/path/to/file /local/path/.
  9. Làm cách nào để xử lý việc truyền tệp lớn bằng SCP?
  10. Sử dụng -C tùy chọn nén tập tin và đảm bảo kết nối ổn định để tránh bị gián đoạn.
  11. SCP có thể được tự động hóa bằng các tập lệnh không?
  12. Có, bạn có thể sử dụng tập lệnh shell, tập lệnh Python hoặc sổ chơi Ansible để tự động chuyển tệp SCP.
  13. Tôi nên làm gì nếu việc chuyển SCP không thành công?
  14. Kiểm tra kết nối mạng, đảm bảo đường dẫn và quyền chính xác cũng như xác minh cấu hình SSH.
  15. SCP có thể tiếp tục quá trình truyền bị gián đoạn không?
  16. Không, SCP không hỗ trợ tiếp tục chuyển giao. Hãy cân nhắc việc sử dụng rsync để tiếp tục chuyển dữ liệu.
  17. Làm cách nào tôi có thể đảm bảo tính toàn vẹn của tệp trong quá trình truyền SCP?
  18. Sử dụng validate_checksum tùy chọn trong Ansible hoặc xác minh tổng kiểm tra theo cách thủ công sau khi chuyển.

Suy nghĩ cuối cùng về việc chuyển giao SCP:

Nắm vững việc sử dụng SCP để truyền tệp giữa các máy từ xa và cục bộ là một kỹ năng cần thiết để quản lý máy chủ hiệu quả. Bằng cách sử dụng tập lệnh shell, tập lệnh Python và sổ chơi Ansible, bạn có thể tự động hóa và đơn giản hóa các tác vụ này, tiết kiệm thời gian và giảm thiểu lỗi. Các tùy chọn nâng cao như sao chép đệ quy, đặc tả cổng và nén dữ liệu sẽ nâng cao hơn nữa tính linh hoạt của SCP. Dù cho hoạt động hàng ngày hay di chuyển dữ liệu quy mô lớn, việc hiểu rõ các kỹ thuật này sẽ đảm bảo việc truyền tệp an toàn và đáng tin cậy.