SSH (ч.5): Копіювання файлів за допомогою scp та sftp

5 квітня 2023 2 хвилин Автор: Endpool

Копіювання з віддаленого комп’ютера та на віддалений комп’ютер (scp та sftp)

Віддалене керування комп’ютером – це можливість керувати комп’ютером та використовувати його функції на відстані, за допомогою іншого комп’ютера, смартфона або пульта. Ця відстань може сягати від кількох метрів до тисячі кілометрів. Віддалене керування комп’ютером неможливе без застосування спеціального програмного забезпечення – програм віддаленого керування. Це програми або функції операційних систем, що дозволяють отримати віддалений доступ до комп’ютера і здійснювати керування та адміністрування віддаленого комп’ютера в реальному часі. Програми віддаленого адміністрування надають майже повний контроль над віддаленим комп’ютером: вони дають можливість дистанційно керувати робочим столом комп’ютера, можливість копіювання або видалення файлів, запуску додатків тощо. Воно корисно для багатьох сценаріїв, наприклад, для віддаленого доступу до комп’ютера з будь-якої точки світу, для навчання, допомоги технічно незгідним користувачам або для роботи з комп’ютером, який знаходиться в іншому місці.

Пакет OpenSSH включає дві програми, які використовують зашифрований тунель SSH для копіювання файлів через мережу. Перша програма – scp («безпечне копіювання») схожа на програму cp для копіювання файлів. Друга програма для копіювання файлів через SSH – це sftp. Як випливає з її імені, вона є безпечним замінником ftp програм. sftp працює як і оригінальна ftp програма. Проте замість відправлення даних у вигляді простого тексту вона використовує зашифрований тунель SSH. Важливою перевагою sftp перед ftp є те, що для неї не потрібний запущений сервер FTP на віддаленому хості. Для неї потрібний лише SSH сервер. Це означає, що будь-яка віддалена машина, на якій запущено SSH сервер, також може бути використана як FTP-подібний сервер.

Загальне:

  • працюють через SSH з’єднання
  • передають дані зашифрованими каналами
  • не вимагають спеціального сервера або програм на дистанційній машині крім SSH сервера
  • використовують усі можливості SSH, наприклад, автентифікацію за публічним ключем і стиснення даних, що передаються.

Відмінності команд:

  • популярні файлові менеджери розуміють протокол sftp і можуть інтегруватися з цією командою
  • sftp підтримує пакетний режим – файли, в яких послідовність дій визначена послідовністю команд sftp
  • при рекурсивному скачуванні або закачуванні папок, за умовчанням scp слід за символічними посиланнями, а sftp – ні
  • sftp вміє дописувати частково передані файли, якщо відбувся обрив під час передачі великого файлу (налаштовується опцією)
  • scp не працює в інтерактивному режимі, а sftp вміє працювати в інтерактивному режимі та в автоматичному в інтерактивному режимі
  • sftp підтримує синтаксис FTP команд для різних дій у файловій системі (копіювання та переміщення файлів, створення та видалення файлів та папок тощо)

Як користуватися утилітою scp ?

Утиліта scp дуже схожа на програму cp, яка копіює файли в межах локального комп’ютера.  Важливо зрозуміти ключову суть синтаксису scp:

Тобто всього є три елементи у команді. В якості вихідного файлу може бути як файл на локальній системі, так і на віддаленій. Аналогічно, як пункт-призначення може бути як файл на локальній системі, так і на віддаленій. Шлях до локального файлу вказується звичайним способом – так само, як і з програмою cp.

Файл на віддаленій системі може бути вказаний так:

Або у вигляді URI у формі:

Отже, якщо ми копіюємо файл із віддаленої системи на локальну, загальний вигляд команди такий:

Як ./ШЛЯХ/У/ЛОКАЛЬНІЙ/СИСТЕМІ можна вказати просто . (точку) і тоді файл буде скопійовано з поточним ім’ям до поточного робочого каталогу.

Якщо ми копіюємо файл із локальної системи на віддалену, загальний вигляд команди такий:

Синтаксис звернення до віддаленого хоста схожий на SSH: КОРИСТУВАЧ@ХОСТ, відмінність тільки в тому, що після двокрапки вказується шлях до файлу (або просто ім’я файлу). При використанні URI після двокрапки вказується порт (якщо він відрізняється від стандартного), а шлях до файлу вказується після слеша. Розглянемо приклад виконання команди на віддаленій системі та завантажуємо цей файл на локальну систему:

Завантажуємо файл.

