16 типових команд SCP із прикладами копіювання файлів і папок

SCP тісно пов’язаний з протоколом SSH і справді народився з тієї ж ідеї.

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

Спочатку давайте розберемося, як працює цей SCP, а потім ми побачимо команди scp.

Що таке SCP?

SCP означає протокол безпечного копіювання.

Це безпечний і ефективний метод копіювання файлів і каталогів між локальним і віддаленим хостами або між двома віддаленими хостами.

Він широко використовується для безпечної передачі даних через мережу. SCP покладається на SSH (Secure Shell) для встановлення безпечного з’єднання та шифрування даних під час передачі.

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

Як працює SCP?

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

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

Коли використовувати SCP?

SCP особливо корисний у наступних сценаріях.

Резервне копіювання віддаленого сервера

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

Розгортання додатків

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

Передача великих файлів

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

Безпечний обмін файлами

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

Віддалена співпраця

SCP можна використовувати для безпечного обміну файлами з колегами або членами команди в різних місцях.

Синтаксис команди SCP

Перш ніж почати використовувати команду SCP, давайте почнемо з розуміння основного синтаксису.

Синтаксис команди SCP виглядає так:

scp [options] [source] [destination]

Пояснення синтаксису

Опції

Це додаткові позначки, які змінюють поведінку команди SCP. Ви можете використовувати різні параметри, щоб налаштувати процес передачі. Ось кілька типових варіантів:

-r: рекурсивно копіює каталоги та їхній вміст.
-p: зберегти дозволи, мітки часу та режими вихідного файлу.
-P: вказує номер порту для підключення SSH.
-i: вказує файл закритого ключа для автентифікації SSH.
-C: використовувати стиснення для прискорення передачі даних.
-l: обмежити пропускну здатність, яка використовується для передачі (у Кбіт/с).
-v: докладний режим – відображає повідомлення про налагодження під час передачі.
-o: передає параметр клієнту SSH. Його можна використовувати для вимкнення суворої перевірки ключа хоста.

Джерело

Джерело вказує на файл або каталог, які потрібно скопіювати. Це може бути локальний або віддалений шлях – залежно від контексту.

Пункт призначення

Місце призначення вказує, куди потрібно скопіювати джерело. Як і джерело, це також може бути локальний або віддалений шлях.

Приклади команд

#1. Копіювання файлу з локального на віддалений сервер

scp /path/to/local/file.txt user@remotehost:/path/to/destination/

/path/to/local/file.txt: це вихідний файл, який ви хочете скопіювати з локальної машини.

user@remotehost: замініть користувача іменем віддаленого користувача, а віддалений хост ім’ям хоста або IP-адресою віддаленого сервера.

/path/to/destination/: це шлях призначення на віддаленому сервері, куди буде скопійовано файл.

приклад

У моєму випадку я вибрав один віддалений сервер для передачі файлу.

Ім’я користувача віддаленого хосту – abhishekvarma

Адреса віддаленого хоста – 192.168.29.70

scp /home/vboxuser/Desktop/sample.zip [email protected]:/Users/abhishekvarma/Desktop

Під час підключення до віддаленої машини він запитує пароль. Тут я вибрав файл zip для копіювання.

Вихід

І результат буде виглядати так, якщо під час підключення до віддаленого сервера немає помилок.

sample.zip                                    100%   20KB  717.9KB/s   00:00

#2. Копіювання файлу з віддаленої машини на локальну

scp user@remotehost:/path/to/remote/file.txt /path/to/local/destination/

Як і вище, замініть адресу користувача та віддаленого хоста.

приклад

scp [email protected]:/Users/abhishekvarma/Desktop/sample.zip /home/vboxuser/Desktop

Вихід

Це лише зразок результату в моєму випадку. Мітка часу залежить від швидкості з’єднання.

sample.zip                                    100%   20KB  51.2KB/s   00:00

#3. Рекурсивне копіювання каталогу

scp user@remotehost:/path/to/remote/file.txt /path/to/local/destination/

Тут прапор ‘-r’ повідомляє SCP рекурсивно копіювати каталоги (включаючи підкаталоги та їхній вміст).

приклад

scp -r /home/vboxuser/Desktop [email protected]:/Users/abhishekvarma/Desktop

Тут я згадав увесь каталог для копіювання файлів.

Вихід

sample.zip                                         100%   20KB    1.0MB/s   00:00
Screenshot from 2023-08-13 21-45-23.png            100%   27KB    1.5MB/s   00:00
.swp                                               100%   12KB  894.2KB/s   00:00
.help.swp                                          100%   12KB  780.4KB/s   00:00

#4. Копіювати файли, що відповідають шаблону

