Копіювання папок і файлів з віддаленого на локальний за допомогою SCP

Копіювання папок і файлів з віддаленого на локальний за допомогою SCP
Shell

Передача файлів за допомогою SCP: короткий посібник

Протокол безпечного копіювання (SCP) — це зручний інструмент для передачі файлів і каталогів між віддаленими та локальними машинами. Якщо ви часто використовуєте SSH для доступу до свого сервера, для керування вашими даними важливо знати, як ефективно копіювати папки та файли.

У цьому посібнику ми розглянемо, як використовувати SCP для копіювання віддаленої папки під назвою фу до вашої локальної машини, зокрема до /home/user/Desktop. Цей підручник передбачає базове розуміння SSH і команд терміналу.

Команда опис
scp -r Безпечно рекурсивно копіює каталог і його вміст із віддаленого хоста на локальний комп’ютер.
paramiko.SSHClient() Створює екземпляр клієнта SSH у Python для полегшення операцій SSH.
scp.get() Використовує клієнт SCP у Python для отримання файлів або каталогів із віддаленого хоста на локальний шлях.
ansible.builtin.fetch Ansible модуль для отримання файлів з віддалених машин на локальну.
flat: no Опція в модулі вибірки Ansible для збереження структури каталогів під час копіювання.
validate_checksum: yes Забезпечує цілісність скопійованих файлів шляхом перевірки їх контрольних сум.

Розуміння SCP для передачі файлів

Наданий сценарій оболонки демонструє, як використовувати scp щоб скопіювати папку з віддаленого сервера на локальну машину. По-перше, він визначає змінні для віддаленого імені користувача, хоста та каталогу, а також локального каталогу. Потім сценарій виконує scp -r Команда, яка розшифровується як "захищена копія" та дозволяє рекурсивне копіювання каталогів. Синтаксис ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_DIR} вказує вихідний шлях, while ${LOCAL_DIR} вказує шлях призначення на локальній машині. Сценарій завершується відтворенням повідомлення про успіх.

Сценарій Python досягає тієї ж мети, але використовує paramiko бібліотека для обробки з’єднань SSH і scp бібліотеку для виконання безпечного копіювання. Після імпорту необхідних бібліотек він встановлює змінні для віддаленого та локального каталогів. Сценарій створює екземпляр клієнта SSH за допомогою paramiko.SSHClient() і підключається до віддаленого сервера за допомогою connect метод. Потім він створює екземпляр клієнта SCP з SCPClient(ssh.get_transport()) і використовує scp.get метод копіювання віддаленого каталогу на локальну машину. Нарешті, сценарій закриває клієнт SCP.

Автоматизація передачі файлів за допомогою Ansible

Ansible playbook — ще один метод копіювання файлів з віддаленого сервера на локальну машину. Ansible використовує конфігурацію на основі YAML для визначення завдань. Посібник починається з назви завдання та визначення хостів, якими в даному випадку є localhost. Потім він визначає завдання отримати віддалену папку за допомогою ansible.builtin.fetch модуль. The src атрибут визначає віддалений каталог, тоді як атрибут dest Атрибут визначає локальне місце призначення. The flat: no гарантує збереження структури каталогів під час копіювання.

The fail_on_missing: yes опція гарантує, що підручник не працюватиме, якщо вихідний каталог не існує, надаючи додатковий рівень обробки помилок. Крім того, validate_checksum: yes опція перевіряє цілісність скопійованих файлів шляхом перевірки їхніх контрольних сум, гарантуючи, що файли передано правильно та без пошкоджень. Цей підхід особливо корисний для автоматизації повторюваних завдань передачі файлів послідовним і надійним способом.

Використання SCP для передачі файлів з віддаленого на локальний

Сценарій оболонки для передачі файлів 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}"

Автоматизація передачі файлів SCP за допомогою Python

Сценарій Python для автоматизованої передачі SCP

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()

Використання Ansible для керування передачею файлів SCP

Ansible Playbook для передачі файлів 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

Розширені методи SCP та міркування

Крім базової передачі файлів, SCP пропонує кілька розширених функцій і параметрів, які можуть бути безцінними для складніших завдань. Однією з таких функцій є можливість використання символів узагальнення для визначення кількох файлів або каталогів. Наприклад, використовуючи scp user@remote_host:/path/to/files/*.txt /local/path/ скопіює всі файли .txt із віддаленого каталогу до локального каталогу. Це може заощадити час і спростити робочі процеси під час роботи з великою кількістю файлів.

Ще одна корисна функція -P параметр, який дозволяє вказати номер порту для підключення SCP. Це особливо зручно, якщо ваша служба SSH працює на нестандартному порту. Наприклад, використовуючи scp -P 2222 user@remote_host:/path/to/file /local/path/ підключатиметься до віддаленого хосту через порт 2222. Крім того, -C опцію можна використовувати для стиснення даних під час передачі, що може значно скоротити час передачі великих файлів. Це досягається шляхом додавання -C до команди SCP, наприклад in scp -C user@remote_host:/path/to/largefile /local/path/.

Поширені запитання про передачу файлів SCP

  1. Як скопіювати весь каталог за допомогою SCP?
  2. Використовуйте команду scp -r user@remote_host:/path/to/remote/dir /local/path/ для рекурсивного копіювання каталогу.
  3. Чи можу я копіювати файли з певного порту за допомогою SCP?
  4. Так, ви можете вказати порт за допомогою scp -P port_number user@remote_host:/path/to/file /local/path/.
  5. Як я можу скопіювати кілька файлів за допомогою SCP?
  6. Використовуйте символи підстановки, наприклад scp user@remote_host:/path/to/files/*.txt /local/path/ для копіювання кількох файлів.
  7. Чи можна стискати файли під час передачі SCP?
  8. Так, додати -C параметр вашої команди SCP, як-от scp -C user@remote_host:/path/to/file /local/path/.
  9. Як передавати великі файли за допомогою SCP?
  10. Використовувати -C можливість стиснення файлів і забезпечення стабільного з’єднання для запобігання перебоїв.
  11. Чи можна SCP автоматизувати за допомогою сценаріїв?
  12. Так, ви можете використовувати сценарії оболонки, сценарії Python або підручники Ansible для автоматизації передачі файлів SCP.
  13. Що робити, якщо передача SCP не вдається?
  14. Перевірте підключення до мережі, переконайтеся, що шлях і дозволи правильні, а також перевірте конфігурацію SSH.
  15. Чи може SCP відновити перервану передачу?
  16. Ні, SCP не підтримує відновлення передачі. Розгляньте можливість використання rsync для відновлюваних передач.
  17. Як я можу забезпечити цілісність файлу під час передачі SCP?
  18. Використовувати validate_checksum параметр у Ansible або перевірити контрольні суми вручну після передачі.

Останні думки щодо передачі SCP:

Опанування використання SCP для передачі файлів між віддаленими та локальними машинами є важливою навичкою для ефективного керування сервером. Використовуючи сценарії оболонки, сценарії Python і підручники Ansible, ви можете автоматизувати та спростити ці завдання, заощадивши час і зменшивши кількість помилок. Розширені параметри, такі як рекурсивне копіювання, специфікація порту та стиснення даних, ще більше підвищують універсальність SCP. Розуміння цих методів гарантує безпечну та надійну передачу файлів, незалежно від того, чи це стосується щоденних операцій чи великомасштабної міграції даних.