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

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

Безпечне копіювання файлів: посібник із використання SCP

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

У цьому посібнику ми розповімо вам про кроки, щоб скопіювати віддалену папку під назвою «foo» у ваш локальний каталог у /home/user/Desktop. Незалежно від того, керуєте ви резервними копіями, розгортаєте код або просто хочете перемістити файли, розуміння команд SCP зробить ваші завдання легшими та ефективнішими.

Команда опис
scp -r Безпечно копіює цілі каталоги з віддаленої машини на локальну.
paramiko.SFTPClient.from_transport() Створює клієнт SFTP з існуючого транспорту SSH.
os.makedirs() Створює каталог рекурсивно, забезпечуючи створення всіх каталогів середнього рівня.
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) Автоматично додає ключ хосту сервера без запиту, корисно для створення сценаріїв.
scp.listdir_attr() Перераховує атрибути файлів у каталозі, увімкнувши функцію рекурсивного копіювання.
paramiko.S_ISDIR() Перевіряє, чи заданий шлях є каталогом, допомагаючи в рекурсивному копіюванні.
scp.get() Копіює файл із віддаленого сервера на локальну машину.

Детальне пояснення сценаріїв SCP

Перший приклад сценарію демонструє використання scp -r команда для копіювання віддаленого каталогу на локальну машину. The scp Команда, що означає протокол безпечного копіювання, є інструментом командного рядка, який використовує SSH для безпечної передачі файлів між віддаленим хостом і локальною машиною. The -r прапорець у команді вказує, що операція має бути рекурсивною, тобто копіюватиметься всі файли та каталоги у вказаному каталозі. Структура команд проста: scp -r user@remote_host:/path/to/remote/folder /home/user/Desktop/. тут, user@remote_host визначає віддаленого користувача та хост, а також /path/to/remote/folder і /home/user/Desktop/ це шляхи джерела та призначення відповідно.

Другий приклад — сценарій оболонки, який автоматизує процес SCP. Цей сценарій визначає змінні для віддаленого користувача, хоста та шляхів, що полегшує повторне використання та зміну. Сценарій використовує scp -r у сценарії Bash для передачі файлів, що допомагає в сценаріях, коли потрібні повторні передачі. Він також містить сповіщення, щоб повідомити користувача про завершення передачі. У третьому прикладі використовується Python із бібліотекою Paramiko, яка особливо корисна для складніших або автоматизованих робочих процесів. Сценарій налаштовує клієнт SSH і використовує paramiko.SFTPClient.from_transport() метод створення сеансу SFTP. Потім він визначає функцію для рекурсивного копіювання файлів з віддаленого сервера в локальний каталог за допомогою scp.listdir_attr() і paramiko.S_ISDIR() для розрізнення файлів і каталогів. Цей підхід корисний для тих, хто віддає перевагу сценаріям на Python і потребує інтеграції функції передачі файлів у більші сценарії автоматизації.

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

Сценарій оболонки для SCP

# Basic SCP command to copy a remote folder to a local directory
scp -r user@remote_host:/path/to/remote/folder /home/user/Desktop/

# Breakdown of the command:
# scp: invokes the SCP program
# -r: recursively copies entire directories
# user@remote_host:/path/to/remote/folder: specifies the user and path to the remote folder
# /home/user/Desktop/: specifies the local destination directory

# Example usage with real values:
scp -r user@example.com:/var/www/foo /home/user/Desktop/

Автоматизація передачі SCP за допомогою сценарію оболонки

Сценарій оболонки для автоматизації SCP

#!/bin/bash
# This script automates the SCP process

# Variables
REMOTE_USER="user"
REMOTE_HOST="remote_host"
REMOTE_PATH="/path/to/remote/folder"
LOCAL_PATH="/home/user/Desktop/"

# Execute SCP command
scp -r ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_PATH} ${LOCAL_PATH}

# Notify user of completion
echo "Files have been copied successfully from ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_PATH} to ${LOCAL_PATH}"

Сценарій Python для передачі файлів SCP

Сценарій Python з використанням бібліотеки Paramiko

import paramiko
import os

