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
#14. Копіювання файлів і збереження символічних посилань
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 для системного адміністратора