Как скопировать файлы с одного сервера на другой без посредников

Типовая ситуация: надо с одного сервера перекинуть какие-то файлы на другой сервер (например, файлы сайта), но при этом не хочется их скачивать к себе локально, а желательно передать сразу напрямую между серверами.

Для начала предоставим принимающему серверу доступ на отправляющий. На принимающем сервере из под рута делаем так:

cat /root/.ssh/id_rsa.pub

Если такого файла нет, значит на принимающем сервере не создана пара ключей. Можно создать одной командой, отвечая на все её вопросы вариантами по умолчанию (т.е. просто жмёте Enter многократно):

ssh-keygen -r rsa

Если файл есть (был ранее ли создан вами только что), то при просмотре файла командой cat видим в нём ключ — копируем его целиком.

Затем идём на отправляющий сервер и открываем там на редактирование файл (если файла нет, то и на отправляющем сервере делаем ssh-keygen):

nano /root/.ssh/authorized_keys

Вставляем туда отдельной строкой скопированный ключ, сохраняем (в nano это можно сделать кнопкой F2). Теперь у нас открытый ключ принимающего сервера добавлен на отправляющий сервер в файл с разрешенными для входа ключами. Это значит, что мы можем зайти по ssh с принимающего сервера на отправляющий. Но нам не очень-то нужен ssh с консолью (мы не собираемся выполнять команды), а хватит scp — это программа для копирования файлов через ssh-протокол.

Поэтому на принимающем сервере делаем:

scp -rpC root@domain.tld:/var/www/site/ /root/

Где domain.tld — это отправляющий сервер, а /var/www/site/ — это тот каталог, который вы хотите оттуда скопировать. А скопируется он, соответственно, внутрь каталога /root/ на принимающем сервере.

У scp мы использовали следующие параметры:

  • -r — рекурсивное копирование, т.е. со всеми вложенными каталогами и файлами, что нам собственно и надо при копировании целой директории
  • -p — сохранять права и дату/время создания и модификации файлов
  • -C — сжимать данные при передаче (нет смысла добавлять этот параметр, если вы копируете архив)

Данный метод должен работать на большинстве дистрибутивов «из коробки». Проблемы могут быть только если пользователю root запрещен логин на отправляющем сервере. Но это уже отдельная история. Если что — спрашивайте в комментах.

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



Прокомментируйте: