Передача файлів мережею може здійснюватися різними способами та за допомогою різних протоколів. Найпоширенішими протоколами для віддаленого копіювання файлів є Rsync, SCP і SFTP. У цьому посібнику ми розглянемо, що таке SCP і як безпечно передавати файли між локальним і віддаленим комп’ютерами за допомогою SCP в Linux і Unix подібних операційних системах.
Що таке SCP?
SCP, розшифровується як Secure Copy, це програма командного рядка для копіювання файлів і каталогів між локальною та віддаленою системою або між двома віддаленими системами безпечним способом у Linux та Unixподібних операційних системах.
Використовуючи scp
команду, ви можете безпечно скопіювати файл або каталог,
- з вашої локальної системи на віддалену систему,
- з віддаленої системи у вашу локальну систему,
- між віддаленими системами з вашої локальної системи.
Під час передачі даних за допомогою команди scp файли та каталоги шифруються. Отже, навіть якщо вашу мережу зламано, зловмисники не зможуть отримати жодних значущих даних.
SCP є компонентом програми openSSH і використовує протокол SSH для безпечної передачі файлів. OpenSSH попередньо встановлено майже в усіх сучасних дистрибутивах Linux і Unix, тому не турбуйтеся про його встановлення.
Застереження
Згідно з офіційним повідомленням розробників openSSH,
Протокол scp є застарілим, негнучким і його нелегко виправити. Натомість ми рекомендуємо використовувати для передачі файлів більш сучасні протоколи, як-от sftp і rsync.
Однак більшість користувачів все ще віддають перевагу SCP перед іншими протоколами. Тому що SCP обробляє віддалену передачу файлів ефективніше, ніж її аналоги, такі як SFTP і Rsync.
Крім того, SCP працює точно так само, як cp
команда, але rsync
змінює свою поведінку залежно від того, чи має вихідний каталог косу риску в кінці чи ні. Подивіться на наступні команди:
rsync source destination/
– скопіює джерело в папку призначення.rsync source/ destination/
– скопіює вміст вихідної папки в папку призначення.
Тож ви завжди повинні ще раз перевірити, чи додали ви косу риску в кінці шляху.
Я особисто використовую Rsync для копіювання файлів великого розміру між двома хостами та SCP для копіювання окремих файлів через мережу.
Синтаксис команди SCP
Загальний синтаксис команди SCP наведено нижче:
scp [-346ABCpqrTv] [-c cipher] [-F ssh_config] [-i identity_file] [-J destination] [-l limit] [-o ssh_option] [-P port] [-S program] source ... target
Залежно від шляху передачі файлу синтаксис буде відрізнятися. Тут я включив приклад формату синтаксису.
Скопіюйте файл із локальної системи у віддалену:
scp <options> SourceFile User@RemoteHost:RemotePath
Так само, щоб скопіювати каталог із вашої локальної системи до віддаленої системи, використовуйте -r
прапорець:
scp -r SourceDirectory User@RemoteHost:RemotePath
Скопіюйте декілька файлів у віддалену систему:
scp <options> SourceFile1 SourceFile2 User@RemoteHost:RemotePath
Скопіюйте файл із віддаленої системи в локальну:
scp <options> User@RemoteHost:RemoteFilePath DestinationFile
Скопіюйте каталог із віддаленої системи в локальну:
scp -r User@RemoteHost:RemoteDirectoryPath DestinationDirectory
Скопіюйте файл з однієї віддаленої системи до іншої віддаленої системи з вашої локальної системи:
scp <options> User@RemoteHost1:RemoteFile1 User@RemoteHost2:RemotePath
Зверніть увагу, що коли ви копіюєте файли між двома віддаленими системами, трафік не проходитиме через локальну систему. Операція відбувається безпосередньо між двома віддаленими системами. Однак ви можете передавати трафік із системи, у якій ви запускаєте команду scp, використовуючи -3
параметр.
Скопіюйте каталог з однієї віддаленої системи в іншу віддалену систему з вашої локальної системи:
scp -r User@RemoteHost1:RemoteDirectory User@RemoteHost2:DestinationPath
Параметри команди SCP
Найбільш часто використовувані параметри команди SCP:
-C
: увімкнути стиснення. Тут C означає стиснення. При використанні цієї опції швидкість передачі даних буде вищою, оскільки дані стискаються. SCP автоматично вмикає стиснення в системі джерела та розпакування в системі призначення.- -c <шифр> : c означає шифр. За замовчуванням SCP використовує метод шифрування AES-128 для шифрування даних. Ви можете змінити метод шифрування за допомогою
-c
опції. -i <identity_file>
: і означає файл ідентифікації або закритий ключ. Як ви вже знаєте, у SSH використовується автентифікація на основі пароля та ключа. Якщо ви хочете використовувати автентифікацію на основі ключа під час передавання файлів, ви можете використовувати параметр -i, щоб указати файл ідентифікації або закритий ключ.-l limit
: l означає обмеження пропускної здатності. Використовуючи цей параметр, ви можете встановити максимальну пропускну здатність, яка використовується для передачі даних. Обмеження має бути зазначено вKbit/s
.- -F <ssh_config> : іноді вам може знадобитися використовувати різні мережі для підключення до ваших систем Linux. Або ви можете перебувати за проксі-сервером. У таких ситуаціях ви можете використовувати інший
ssh_config
файл за допомогою-F
опції. -P port
– P означає порт. Зверніть увагу, що це P у верхньому регістрі. За замовчуванням SSH використовує номер порту 22. Можливо, ви змінили номер порту на хості призначення з міркувань безпеки. У такому випадку вам слід явно вказати новий номер порту за допомогою-P
параметра.- -p : якщо ви хочете зберегти час модифікації, час доступу та режими з оригінального файлу, вам потрібно використовувати параметр -p під час копіювання файлів. Будь ласка, зверніть увагу, що p.
-r
: рекурсивне копіювання цілих каталогів.-B
: B означає пакетний режим. Використовується для вибору пакетного режиму під час передачі файлів. Це запобігає запиту паролів або парольних фраз.-S program
: назва програми, яка буде використовуватися для зашифрованого з’єднання.- -v : v означає багатослівний. Під час використання цієї
-v
опції команда друкуватиме прогрес на екрані термінала. Отже, ви побачите, що саме відбувається під час передачі файлів. Це корисно для налагодження проблем підключення, автентифікації та конфігурації.
SCP має так багато варіантів. Ви можете переглянути довідкові сторінки команди SCP, щоб дізнатися про інші параметри. Подивимось кілька корисних прикладів команд scp.
Важливі зауваження, які слід пам’ятати перед початком
- Ця
scp
команда покладається наssh
безпечну передачу файлів. Отже, ви повинні мати ключ ssh або пароль для автентифікації на віддалених системах. - Щоб мати можливість передавати файли, ви повинні мати дозвіл на читання вихідних файлів і дозвіл на запис у місці призначення.
- Команда
scp
не перевірятиме місце призначення перед записом. Будь-які файли в місці призначення з такою ж назвою буде перезаписано без сповіщення. - Щоб розрізнити локальні та віддалені місця, використовуйте двокрапку (
:
). - Під час передачі великих файлів рекомендується запускати завдання в сеансі Screen або Tmux.
Передача файлів за допомогою SCP у Linux
Як я вже згадував, ми можемо використовувати scp
команду для копіювання файлу або каталогу з локальної системи у віддалену систему і навпаки, а також для копіювання файлів і папок між одним віддаленим комп’ютером на іншому.
1 Скопіюйте файли за допомогою SCP з локальної системи у віддалену систему
Щоб скопіювати файл із локальної системи у віддалену за допомогою scp
команди, виконайте:
$ scp File1.txt [email protected]:/home/ostechnix/
Зразок результату:
[email protected]'s password: File1.txt 100% 104 814.0KB/s 00:00
Розберемо наведену вище команду та подивимося, що робить кожна опція.
File1.txt
– вихідний файл, який потрібно скопіювати до місця призначення.ostechnix
– Ім’я користувача віддаленої системи.192.168.1.40
– IP-адреса віддаленої системи./home/ostechnix/
– Каталог призначення у віддаленій системі. Це абсолютний шлях, куди ми хочемо передати вихідний файл, тобтоFile.txt
.
Ви також можете скопіювати файл і перейменувати його. Наступна команда передає File1.txt
файл до пункту призначення та зберігає файл під іншою назвою myfile.txt
.
$ scp File1.txt [email protected]:/home/ostechnix/myfile.txt
2. Скопіюйте кілька файлів за допомогою SCP з локальної системи у віддалену систему
Щоб перенести декілька файлів із локальної системи на віддалену за допомогою scp
команди, виконайте:
$ scp File1.txt File2.txt [email protected]:/home/ostechnix/
Зразок результату:
[email protected]'s password: File1.txt 100% 104 689.4KB/s 00:00 File2.txt 100% 496 6.3MB/s 00:00
тут,
File1.txt
іFile2.txt
– Ім’я джерел, які буде скопійовано до вказаного місця призначення.[email protected]
– Ім’я користувача та IP-адреса віддаленої системи./home/ostechnix
– Шлях призначення, куди ми хочемо розмістити скопійовані файли.
Якщо файли мають однакові розширення, ви можете використовувати наступні альтернативні команди для досягнення тієї ж мети.
$ scp {File1,File2}.txt [email protected]:/home/ostechnix/
Або
$ scp *.txt [email protected]:/home/ostechnix/
3. Рекурсивне копіювання каталогів за допомогою SCP з локальної системи у віддалену систему
Щоб рекурсивно скопіювати цілий каталог, включаючи підкаталоги та його вміст, із вашої локальної системи до віддаленої системи, використовуйте -r
прапорець, як показано нижче.
$ scp -r Documents/ [email protected]:/home/ostechnix/
Наведена вище команда скопіює весь каталог « Documents
» разом із його вмістом до цільової системи.
тут,
-r
: рекурсивне копіювання файлів і каталогів, включаючи підкаталоги та їх вміст.Documents
: ім’я вихідного каталогу, який ми хочемо скопіювати до місця призначення.[email protected]
: ім’я користувача та IP-адреса віддаленої системи./home/ostechnix
: шлях призначення, куди ми хочемо розмістити скопійований каталог.
4. Передайте файли за допомогою SCP з віддаленої системи в локальну
Пам’ятайте, що ми скопіювали FIle1.txt
у віддалену систему з нашої локальної системи. Скопіюймо його назад у локальну систему.
Щоб скопіювати файл із віддаленої системи в локальну за допомогою scp
, виконайте:
$ scp [email protected]:/home/ostechnix/File1.txt Завантаження/
тут,
[email protected]
: ім’я користувача та IP-адреса віддаленої системи./home/ostechnix/File.txt
: абсолютний шлях до файлу, який ми хочемо скопіювати в локальну систему.Downloads
– Місце, де потрібно зберегти скопійований файл.
5. Передайте кілька файлів за допомогою SCP з віддаленої системи в локальну
Щоб скопіювати кілька файлів із віддаленої системи в локальну систему, вкажіть абсолютний шлях до файлів, які потрібно скопіювати, у фігурних дужках, як показано нижче.
$ scp [email protected]:/home/ostechnix/\{File1.txt,File2.txt\} Downloads/
Наведена вище команда скопіює File1.txt
та File2.txt
з /home/ostechnix/
каталогу віддаленої системи до Downloads
каталогу локальної системи.
Зверніть увагу, що у фігурних дужках після коми немає пробілів .
6. Рекурсивне копіювання каталогів з віддаленої системи в локальну систему
Щоб скопіювати весь каталог, включаючи підкаталоги та його вміст, рекурсивно з віддаленого комп’ютера у вашу локальну систему за допомогою scp
, використовуйте -r
прапорець.
$ scp -r [email protected]:/home/ostechnix/Documents Downloads/
Наведена вище команда скопіює весь каталог Documents
із віддаленої системи до Downloads
каталогу вашої локальної системи.
7. Копіюйте файли за допомогою SCP між двома віддаленими комп’ютерами
Щоб скопіювати файли безпосередньо з однієї віддаленої системи до іншої за допомогою scp
, виконайте:
$ scp [email protected]:/home/senthil/File1.txt [email protected]:/home/kumar/
Вас попросять ввести пароль обох віддалених систем.
тут,
[email protected]
– Ім’я користувача та IP-адреса віддаленої системи з файлу наразі знаходяться./home/senthil/File1.txt
– Назва файлу 1, який копіюється, і його розташування.[email protected]
– Ім’я користувача та IP-адреса віддаленої системи, куди ми хочемо скопіювати файл./home/kumar
– Місце збереження скопійованого файлу у віддаленій системі.
Наведена вище команда скопіює /home/senthil/File1.txt
з віддаленого хоста 192.168.1.40
до /home/kumar/
каталогу на віддаленому хості 192.168.1.20
.
У цьому методі дані будуть передані безпосередньо з однієї віддаленої системи в іншу віддалену систему. Якщо ви хочете спрямувати трафік через машину, на якій виконується команда, використовуйте -3
прапорець, як показано нижче.
$ scp -3 [email protected]:/home/senthil/File1.txt [email protected]:/home/kumar/
8. Увімкніть стиснення під час копіювання файлів за допомогою SCP
Поки що ми передавали файли без їх стиснення. Тепер ми включимо стиснення під час передачі файлів за допомогою -C
прапора.
$ scp -C File1.txt [email protected]:/home/ostechnix/
Прапор -C
увімкне стиснення даних у джерелі та автоматично розпакує дані на стороні призначення.
Увімкнувши стиснення, ви можете значно збільшити швидкість копіювання файлу або передачі.
9. Обмежте пропускну здатність під час передачі файлів за допомогою SCP
Ми можемо обмежити пропускну здатність під час копіювання файлів за допомогою SCP за допомогою -l
прапора. Зверніть увагу, що максимальна пропускна здатність вказана в Кбіт/с. 1 байт = 8 біт. Отже, якщо ви хочете обмежити пропускну здатність до 200 КБ/с, значення -l
буде 1600 (200*8).
$ scp -l 1600 File1.txt [email protected]:/home/ostechnix/
Це корисно під час передачі великих файлів, щоб запобігти обмеженню пропускної здатності SCP.
10. Використовуйте інший порт під час копіювання файлів за допомогою SCP
Як системний адміністратор ви могли змінити порт за замовчуванням свого протоколу SSH на віддалених серверах з міркувань безпеки. У таких випадках ви можете вказати номер порту з -P
прапорцем під час передачі файлів. Будь ласка, зверніть увагу, що це велика літера P.
$ scp -P 2022 File1.txt [email protected]:/home/ostechnix/
11. Використовуйте інший шифр під час копіювання файлів за допомогою SCP
За замовчуванням SCP використовує « AES-128
» для шифрування файлів. Якщо ви бажаєте використати інший шифр, використовуйте -c
прапорець, а потім назву шифру.
Наприклад, якщо ви хочете використовувати шифр ” 3des-cbc
“ , команда буде такою, як показано нижче:
$ scp -c 3des-cbc File1.txt [email protected]:/home/ostechnix/
Щоб переглянути список підтримуваних шифрів, виконайте:
$ ssh -Q cipher localhost | paste -d, -s -
Зразок результату:
3des-cbc,aes128-cbc,aes192-cbc,aes256-cbc,[email protected],aes128-ctr,aes192-ctr,aes256-ctr,[email protected],[email protected],[email protected]
12. Копіювання файлів за допомогою SCP у детальному режимі
Якщо ви хочете знати, що відбувається за лаштунками під час копіювання файлів за допомогою scp, ви можете використовувати -v
позначку. При передачі файлів за допомогою SCP в режимі Verbose покроковий процес виконання команди SCP буде показуватися в терміналі. Це стане в пригоді під час усунення несправностей.
$ scp -v File1.txt [email protected]:/home/ostechnix/
Ви побачите багато вихідних даних під час надсилання файлів у режимі Verbose, як показано в наступних вихідних даних.
13. Передача файлів за допомогою SCP у тихому режимі
Ми можемо передавати файли в тихому режимі з -q
прапорцем. Під час обміну файлами в тихому режимі не показуватиметься хід копіювання, попередження чи діагностичне повідомлення у вихідних даних.
$ scp -q File1.txt [email protected]:/home/ostechnix/
14. Зберігайте атрибути файлів під час передачі файлів за допомогою SCP
Щоб зберегти такі атрибути файлу, як час модифікації файлу, час доступу та режими під час копіювання файлів за допомогою SCP, використовуйте -p
прапорець. Будь ласка, зверніть увагу, що це нижній регістр p.
$ scp -p File1.txt [email protected]:/home/ostechnix/
15. Використовуйте ідентифікаційний файл під час копіювання файлів за допомогою SCP
SSH підтримує автентифікацію як на основі пароля, так і на основі ключа. Автентифікація на основі ключа є найпоширенішим методом автентифікації в середовищах Linux.
Якщо ви хочете використовувати автентифікацію на основі ключа під час передавання файлів, скористайтеся -i
опцією, щоб указати файл ідентифікації або закритий ключ.
$ scp -i my_private_key.pem File1.txt [email protected]:/home/ostechnix/
16. Використовуйте інший файл ssh_config під час передачі файлів за допомогою SCP
Бувають ситуації, коли вам потрібно використовувати різні мережі для підключення до ваших систем Linux. Або ви можете перебувати за проксі-сервером. У таких ситуаціях ви можете використовувати інший ssh_config
файл за допомогою -F
опції.
$ scp -F /home/ostechnix/my_ssh_config File1.txt [email protected]:/home/ostechnix/
17. Копіюйте файли за допомогою SCP за допомогою IPv4 або IPv6
Ми можемо змусити SCP використовувати лише адреси IPv4 або IPv6 під час копіювання файлів. Цього можна досягти шляхом додавання -4
для мереж IPv4 і -6
для мереж IPv6.
$ scp -6 File1.txt [email protected]:/home/ostechnix/
Питання що часто задаються FaQ
Питання 1: Що таке SCP?
Відповідь: SCP — це програма командного рядка для безпечної передачі файлів і каталогів з локальної системи на віддалену систему і навпаки або безпосередньо між двома віддаленими системами.
Питання 2: Як скопіювати файл з локального комп’ютера на віддалений за допомогою SCP?
Щоб скопіювати файл із вашої локальної системи у віддалену систему, команда буде такою:
scp SourceFile.txt User@RemoteHost:/some/remote/directory
Запитання 3: Як рекурсивно копіювати файли та каталоги?
Щоб рекурсивно скопіювати каталог, включаючи підкаталоги, використовуйте -r
прапорець.
scp -r /some/local/directory User@RemoteHost:/some/remote/directory
Запитання 4: чи можу я передати кілька файлів за допомогою SCP?
Так, ти можеш. Просто згадайте імена вихідних файлів через пробіл.
Скопіюйте кілька файлів з локального на віддалений:
scp file1.txt file2.txt file3.txt User@RemoteHost:/some/remote/directory
scp {file1,file2,file3}.txt User@RemoteHost:/some/remote/directory
scp *.txt User@RemoteHost:/some/remote/directory
Скопіюйте кілька файлів з віддаленого на локальний:
scp User@RemoteHost:/some/remote/directory/\{file1.txt,file2.txt,file3.txt\} /some/local/directory
Скопіюйте кілька файлів з віддаленого пристрою на віддалений:
$ scp User@RemoteHost1:/some/remote/directory/\{file1.txt,file2.txt,file3.txt\} User@RemoteHost2:/some/remote/directory/
Питання 5: Як перенести всі файли в каталозі?
Щоб перенести всі файли в каталозі, перейдіть до цього каталогу:
cd dir_name
scp *.txt User@RemoteHost:/some/remote/directory
Питання 6: Чи можна стискати файли?
Так, ти можеш. Використовуйте -C
для стиснення файлів. Файли стискаються в джерелі та автоматично розпаковуються в місці призначення.
scp -C /some/large/file User@RemoteHost:/some/remote/directory
Питання 7: Чи можу я зберегти атрибути файлів?
Щоб зберегти такі атрибути файлу, як час модифікації, час доступу та режими з вихідного файлу, використовуйте -p
прапорець.
scp -p file.txt User@RemoteHost:/some/remote/directory
Питання 8: Чи можу я використовувати інший порт?
Так. SCP дозволяє використовувати інший порт із -P
прапором.
scp -P 2022 file.txt User@RemoteHost:/some/remote/directory
Запитання 9: Чи можу я використовувати інший шифр?
Так, ти можеш. Використовуйте прапорець -c, щоб використовувати інший шифр.
scp -c 3des-cbc Користувач@RemoteHost:/деякий/віддалений/каталог
Запитання 10: Як мені отримати список підтримуваних шифрів SSH?
Щоб переглянути список підтримуваних шифрів SSH і SCP, скористайтеся такою командою
ssh -Q шифр локальний хост | паста -d, -s -
Запитання 11: Чи справді SCP безпечний?
Так, це абсолютно безпечно у використанні. SCP використовує той самий механізм SSH, що й openSSH. Дані, що передаються, шифруються на стороні джерела та розшифровуються на стороні призначення.
Питання 12: Чи можна передавати файли з системи Windows до системи Linux?
Так, ти можеш. Використовуйте будь-яку програму PSCP для передачі файлів із платформи Windows на платформу Linux. Ви також можете використовувати WinSCP.
Висновок
У цьому вичерпному посібнику ми дізналися, що таке SCP і як безпечно передавати файли за допомогою SCP у Linux. Ми надали 17 прикладів команд SCP. Ми також розглянули поширені запитання про SCP.
Незалежно від того, чи є ви адміністратором Linux, чи розробником, чи звичайним користувачем, у якийсь момент вам доведеться копіювати файли у віддалену систему та з неї. Знання того, як використовувати SCP для безпечного копіювання файлів, безумовно, буде корисним.