- Копирование файлов scp
- Что такое SCP?
- Копирование файлов scp
- Выводы
- Похожие записи
- Оцените статью
- Об авторе
- 28 комментариев к “Копирование файлов scp”
- Как использовать команду SCP в UNIX без пароля
- Генерация нового ключа и настройка беспарольного копирования
- Перенос закрытого ключа на другой компьютер
- Возможные ошибки
Копирование файлов 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 вы можете скопировать на удаленную машину целый каталог. Команда будет выглядеть вот так:
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 только для этой темы. Ответить
Кто знает скрипт для того, чтобы копирование происходило автоматиески с хоста в определенное время? Ответить
Этого недостаточно.
Ведь там же потребует пароль при вводе
А в этом уже поможет утилита 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 в UNIX без пароля
Обновлено: 12.12.2020 Опубликовано: 13.10.2016
Данный пример приведен на разных UNIX-системах — копирование файла с FreeBSD на CentOS. Использовать его можно в различных средах.
Копирование данных утилитой scp выполняется по протоколу SSH. Таким образом, для беспарольного копирования необходимо разрешить подключение по SSH без пароля. Это делается с помощью сертификата безопасности.
Генерация нового ключа и настройка беспарольного копирования
Для безопасной передачи данных между системами UNIX нужно сгенерировать закрытый и открытый ключи на одном компьютере и передать открытый на второй. Это делается по нижеописанному алгоритму.
На первом компьютере, с которого планируется копировать данные (FreeBSD) генерируем ключи:
После нажатия Enter система попросит ввести параметры размещения ключа и пароль. Ничего не меняем, нажимая ввод и соглашаясь со значениями по умолчанию.
* в моем примере, генерация ключа проходила под учетной записью root и публичный ключ был создан по пути /root/.ssh/id_rsa.pub
Теперь скопируем публичный ключ на второй компьютер (CentOS):
scp /root/.ssh/id_rsa.pub dmosk@server2:/home/dmosk/.ssh/authorized_keys
* как видно, мы копируем сгенерированный ключ на компьютер server2, подключившись под учетной записью dmosk и размещаем его в домашнюю директорию этого пользователя под новым именем authorized_keys. Каталог /home/dmosk/.ssh должен быть создан на втором компьютере заранее командой mkdir.
После ввода команды система запросит пароль для учетной записи dmosk на компьютере server2 и скопирует ключ.
На втором сервере (CentOS или к которому будем подключаться и копировать на него данные) проверяем настройки ssh:
Если данной строки нет или опция AuthorizedKeysFile имеет другое значение, нужно привести конфигурацию к данному виду. После перезапустить службу ssh:
Готово. Последующие команды SCP на копирование данных с первого компьютера на второй будут выполняться без запроса пароля, например:
scp /tmp/backup.tar.gz dmosk@server2:/backup/
Перенос закрытого ключа на другой компьютер
В случае, если мы хотим использовать сгенерированный ключ на другом компьютере, переносим файлы id_rsa и id_rsa.pub. Например, у нас есть третий компьютер с Ubuntu (server3) и мы хотим теперь с него копировать файлы на CentOS без пароля. Заходим на компьютер с FreeBSD и копируем ключи:
* мы скопировали файлы id_rsa и id_rsa.pub на другой компьютер. Необходимо обратить внимание, что сертификаты должны находится к каталоге .ssh домашней паки того пользователя, от которого мы хотим подключаться.
Теперь с server3 можно копировать данные без пароля на server2:
scp /tmp/backup.tar.gz dmosk@server2:/backup/
Возможные ошибки
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED
Описание: при попытке передачи данных после копирования ключей выскакивает вышеописанная ошибка. Полный текст может быть, примерно, следующим:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
6f:e6:56:85:b6:be:52:3d:8c:5e:3a:8e:68:e2:0e:16.
Please contact your system administrator.
Add correct host key in /home/dmosk/.ssh/known_hosts to get rid of this message.
Offending RSA key in /home/dmosk/.ssh/known_hosts:6
RSA host key for 192.168.0.18 has changed and you have requested strict checking.
Причина: произошла смена ключа SSH и так как, на компьютере в файле ~/.ssh/known_hosts находится старый ключ, система не позволяет использовать сертификат в целях безопасности.
Решение: открываем файл с базой ключей:
Находим строчку с нашим удаленным компьютером, для которого получаем ошибку и удаляем ее.