У scp команді ВИХІДНИЙ-ФАЙЛ позначений як [email protected]:dirlist.txt – тут до двокрапки йде ім’я користувача на віддаленій системі та адреса хоста – та інформація, яка необхідна для підключення по SSH. Потім двокрапкою відокремлений файл, який має бути завантажений. ПУНКТ-ПРИЗНАЧЕННЯ у цій команді позначений як . (точка) – що означає поточну робочу директорію (у локальній системі).

Тепер розглянемо приклад копіювання файлу з локальної машини на віддалену:

Копіювання файлу.

У команді відправки scp:

  • nfile.txt – ім’я файлу,
  • [email protected] – ім’я користувача та віддалений хост (як у команді підключення по SSH),
  • . (точка) означає, що файл потрібно скопіювати в поточну робочу директорію на віддаленому сервері, при цьому ім’я файлу залишиться незмінним, тобто nfile.txt

Опції та налаштування

Вивантаження на сервер або завантаження з сервера папку

Для рекурсивного копіювання цілих директорій використовують опція -r. Пам’ятайте, що scp слідує за символічними посиланнями, які зустрічаються при обході дерева каталогів.

Збереження мітки часу при передачі через scp

За допомогою опції -p (не плутайте її з опцією -P, яка змінює порт підключення), можна зберегти час модифікації, час останнього доступу до файлу та режими оригінального файлу.

Обмеження швидкість передачі даних у scp

За промовчанням передача файлу відбувається на максимально можливій швидкості. Якщо з якихось причин потрібно зменшити ліміт швидкості, використовуйте опцію -l, після якої вкажіть значення в Kbit/s.

Вказати порт для scp

Вказати інший порт можна за допомогою опції -P ПОРТ. Зверніть увагу, що ця опція написана великою ‘P’, оскільки -p вже зайнята для іншого налаштування (зберігає час та режими файлу).

Також ми можемо скопіювати файл з одного віддаленого хоста на інший віддалений хост. Програма scp вміє копіювати між двома віддаленими хостами. Якщо використовується URI формат, порт можна вказати тільки для цілі, якщо використовується опція -3. За замовчуванням дані копіюються безпосередньо між двома віддаленими хостами. Якщо вказати опцію -3, дані між двома хостами будуть передані через локальний хост. Ця опція вимикає шкалу прогресу.

Ще ми можемо використовувати інший файл налаштування для scp та вказати файл ключів автентифікації. Програма scp працює разом із ssh, тобто підключення відбувається за допомогою ssh та застосовуються всі налаштування цієї програми. ssh має свої параметри за замовчуванням, а також вона зчитує інформацію зі своїх конфігураційних файлів. При бажанні можна вказати інший файл для використання, це робиться опцією -F – вона задає альтернативний конфігураційний файл користувача для ssh. Ця опція безпосередньо передається до ssh. Якщо налаштовано вхід без пароля (за ключом), програма ssh зчитує приватний ключ відповідно до своїх налаштувань або зі шляху за замовчуванням. За допомогою опції -i можна вибрати інший файл із ідентифікатором (приватний ключ) для автентифікації за публічним ключем на сервері. Ця опція також передається безпосередньо в ssh.

Вимкнення суворої перевірки імен файлів можна зробити завдяки опції -T. За замовчуванням при копіюванні файлів з віддаленого хоста в локальний каталог scp перевіряє, чи відповідні імена файлів відповідають тим, які запитуються в командному рядку, щоб запобігти відправленню віддаленим хостом несподіваних або небажаних файлів. Через відмінності в тому, як різні операційні системи та оболонки інтерпретують символи підстановки імені файлу, ці перевірки можуть призвести до відхилення потрібних файлів. Ця опція відключає ці перевірки за рахунок повної довіри, що сервер не надсилатиме несподівані імена файлів.

Опція -q включає тихий режим: відключає шкалу прогресу, а також попередження та діагностичні повідомлення від ssh.

Як користуватися sftp ?

Адресат може бути вказаний як [КОРИСТУВАЧ@]ХОСТ[:ШЛЯХ] або як URI у формі sftp://[КОРИСТУВАЧ@]ХОСТ[:ПОРТ][/ШЛЯХ] Якщо місце призначення містить ШЛЯХ, який є каталогом, sftp автоматично отримає файли, якщо використовується неінтерактивний метод аутентифікації; в іншому випадку це буде зроблено після успішної інтерактивної автентифікації. Якщо шлях не вказано або шлях є каталогом, sftp увійде до системи на вказаному хості і перейде в інтерактивний командний режим, зайшовши у віддалений каталог, якщо він був вказаний. Додаткова кінцева коса характеристика може використовуватися, щоб примусово інтерпретувати шлях як каталог.

