Уже несколько раз сталкивался с задачей — забрать / передать файлы на удаленный сервер под Linux естественно работающий только в режиме “консоли”, при этом не имеющий открытых портов с протоколом удаленного доступа и передачи файлов (FTP, SMB), только лишь SSH.
Покапавшись на просторах необъятного, оказалось что решение есть… оно довольно простое и работает прямо “из коробки” и имя ему SCP 💻
SCP (Secure CoPy) – утилита Linux, используемая для безопасного копирования файлов между Linux и Unix хостами.
Посмотрим на базовый синтаксис использования утилиты:
1 |
scp [OPTION(s)] [user@]SRC_HOST:]file1 [user@]DEST_HOST:]file2 |
OPTION(s) – доступные опции:
-1 – в этом случае используется протокол SSH1;
-2 – то же самое, но с версией SSH2;
-B – активация пакетного режима, когда нужно передать сразу пачку файлов;
-C – использовать сжатие при отправке;
-l – установка ограничения в кбит/сек (значение задается пользователем вручную);
-o – добавление опций SSH;
-q – опустить индикатор прогресса и ошибок;
-p – сохранение времени изменений файлов;
-r – использование рекурсивного копирования папок;
-v – переход в более развернутый режим.
[USER@] – если хост удаленный и требуется авторизация (ssh user@host)
SRC_HOST – source host, хост с которого требуется забрать файл
DEST_HOST– source destination, хост на который требуется загрузить файл
SRC_HOST и DEST_HOST вместе используются для передачи файла между удаленными машинами, в случае когда одна из сторон локальный хост, могут быть опущены, в зависимости от ситуации – откуда скачивается файл, с удаленного хоста на локальный или с локального хоста на удаленный.
Пример для закачивания файла на удаленный хост (со сжатием)
1 |
scp -pC /home/user/file1 user@hostname:/home/user2/file1 |
Пример для закачивания директории с удаленного хоста на локальный (рекурсивно)
1 |
scp -pr user@hostname:/home/user2/directory /home/user/ |