# Establish SSH client
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('remote_host', username='user', password='password')

# SCP command
scp = paramiko.SFTPClient.from_transport(ssh.get_transport())

# Define remote and local paths
remote_path = '/path/to/remote/folder'
local_path = '/home/user/Desktop/'

# Function to recursively copy files
def recursive_copy(remote_path, local_path):
    os.makedirs(local_path, exist_ok=True)
    for item in scp.listdir_attr(remote_path):
        remote_item = remote_path + '/' + item.filename
        local_item = os.path.join(local_path, item.filename)
        if paramiko.S_ISDIR(item.st_mode):
            recursive_copy(remote_item, local_item)
        else:
            scp.get(remote_item, local_item)

# Start copy process
recursive_copy(remote_path, local_path)

# Close connections
scp.close()
ssh.close()
print(f"Files have been copied successfully from {remote_path} to {local_path}")

Розширене використання SCP: поради та підказки

Крім основного використання scp для копіювання файлів і каталогів існує кілька передових методів і параметрів, які можуть покращити ваш досвід передачі файлів. Однією з корисних функцій є можливість обмежити пропускну здатність, яка використовується під час передачі, що може бути особливо корисним при роботі з обмеженими мережевими ресурсами. Цього можна досягти за допомогою -l опція, за якою слідує обмеження пропускної здатності в кілобітах на секунду, наприклад, scp -r -l 1000 user@remote_host:/path/to/remote/folder /home/user/Desktop/. Ще одна корисна опція - це -C прапорець, який дозволяє стискати, потенційно прискорюючи передачу великих файлів.

Безпека — ще один важливий аспект, який слід враховувати під час використання scp. Поки scp за своєю суттю використовує SSH для безпечних передач, є додаткові кроки, які ви можете зробити для підвищення безпеки. Наприклад, використання ключів SSH для автентифікації замість паролів може значно підвищити безпеку та зручність. Крім того, ви можете вказати інший порт SSH за допомогою -P якщо ваш сервер не використовує стандартний порт 22. Наприклад, scp -P 2222 -r user@remote_host:/path/to/remote/folder /home/user/Desktop/ дозволяє підключитися до сервера, на якому працює SSH на порту 2222.

Поширені запитання та відповіді про SCP

  1. Як скопіювати файл з локального на віддалений за допомогою SCP?
  2. Ви можете використовувати scp local_file user@remote_host:/path/to/remote/directory.
  3. Як я можу перевірити хід передачі SCP?
  4. Використовувати -v опція для ввімкнення докладного режиму: scp -v -r user@remote_host:/path/to/remote/folder /home/user/Desktop/.
  5. Чи можу я зберегти атрибути файлів під час використання SCP?
  6. Так, використовуйте -p можливість зберегти час модифікації, час доступу та режими: scp -p -r user@remote_host:/path/to/remote/folder /home/user/Desktop/.
  7. Як використовувати SCP з іншим ключем SSH?
  8. Укажіть ключ SSH за допомогою -i варіант: scp -i /path/to/key -r user@remote_host:/path/to/remote/folder /home/user/Desktop/.
  9. Як передавати великі файли за допомогою SCP?
  10. Використовувати -C варіант для стиснення і -l можливість обмеження пропускної здатності: scp -C -l 1000 -r user@remote_host:/path/to/remote/folder /home/user/Desktop/.
  11. Як передати файли за допомогою SCP через інший порт SSH?
  12. Використовувати -P опція вказати порт: scp -P 2222 -r user@remote_host:/path/to/remote/folder /home/user/Desktop/.
  13. Чи може SCP обробляти символічні посилання?
  14. Так, -r опція копіює символічні посилання, а також файли та каталоги.
  15. Що станеться, якщо передачу SCP перервати?
  16. Повторно запустіть scp команда для відновлення передачі; він пропустить файли, які вже були скопійовані.
  17. Як використовувати SCP із паролем у сценарії?
  18. Замість цього рекомендується використовувати ключі SSH, але ви можете використовувати такі інструменти, як sshpass для автентифікації пароля в скриптах.

Останні думки щодо використання SCP

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