Інтерактивні команди sftp

При вході в інтерактивний режим sftp розуміє набір команд, схожих з командами для ftp(1). Команди не чутливі до регістру. Шляхи та імена файлів, які містять пробіли, повинні бути поміщені в лапки. Будь-які спеціальні символи, що містяться всередині імен шляхів, що розпізнаються в glob(3), мають бути екрановані зворотним слешем (”).

  • bye – Вийти зі sftp.
  • cd [ШЛЯХ] – Змінити віддалену директорію на ШЛЯХ. Якщо ШЛЯХ не вказано, то директорію буде змінено на ту, з якої почалася поточна сесія.
  • chgrp [-h] ГРУПА ШЛЯХ – Змінити групу файлів ШЛЯХ на ГРУПА. Якщо вказаний прапор -h, то не буде здійснюватися перехід за символічними посиланнями. Шляхи можуть містити символи підстановки (glob) і можуть відповідати кільком файлам. ГРУПА має бути числовим GID.
  • chmod [-h] РЕЖИМ ШЛЯХ – Змінити права доступу ШЛЯХ на РЕЖИМ. Якщо вказаний прапор -h, то не буде здійснюватися перехід за символічними посиланнями, шляхи можуть містити символи підстановки (glob) і можуть збігатися з кількома файлами.
  • chown [-h] ВЛАСНИК ШЛЯХ – Змінює власника файлу ШЛЯХ на ВЛАСНИК. Якщо вказаний прапор -h, то не буде здійснюватися перехід за символічними посиланнями, шляхи можуть містити символи підстановки (glob) і можуть збігатися з кількома файлами. Власник має бути вказаний цифровим UID.
  • df [-hi] [path] – Показати інформацію про використання файлової системи, що містить поточний каталог (або шлях, якщо вказано). Якщо вказаний прапор -h, інформація про ємність буде відображатися з використанням суфіксів, що «здобочують». Прапор -i запитує відображення інформації про сайт на додаток до інформації про ємність. Ця команда підтримується лише на серверах, які реалізують розширення [email protected].
  • exit – Вийти зі sftp.
  • get [-afPpr] ВІДДАЛЕНИЙ-ШЛЯХ [ЛОКАЛЬНИЙ-ШЛЯХ] – Отримує ВИДАЛЕНИЙ-ШЛЯХ і зберігає цей файл на локальній машині. Якщо ім’я ЛОКАЛЬНИЙ-ШЛЯХ не вказано, файл зберігається його колишнє ім’я, яке він мав на віддаленій машині. ВИДАЛЕНИЙ-ШЛЯХ може містити символи підстановки (glob) і може збігатися з кількома файлами. Якщо це так і вказано ЛОКАЛЬНИЙ ШЛЯХ, то ЛОКАЛЬНИЙ ШЛЯХ має бути директорією. Якщо вказаний прапор -a, то робиться спроба докачати існуючі частково передані файли. Пам’ятайте, що поновлення передбачає, що будь-яка часткова копія локального файлу відповідає дистанційній копії. Якщо вилучений файл містить відмінності від часткової локальної копії, результуючий файл, ймовірно, буде пошкоджений. Якщо вказано прапор -f, тоді після завершення передачі файлу буде викликано fsync(2) для запису файлу на диск (flush the file to disk) – мається на увазі, що файл не просто буде поміщений в кеш і поставлений в чергу на запис, а дійсно у цей момент буде записано на фізичний диск. Якщо вказаний прапорець -P або прапорець -p, тоді також будуть повністю скопійовані права доступу до файлу та мітки часу. Якщо вказаний прапор -r, то директорії будуть скопійовані рекурсивно. Зверніть увагу, що sftp не слідує за символічними посиланнями, коли виконує рекурсивну передачу файлів.
  • help – Показує текст допомоги для використання програмою.
  • lcd [ШЛЯХ] – Змінює робочу директорію на локальній машині (а не на віддаленій!) на ШЛЯХ. Якщо ШЛЯХ не вказано, змінює директорію на домашню папку локального користувача.
  • lls [ОПЦІЇ-ls [ШЛЯХ]] – Показує листинг локальної директорії, вказану як ШЛЯХ або поточної робочої директорії, якщо ШЛЯХ не вказаний. ОПЦІЇ-ls можуть містити будь-які прапори, які підтримуються командою ls на локальній системі. ШЛЯХ може містити символи підстановки (glob) і може відповідати кільком файлам.
  • lmkdir ШЛЯХ – Створює директорію ШЛЯХ на локальній системі.
  • ln [-s] СТАРИЙ-ШЛЯХ НОВИЙ-ШЛЯХ – Створює посилання з СТАРИЙ-ШЛЯХ в НОВИЙ-ШЛЯХ. Якщо вказаний прапор -s, посилання буде символічним, інакше буде жорстким посиланням.
  • lpwd – Друкує поточну робочу директорію на локальній машині.
  • ls [-1afhlnrSt] [ШЛЯХ] – Показує список файлів віддаленої директорії вказаного ШЛЯХУ або поточної директорії, якщо ШЛЯХ не встановлено. ШЛЯХ може містити символи підстановки (glob) і може збігатися з кількома файлами.

