Команды linux and scp

Копирование файлов scp

Если у вас есть домашний сервер или сервер в интернете, то вам понадобится способ для безопасного перемещения файлов между машинами. Между локальными машинами мы могли бы просто переносить данные с помощью флешки, но на удаленный сервер нужно передавать данные только через сеть. Есть много способов реализации этой задачи.

В этой статье мы рассмотрим как выполняется копирование файлов с помощью утилиты scp (Secure Copy Command), а также что из себя представляет команда Linux scp. При передаче файлы шифруются, так что больше никто не сможет получить к ним доступ и самое интересное, что вам не нужно настраивать FTP или другое дополнительное программное обеспечение. Будет достаточно сервера SSH.

Что такое SCP?

Команда scp — это утилита, которая работает по протоколу SSH, а значит, все что вам нужно для передачи файла на компьютер, это чтобы на нем был запущен SSH сервер, а также вы должны знать логин и пароль для подключения к нему. С помощью команды scp вы можете не только перемещать файлы между локальной и удаленной системой, но и между двумя удаленными системами. Для этого тоже будет достаточно знать пароли от них. И в отличие от Rsync вам не нужно авторизоваться на одном из серверов.

Копирование файлов scp

Эта статья рассчитана в первую очередь на начинающих, поэтому я попытаюсь объяснять все как можно подробнее. Перед тем, как мы перейдем к практике, нужно рассмотреть общий синтаксис команды:

$ scp опции пользователь1@хост1 : файл пользователь2@хост2: файл

Опции утилиты больше касаются протокола SSH и настраивают общее ее поведение. Дальше следует адрес первого и второго файла. Каждый из них может быть расположен как на локальной, так и на удаленной машине. А теперь рассмотрим основные опции, которые могут нам понадобиться:

  • -1 — использовать протокол SSH1;
  • -2 — использовать протокол SSH2;
  • -B — пакетный режим для передачи нескольких файлов;
  • -C — включить сжатие;
  • — l — установить ограничение скорости в кбит/сек;
  • -o — задать нужную опцию SSH;
  • -p — сохранять время модификации;
  • -r — рекурсивное копирование директорий;
  • -v — более подробный режим.

scp /home/sergiy/file root@losst.pro:/root/

В качестве пользователя нужно использовать любого пользователя, который есть на сервере. Вместо IP вы можете также домен сервера. Только необходимо, чтобы у выбранного пользователя были права записи в указанную папку.

С помощью опции -r вы можете скопировать на удаленную машину целый каталог. Команда будет выглядеть вот так:

Читайте также:  Linux file systems compression

scp -r /home/sergiy/photos root@losst.pro:/root/

Убедитесь, что у исходного каталога нет косой черты, а у каталога назначения она должна обязательно быть. Немного изменив синтаксис с косой чертой можно передать все файлы из каталога на удаленный сервер:

scp -r /home/sergiy/photos/* root@losst.pro:/root/

Если поменять местами локальный путь и сервер, то вы сможете копировать файлы scp c удаленного сервера на локальный компьютер:

scp root@losst.pro:/root/file /home/sergiy/

Таким же самым образом вы можете копирование файлов scp или папок с сервера:

scp -r root@losst.pro:/root/photos /home/sergiy/

Обратите внимание, что папка, в которую вы собираетесь копировать должна завершаться косой чертой, иначе папка, которую вы копируете запишется вместо той, в которую нужно скопировать.

Чтобы скачать файл scp из одного сервера на другой, просто необходимо указать данные аутентификации на каждом из них. Например, скопируем один файл:

scp root@losst.pro:/home/root/index.html root@losst.pro:/home/root/www/

Скопируем папку с того же удаленного сервера:

scp root@losst.pro:/root/photos root@losst.pro:/home/root/www/

Выводы

В этой статье мы рассмотрели как выполняется передача файлов scp, как это работает и что вы можете сделать с помощью этой утилиты. Как вы видите, перемещать файлы с одного сервера на другой очень просто. В Linux достаточно понять основы чтобы начать работать эффективнее! А команда scp один из таких инструментов.

Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.

Похожие записи

Оцените статью

Об авторе

Основатель и администратор сайта losst.ru, увлекаюсь открытым программным обеспечением и операционной системой Linux. В качестве основной ОС сейчас использую Ubuntu. Кроме Linux, интересуюсь всем, что связано с информационными технологиями и современной наукой.

28 комментариев к “Копирование файлов scp”

а почему в описании команды описание опций два раза повторяются?
-1 — использовать протокол SSH1;
-2 — использовать протокол SSH2;
-B — пакетный режим для передачи нескольких файлов;
-C — включить сжатие;
— l — установить ограничение скорости в кбит/сек;
-o — задать нужную опцию SSH;
-p — сохранять время модификации;
-r — рекурсивное копирование директорий;
-v — более подробный режим. И почему не указана опция -Р для порта, отличного от 22 ? Ответить

Копирую с одного удаленного хоста на другой. На исходном ssh работает на 22-м порту, на целевом хосте — на альтернативном.
Т.е. получается такая строка:
scp user@192.168.3.33:/path/file -P 2222 user@192.168.4.33:/path/file
При этом получаю сообщение: ssh: connect to host 192.168.4.33 port 22: Network is unreachable
Т.е. опция выбора порта не срабатывает. Как сделать, чтобы сработало? Ответить

Сначала -P а потом уже хост. Если ты с 192.168.3.33 хочешь на 192.168.4.33 залить, то тебе надо зайти по SSH на 192.168.3.33 $ ssh root@192.168.3.33
$ cd /path/
$ scp -P 2222 file user@192.168.4.33:/path Ответить

А можно ли не копировать а перемещаться(скопировать с сервера и на нём же удалить) ?
А то не хочется сначала копировать, а потом удалять на сервере. Что то типа mv только для этой темы. Ответить

Читайте также:  Network speed testing linux

Кто знает скрипт для того, чтобы копирование происходило автоматиески с хоста в определенное время? Ответить

Этого недостаточно.
Ведь там же потребует пароль при вводе
А в этом уже поможет утилита sshpass Ответить

Добрый день! объясните в чем проблема?
Я понимаю, что в ключах но как мне подсоединить их к локальной машине или я что то не то?
root@ip-172-31-47-98:/home/ubuntu# scp /users/desktop/webapp.7z root@18.185.120.144:/home/
root@18.185.120.144: Permission denied (publickey).
lost connection Ответить

«Обратите внимание, что папка, в которую вы собираетесь копировать должна завершаться косой чертой, иначе папка, которую вы копируете запишется вместо той, в которую нужно скопировать.» — не увидел влияние слеша на процесс копирования (CentOS 8) — что с ним, что без него папка-источник целиком помещается в папку назначения без затирания папки назначения, либо каких бы то ни было файлов в ней. Это из-за различий в используемых дистрибутивах? Ответить

Кто-то пробовал через scp реализовать примерно следующее? На одном сервере происходит обновление некоего файла, к примеру сертификата.
После этого нужно скопировать файл на другой сервер.
На исходном сервере сгенерирован ключ для ssh с помощью ssh-keygen.
Команда вида
scp -i /etc/letsencrypt/live/example.org/fullchain.pem user@webserver:/home/user/ssl/example.org
отрабатывает успешно
Но если указать команду в виде
scp -i /etc/letsencrypt/live/example.org/fullchain.pem user@webserver:/etc/letsencrypt/live/example.org
то получаем
Permission denied
В принципе логично.
На целевом сервере (Ubuntu) используется механизм sudo. А ключ для ssh сгенерирован для текущего пользователя.
Если генирировать через команду sudo ssh-keygen, то ключ будет для пользователя root. Но как такового пользователя нет в системе, и в команде его не использовать.
Как-то можно с помощью scp использовать sudo для того, чтобы положить файлы в системные каталоги? Ответить

Наверное лучше всего смотреть на следующий вариант:
1. Копируем файлы с помощью scp
sudo scp /etc/letsencrypt/live/example.org/fullchain.pem user@webserver:/home/user/ssl/example.org/
2. Настраиваем беспарольный доступ на sudo пользователю с помощью visudo (тут можно тонко выбрать разрешения, в общем поиграться)
3. Используем команду вида
sudo ssh user@webserver sudo cp /home/user/ssl/example.org/fullchain.pem /etc/ssl/example.org/ Как то примерно так.
Можно еще настроить через rsync, тоже с настройкой разрешений через visudo, но не стал пробовать.
Хочется обойтись минимумом ПО. Ответить

Источник

Команда SCP Linux: безопасное копирование и передача файлов

img

SCP включает шифрование через соединение SSH (Secure Shell). Это гарантирует, что даже если данные будут перехвачены, они будут защищены.

Команда SCP Linux: безопасное копирование и передача файлов

Как безопасно копировать файлы с помощью SCP

Копировать файл с локального на удаленный сервер с помощью SCP

Команда scp позволяет использовать подстановочные знаки.

Используйте символ тильды ~/ для обозначения home/user каталога пользователя.

Вы можете указать строку текста со знаком * .

Например, /~/*.txt заставит SCP скопировать все файлы в домашнем каталоге, которые заканчиваются на .txt .

Как правило, вам не нужно указывать расположение файла в текущем каталоге. Если вы находитесь в каталоге /home/user и хотите скопировать файл test.txt на сервер, вы можете ввести следующее:

scp test.txt username2@destination:/location2

Чтобы скопировать все файлы .txt в домашний каталог username2 , введите следующее:

scp *.txt username2@destination_host:/~/

Если вы укажете только каталог назначения, SCP оставит имя файла как есть.

Читайте также:  Wireguard linux mint клиент

Чтобы изменить имя файла, определите новое имя файла в месте назначения:

scp test.txt username2@destination_host:/user/home/user1test.txt

В этом примере файл test.txt копируется с локального компьютера, а затем сохраняется как user1test.txt в каталоге пользователя системы назначения.

Если удаленная система настроена на прослушивание SSH-запросов на порт, отличный от порта 22 по умолчанию, используйте переключатель –P , чтобы указать порт:

scp –P 1234 test.txt user2@destination_host:/location2/

Это копирует test.tx t из вашей локальной системы на целевой хост, используя порт 1234.

Копировать с одного удаленного хоста на другой

Вы не ограничены только подключением между локальным компьютером и удаленным сервером.

Чтобы скопировать из одной удаленной системы в другую:

scp user1@host1.com:/files/test.txt user2@user2.com:/files

Это приведет к репликации файла test.txt из каталога /files на host1.com в каталог /files на /host2.com. Система предложит вам ввести пароль для пользователей user1 и user2 до завершения операции.

Копирование больших файлов с помощью SCP

Если вы копируете большие файлы, запустите команду в терминальном мультиплексоре, например tmux .

Если операция прервана, мультиплексор позволит вам возобновить копирование без необходимости начинать заново.

Вы можете проверить, установлен ли в вашей системе tmux , выполнив в терминале следующее:

Рекомендации по использованию SCP

Команда scp не проверяет место назначения перед записью. Любые файлы в месте назначения с тем же именем будут перезаписаны без уведомления.

Вам будет предложено ввести пароль, когда вы нажмете Enter.

Используйте пароль пользователя в удаленной системе.

Управление разрешениями

В исходной системе вам потребуется учетная запись с доступом для чтения к файлам, которые вы хотите скопировать.

В системе назначения вам потребуется учетная запись с правом записи в каталог, в котором будут сохранены файлы. Если вы столкнетесь с ошибками при копировании, вы можете попробовать учетную запись пользователя root для устранения неполадок с разрешениями.

Параметры команды SCP

scp [options] username1@source_host:/location1/file1 username2@destination_host:/location2/file2

Вот некоторые общие параметры команды scp:

  • –P — Указать порт SSH сервера
  • –p — сохранить метку времени для изменения и доступа (обратите внимание на строчные буквы)
  • –q — тихий режим, без отображения прогресса или сообщений (все равно будут отображаться ошибки)
  • –C — Сжимать данные во время передачи
  • –r — Рекурсивно — включать подкаталоги и их содержимое

Раздел, следующий сразу за параметрами, — это источник (путь) файла, который вы хотите скопировать. Вы можете скопировать из своей системы в удаленную или наоборот.

В следующем разделе указывается место, куда копируется файл. Например:

scp user@local_system:/home/user/test.txt admin@remote_system:/home/user

Это скопирует документ test.txt из пользовательского каталога в локальной системе и поместит копию в каталог учетной записи администратора в удаленной системе.

Другой пример SCP — чтобы скопировать файл с удаленного хоста на локальный:

scp user@from_host:file.txt /local/directory/

Итоги

В этом руководстве вы узнали, что такое команда scp и как ее использовать для защиты передачи файлов.

Источник

Оцените статью
Adblock
detector