Rsync через SSH с правами доступа с обеих сторон

14

У меня есть один старый сервер Ubuntu и один более новый сервер Debian, и я переношу данные со старого на новый. Я хочу использовать rsync для передачи данных, чтобы сделать окончательную миграцию проще и быстрее, чем эквивалентный процесс tar / scp / untar.

В качестве примера я хочу синхронизировать домашние папки по одному на новом сервере. Это требует корневого доступа на обоих концах, так как не все файлы на стороне источника доступны для чтения всем, и место назначения должно быть записано с правильными разрешениями в / home. Я не могу понять, как предоставить rsync root-доступ с обеих сторон.

Я видел несколько связанных вопросов, но ни один из них не совсем соответствует тому, что я пытаюсь сделать.

У меня есть sudo, настроенный и работающий на обоих серверах.

Тим Абелл
источник

Ответы:

14

На самом деле вам НЕ нужно разрешать корневую аутентификацию через SSH для запуска rsync, как предлагает Антуан. Транспортная и системная аутентификация может быть полностью выполнена с учетными записями пользователей, если вы можете запустить rsync с sudo на обоих концах для чтения и записи файлов.

Как пользователь на вашем сервере назначения вы можете высосать данные с вашего исходного сервера следующим образом:

sudo rsync -aPe ssh --rsync-path='sudo rsync' boron:/home/fred /home/

Пользователю, которого вы запускаете как на обоих серверах, будет нужен беспарольный * sudo доступ к двоичному файлу rsync, но вам НЕ нужно нигде включать ssh login от имени root. Если пользователь, которого вы используете, не совпадает на другом конце, вы можете добавить user @ boron: для указания другого удаленного пользователя.

Удачи.

* или вам нужно будет ввести пароль вручную в окне тайм-аута.

Калеб
источник
5
Хотя это старый вопрос, я бы хотел добавить слово ВНИМАНИЕ к этому принятому ответу. Насколько я понимаю, разрешение «sudo rsync» без пароля эквивалентно открытию учетной записи root для удаленного входа в систему. Это потому, что с этим очень легко получить полный root-доступ, например, потому что все системные файлы могут быть загружены, изменены и заменены без пароля.
Ascurion
3

Если ваши данные не очень конфиденциальны, вы можете использовать tarи socat. По моему опыту это часто быстрее, чем rsyncпо ssh.

Вам нужно socatили netcatс обеих сторон.

На целевом хосте перейдите в каталог, куда вы хотите поместить свои данные, после этого запустите:
socat TCP-LISTEN:4444 - | tar xzf -

Если целевой хост прослушивает, запустите его на источнике, например:
tar czf - /home/fred /home/ | socat - TCP:ip-of-remote-server:4444

Для этой настройки вам понадобится надежное соединение между двумя серверами.

zagyi
источник
Хорошая точка зрения. В надежной среде вы будете набирать большую скорость, не шифруя. Это может не иметь значения для маленьких файлов, но с ГБ данных это будет.
pboin
2

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

Давайте назовем серверы "src" и "dst".

Настройте пару ключей для пользователя root на конечном сервере и скопируйте открытый ключ на исходный сервер:

dest $ sudo -i
dest # ssh-keygen
dest # exit
dest $ scp /root/id_rsa.pub src:

Добавьте открытый ключ к авторизованным ключам root на исходном сервере.

src $ sudo -i
src # cp /home/tim/id_rsa.pub .ssh/authorized_keys

Вернитесь на конечный сервер и перенесите данные с помощью rsync:

dest $ sudo -i
dest # rsync -aP src:/home/fred /home/
Тим Абелл
источник