scp /path/to/local/*.txt user@remotehost:/path/to/destination/

*.txt – це шаблон підстановки, який відповідає всім файлам із розширенням .txt у вказаному локальному каталозі. Шляхи джерела та призначення ті самі, що й раніше.

приклад

scp /home/vboxuser/Desktop/locfolder/*.png [email protected]:/Users/abhishekvarma/Desktop

Вихід

Тут я спробував із розширенням .png.

Screenshot from 2023-08-13 21-45-23.png            100%   27KB    1.4MB/s   00:00
Screenshot from 2023-08-13 21-55-28.png            100%   24KB    1.7MB/s   00:00
Screenshot from 2023-08-13 22-04-03.png            100%   38KB    2.1MB/s   00:00

#5. Зберігати атрибути файлів

scp -p /path/to/local/file.txt user@remotehost:/path/to/destination/

Тут прапорець ‘-p’ зберігає час модифікації, час доступу та режими вихідного файлу під час копіювання.

приклад

scp -p /home/vboxuser/Desktop/sample.zip [email protected]:/Users/abhishekvarma/Desktop

Вихід

sample.zip                                         100%   20KB    420.0KB/s   00:00

#6. Укажіть інший порт SSH

scp -P 22 /path/to/local/file.txt user@remotehost:/path/to/destination/

Прапор «-P» визначає інший порт SSH (у цьому випадку 22) для підключення SCP. Ви можете використовувати будь-який порт.

приклад

scp -P 22 /home/vboxuser/Desktop/sample.zip [email protected]:/Users/abhishekvarma/Desktop

Вихід

sample.zip                                         100%   20KB    1.2MB/s   00:00

#7. Копіювати зі стисненням

scp -C /path/to/local/file.txt user@remotehost:/path/to/destination/

Цей прапорець «-C» умикає стиснення під час передачі, потенційно зменшуючи розмір переданих даних. Адреси джерела та призначення такі самі, як пояснювалося раніше.

приклад

scp -C /home/vboxuser/Desktop/sample.zip [email protected]:/Users/abhishekvarma/Desktop

Вихід

sample.zip                                         100%   20KB    985.8KB/s   00:00

#8. Детальний висновок для налагодження

scp -v /path/to/local/file.txt user@remotehost:/path/to/destination/

Цей параметр «-v» активує докладний вивід, який надає більш детальну інформацію під час процесу передачі.

приклад

scp -v /home/vboxuser/Desktop/sample.zip [email protected]:/Users/abhishekvarma/Desktop

Вихід

Зразок результату буде виглядати так.

Executing: program /usr/bin/ssh host 192.168.29.70, user abhishekvarma, command scp -v -t /Users/abhishekvarma/Desktop OpenSSH_8.9p1 Ubuntu-3ubuntu0.3, OpenSSL 3.0.2 15 Mar 2022
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: include /etc/ssh/ssh_config.d/*.conf matched no files
debug1: /etc/ssh/ssh_config line 21: Applying options for *
debug1: Connecting to 192.168.29.70 [192.168.29.70] port 22. debug1: Connection established.
debug1: identity file /root/.ssh/id_rsa type -1
debug1: identity file /root/.ssh/id_rsa-cert type -1 debug1: identity file /root/.ssh/id_ecdsa type -1 debug1: identity file /root/.ssh/id_ecdsa-cert type -1 debug1: identity file /root/.ssh/id_ecdsa_sk type -1 debug1: identity file /root/.ssh/id_ecdsa_sk-cert type -1

#9. Копіювати з віддаленого на локальний із детальним виведенням

scp -v user@remotehost:/path/to/remote/file.txt /path/to/local/destination/

Ті самі пояснення, що й у попередньому докладному прикладі, зі зміненими ролями локальних і віддалених місць.

приклад

scp -v [email protected]:/Users/abhishekvarma/Desktop/sample.zip /home/vboxuser/Desktop

Вихід

Вихід буде виглядати так.

Executing: program /usr/bin/ssh host 192.168.29.70, user abhishekvarma, command scp -v -f /Users/abhishekvarma/Desktop/sample.zip OpenSSH_8.9p1 Ubuntu-3ubuntu0.3, OpenSSL 3.0.2 15 Mar 2022
debug1: /etc/ssh/ssh_config line 19: include /etc/ssh/ssh_config.d/*.conf matched no files
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 21: Applying options for *
debug1: Connecting to 192.168.29.70 [192.168.29.70] port 22. debug1: Connection established.
debug1: identity file /root/.ssh/id_rsa type -1
debug1: identity file /root/.ssh/id_rsa-cert type -1 debug1: identity file /root/.ssh/id_ecdsa type -1 debug1: identity file /root/.ssh/id_ecdsa-cert type -1 debug1: identity file /root/.ssh/id_ecdsa_sk type -1 debug1: identity file /root/.ssh/id_ecdsa_sk-cert type -1

#10. Копіювати за допомогою іншого ключа SSH

scp -i /path/to/private_key.pem /path/to/local/file.txt user@remotehost:/path/to/destination/

Цей прапорець «-i /path/to/private_key.pem» визначає інший закритий ключ SSH для автентифікації.

приклад

scp -i /path/to/private_key.pem /home/vboxuser/Desktop/sample.zip [email protected]:/Users/abhishekvarma/Desktop

Вихід

Якщо у вас є приватний ключ, ви можете використовувати його або використовувати ключ за замовчуванням.

sample.zip                                         100%   20KB    1.1MB/s   00:00

#11. Скопіюйте кілька файлів на віддалений сервер

scp file1.txt file2.txt user@remotehost:/path/to/destination/

Ця команда копіює файли file1.txt і file2.txt із локального каталогу до вказаного місця призначення на віддаленому сервері.

приклад

scp  /home/vboxuser/Desktop/image.png  /home/vboxuser/Desktop/sample.zip  [email protected]:/Users/abhishekvarma/Desktop 

Вихід

image.png                                          100%   39KB    1.4MB/s   00:00
sample.zip                                         100%   20KB    1.5MB/s   00:00

#12. Скопіюйте віддалений файл з іншою назвою

scp user@remotehost:/path/to/remote/file.txt /path/to/local/newfilename.txt

Ця команда копіює file.txt з віддаленого сервера в локальний каталог, перейменовуючи його на newfilename.txt у процесі.

приклад

scp [email protected]:/Users/abhishekvarma/Desktop/sample.zip /home/vboxuser/Desktop/newfile.zip

Вихід

Під час виконання цієї команди старе та нове розширення файлів мають бути однаковими.

sample.zip                                         100%   20KB    28.7KB/s   00:00

#13. Копіювання з певним обмеженням пропускної здатності

scp -l 1000 /path/to/local/file.txt user@remotehost:/path/to/destination/

Цей прапорець ‘-l’ визначає обмеження пропускної здатності в Кбіт/с (у цьому випадку 1000 Кбіт/с) для передачі.

приклад

scp -l 300 /home/vboxuser/Desktop/sample.zip [email protected]:/Users/abhishekvarma/Desktop

Вихід

sample.zip                                         100%   20KB    31.3KB/s   00:00
scp -rp /path/to/local/source/ user@remotehost:/path/to/destination/

Прапор ‘-p’ зберігає атрибути файлів, а прапор -r рекурсивно копіює каталоги. Ця команда також зберігає символічні посилання під час копіювання.

приклад

scp -rp /home/vboxuser/Desktop/image.png [email protected]:/Users/abhishekvarma/Desktop

Вихід

image.png                                        100%   39KB    1.8MB/s   00:00

#15. Детальне копіювання файлів зі стисненням

scp -vC /path/to/local/file.txt user@remotehost:/path/to/destination/

Ця команда поєднує в собі докладний вивід (-v) і стиснення (-C) під час передачі файлу.

приклад

scp -vC /home/vboxuser/Desktop/image.png [email protected]:/Users/abhishekvarma/Desktop

Вихід

Вихід буде виглядати так.

scp: debug1: fd 3 clearing O_NONBLOCK
Sending file modes: C0664 40050 image.png
Sink: C0664 40050 image.png
image.png
d 6 clearing O_NONBLOCK
scp: debug1: fd • clearing O_NONBLOCK
image.png
debug1: client_input_channel_req: channel ✪ type exit-status reply debug1: channel 0: free: client-session, channels 1
Transferred: sent 40220, received 2576 bytes, in 0.1 seconds
Bytes per second: sent 352570.0, received 22581.3
root@ubuntu: ~
debug1: Exit status 0
debug1: compress outgoing: raw data 40287, compressed 38198, factor 0.95 debug1: compress incoming: raw data 792, compressed 757, factor 0.96 

#16. Копіювання між двома віддаленими серверами

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

scp user1@remotehost1:/path/to/remote/file.txt user2@remotehost2:/path/to/destination/

Ця команда безпосередньо передає file.txt з віддаленого хосту1 на віддалений хост2.

приклад

scp user1@remotehost1:/path/to/remote/file.txt [email protected]:/Users/abhishekvarma/Desktop

Вихід

file.txt                100%  512KB 512.0KB/s   00:00

Якщо під час передачі виникнуть будь-які помилки або проблеми, на виході можуть відображатися повідомлення про помилки, які містять інформацію про те, що пішло не так.

ssh: connect to host source.example.com port 22: Connection refused
lost connection

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

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

Ось деякі поширені запитання, пов’язані з протоколом SCP, а також відповіді на них.

Чим SCP відрізняється від FTP або SFTP?

FTP означає протокол передачі файлів.

SFTP означає протокол передачі файлів. Обидва вони використовуються для передачі файлів.

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

Коли я повинен використовувати SCP?

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

Чи SCP сумісний з адресами IPv6?

Так, SCP підтримує адреси IPv4 і IPv6, що дозволяє передавати файли через мережі, які використовують будь-яку схему адресації.

Висновок✍️

Сподіваюся, ця стаття допоможе вам дізнатися про SCP і його роботу.

Вам також може бути цікаво дізнатися про команди Linux для системного адміністратора