Наступні прапори розпізнаються командою ls і відповідно змінюють її поведінку:

  • -1 – Інформація виводиться в один стовпчик.
  • -a – Додає до списку файли, які розпочинаються на точку (‘.’).
  • -f – За замовчуванням використовується лексикографічний порядок сортування.
  • -h – Коли використовується з опцією довгого формату, використовує суфікси одиниць: Байт, Кілобайт, Мегабайт, Гігабайт, Терабайт, Петабайт та Ексабайт, щоб зменшити кількість цифр до чотирьох або менше, використовуючи щаблі 2 для розмірів (K=1024, M=1048576 та. .).
  • -l – Показує додаткові подробиці, включаючи інформацію про дозволи та власника.
  • -n – Створює довгий список з інформацією про користувачів та групи у числовому форматі.
  • -r – Зворотний порядок сортування списку.
  • -S – Сортує список за розміром файлу.
  • -t – Сортує список за часом останньої модифікації.
  • lumask umask – Встановлює локальну umask на umask.
  • mkdir ШЛЯХ – Створює віддалену директорію, визначену як ШЛЯХ.
  • progress – Перемикає відображення індикатора прогресу.
  • put [-afPpr] ЛОКАЛЬНИЙ-ШЛЯХ [ВИДАЛЕНИЙ-ШЛЯХ] – Вивантажує ЛОКАЛЬНИЙ ШЛЯХ зберігає на віддаленій машині. Якщо ім’я ВІДДАЛЕНИЙ-ШЛЯХ не вказано, то файлам дається таке саме ім’я, як і на локальній машині. ЛОКАЛЬНИЙ ШЛЯХ може містити символи підстановки (glob) і може збігатися з кількома файлами. Якщо це так і вказаний ВИДАЛЕНИЙ-ШЛЯХ, то ВИДАЛЕНИЙ-ШЛЯХ має бути директорією. Якщо вказаний прапор -a, то робиться спроба вивантажити існуючі частково передані файли. Пам’ятайте, що поновлення передбачає, що будь-яка часткова копія локального файлу відповідає дистанційній копії. Якщо вилучений файл містить відмінності від часткової локальної копії, результуючий файл, ймовірно, буде пошкоджений. Якщо вказано прапор -f, тоді після завершення передачі файлу буде викликано fsync(2) для запису файлу на диск (flush the file to disk) – мається на увазі, що файл не просто буде поміщений в кеш і поставлений в чергу на запис, а дійсно у цей момент буде записано на фізичний диск. Зверніть увагу, що це підтримується лише серверами, де реалізовано розширення [email protected]. Якщо вказаний прапорець -P або прапорець -p, тоді також будуть повністю скопійовані права доступу до файлу та мітки часу. Якщо вказаний прапор -r, то директорії будуть скопійовані рекурсивно. Зверніть увагу, що sftp не слідує за символічними посиланнями, коли виконує рекурсивну передачу файлів.
  • pwd – Показати віддалену робочу директорію.
  • quit – Вийти зі sftp.
  • reget [-Ppr] ВІДДАЛЕНИЙ-ШЛЯХ [ЛОКАЛЬНИЙ-ШЛЯХ] – Відновити завантаження ВИДАЛЕНИЙ-ШЛЯХ. Еквівалент команди get із встановленим прапором -a.
  • reput [-Ppr] [ЛОКАЛЬНИЙ-ШЛЯХ] ВІДДАЛЕНИЙ-ШЛЯХ – Відновити вивантаження [ЛОКАЛЬНИЙ-ШЛЯХ]. Еквівалент команди put зі встановленим прапором -a.
  • rename СТАРИЙ-ШЛЯХ НОВИЙ-ШЛЯХ – Перейменувати віддалений файл зі СТАРИЙ ШЛЯХ на НОВИЙ ШЛЯХ.
  • rm ШЛЯХ – Видалити видалений файл, вказаний як ШЛЯХ.
  • rmdir ШЛЯХ – Видалити віддалену директорію, вказану як ШЛЯХ.
  • symlink СТАРИЙ-ШЛЯХ НОВИЙ-ШЛЯХ – Створити символічне посилання з СТАРИЙ-ШЛЯХ в НОВИЙ-ШЛЯХ.
  • version – Показати версію протоколу sftp.
  • !КОМАНДА – Виконати КОМАНДУ у локальному шеллі.
  • ! – Символ екранування передачі в локальну оболонку.
  • ? – Синонім для help.

Опції sftp

Наступні опції вказуються у рядку команди запуску клієнта sftp. Вони впливають як запущений sftp в інтерактивної сесії, і без інтерактивного режиму.

  • -a – Виконується спроба продовжити перервані передачі, а не перезаписати існуючі часткові або завершені копіювання файлів. Якщо частковий контент відрізняється від того, який передаватиметься, то результуючі файли швидше за все будуть пошкоджені.
  • -B РОЗМІР_БУФЕРА – Встановлює розмір буфера, який використовує sftp для передачі файлів. Великі буфери вимагають менше циклів обробки рахунок більш високого споживання пам’яті. Значення за умовчанням дорівнює 32 768 байтам.
  • -b ПАКЕТНИЙ_ФАЙЛ – У пакетному режимі зчитується серія команд із введеного пакетного файлу, а не зі стандартного введення. Оскільки тут немає взаємодії з користувачем, цей режим повинен використовуватися з неінтерактивною автентифікацією, щоб уникнути необхідності введення пароля під час підключення. ПАКЕТНИЙ_ФАЙЛ у вигляді ‘-‘ може використовуватися для позначення стандартного введення. Робота sftp буде припинена, якщо будь-яка з наступних команд зазнає невдачі: get, put, reget, reput, rename, ln, rm, mkdir, chdir, ls, lchdir, chmod, chown, chgrp, lpwd, df, symlink та lmkdir . Завершення помилки може бути придушене для кожної команди окремо шляхом додавання до команди префікса із символом «-» (наприклад, -rm /tmp/blah*). Виведення команд може бути придушене, якщо перед нею поставити символ ‘@’. Ці два префікси можуть поєднуватись у будь-якому порядку, наприклад, -@ls /bsd.
  • -C – Увімкнути стиск (через прапор -C в ssh).
  • -D sftp_server_path – Підключитися безпосередньо до локального sftp-сервера (а не через ssh). Ця опція може бути корисною при налагодженні клієнта та сервера.
  • -F КОНФІГУРАЦІЯ_SSH – Вказує альтернативний конфігураційний файл для ssh. Ця опція безпосередньо відправляється до ssh.
  • -f – Потрібно, щоб файли були записані на диск одразу після передачі. При завантаженні файлів ця функція вмикається лише в тому випадку, якщо на сервері реалізовано розширення [email protected].
  • -i ФАЙЛ_ІДЕНТИФІКАЦІЇ – Вибирає файл, з якого читається ідентифікатор (закритий ключ), для автентифікації з відкритим ключем. Ця опція безпосередньо передається до ssh.
  • -l ЛІМІТ – Обмежує використовувану пропускну здатність, вказану в Кбіт/с.
  • -P ПОРТ – Вказує порт для підключення на віддаленому хості.
  • -p – Зберігає час модифікації, час доступу та режими вихідних переданих файлів.
  • -q – Тихий режим: вимикає індикатор виконання, а також попереджувальні та діагностичні повідомлення від ssh.
  • -R КІЛЬКІСТЬ_ЗАПИТІВ – Вказує кількість максимальних запитів, що очікують. Збільшення цього значення може трохи покращити швидкість передачі файлів, але збільшить використання пам’яті. За замовчуванням 64 невиконані запити.
  • -r – Рекурсивно копіювати цілі каталоги при завантаженні та завантаженні. Зверніть увагу, що sftp не слідує за символічними посиланнями, що зустрічаються в обході дерева.
  • -v – Підніміть рівень вербальності. Ця опція також передається до ssh.

SCP та SFTP є не тільки утилітами, а й протоколами. Тобто інші програми можуть підтримувати роботу з ними та використовуватися як зручний графічний інтерфейс. Завдяки цьому ви зможете керувати файлами на сервері, наприклад через FileZilla або звичні файлові менеджери.

Інші статті по темі
Знайшли помилку?
Якщо ви знайшли помилку, зробіть скріншот і надішліть його боту.