Назад | Перейти на главную страницу

Rsync Remote to Remote

Я ищу решение для использования rsync между двумя удаленными серверами. Похоже, это невозможно. Кто-нибудь знает, почему это невозможно? Я спрашиваю об этом, потому что думаю, если я знаю причину, возможно, я мог бы использовать другой инструмент, чтобы сделать это возможным.

Обновление: у меня есть гипервизор на моем основном сайте с запущенным n vm. У меня есть еще один гипервизор на моем вторичном сайте, который я хочу быть резервным сервером для моего основного сервера. Для синхронизации файла между этими двумя я нашел лучший способ - использовать rsync. Проблема в том, что я не хочу запускать свой код (rsync) на виртуальных машинах, потому что я хочу, чтобы мой продукт был меньше агента. В этом случае мне нужно добавить третий компьютер, чтобы запустить код. Теперь мне нужно выполнить rsync между моим основным и дополнительным сайтами, на котором я застрял, потому что rsync не работает для удаленных серверов.

ssh user@server1 "rsync /files user@server2:/directory"

Вы можете использовать ssh с общедоступными / закрытыми ключами ssh, чтобы сделать это безопасно с помощью rsync.

ssh может аутентифицироваться с помощью пароля или пары ключей (открытый / закрытый). В этом ответе я расскажу, как настроить пару открытого / закрытого ключей ssh. Опишите пересылку ssh-agent и их использование с rsync для синхронизации двух удаленных машин.

Открытый / закрытый ключ SSH

Вы можете создать пару ключей ssh, используя ssh-keygen, вам будет предложено ввести кодовую фразу, вы захотите ввести здесь что-нибудь безопасное. он также сгенерирует два файла $ HOME / .ssh / id_rsa (не делитесь этим) и $ HOME / .ssh / id_rsa.pub.

Открытый ключ (id_rsa.pub) может быть передан кому угодно, не опасаясь компрометации вашей учетной записи. Если кто-то овладевает вашим секретным ключом, он может пройти аутентификацию на любой учетной записи / машине, настроенной для приема вашего секретного ключа.

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

authorized_keys

Во время входа в систему ssh ищет файл в $ HOME / .ssh / authorized_keys. Этот файл представляет собой список открытых ключей, которые разрешено использовать для аутентификации. На удаленных машинах вы захотите добавить свой id_rsa.pub в этот файл.

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

ssh-агент

Вы можете избежать повторного ввода ключевой фразы, используя ssh-agent bash, с последующим ssh-add. Это сначала запускает bash с прикрепленным к нему «связкой ключей», а затем добавляет ваш ключ в связку ключей. Теперь, находясь в этой оболочке, если вызывается ssh, он будет извлекать ваш закрытый ключ из связки ключей, а не запрашивать у вас парольную фразу.

агент-экспедитор

Устанавливать AllowAgentForwarding yes в / etc / ssh / sshd_config на удаленных хостах. Благодаря этому вы можете использовать ssh с машины, к которой вы подключились, на другую, у которой ваш открытый ключ указан в authorized_keys, и вам не будет предложено ввести пароль или кодовую фразу, так как он будет обрабатывать обмен данными с цепочкой для ключей на ваш исходный компьютер.

команды ssh

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

ssh user1@remote_host1 'hostname;id'

Это запустит команды hostname и id на remote_host1 и будет использовать ваш ключ без запроса. Он должен вернуть "remote_host1, user1"

Вы также можете продемонстрировать переадресацию агента с помощью

ssh user1@remote_host1 'ssh user2@remote_host2 "hostname;id"'

Это запустит ssh user2@remote_host2 "hostname;id" на remote_host1, который затем отправит ssh на remote_host2 и выполнит команды их. Он возвращает запрос аутентификации на ваш компьютер, когда агент переадресовывает, и использует ваш ключ без запроса. Он должен вернуть "remote_host2, user2"

rsync

Теперь вы можете сделать следующее.

ssh remote_host1_user@remote_host1 "rsync -ave ssh  source_sync_dir remote_host2_user@remote_host2:target_sync_dir"

Это сообщает remote_host1 rsync источника на host_1 с получателем на host_2, а rsync было сказано использовать ssh, который будет использовать ваш перенаправленный ключ.

Если server1 и server2 могут подключаться друг к другу, вышеуказанные решения будут работать. В противном случае у меня нет решения для rsync, но есть старый tar трюк сработает. Я делаю это сейчас.

Подготовка: создайте ключ ssh без ключевой фразы и установите его в authorized_keys файл учетной записи на каждом сервере. Затем сделайте это:

$ ssh -i .ssh/my_key bob@server1 'tar -cf - -C sourcedir' | \
ssh -i .sh/my_key carol@server2 'tar -xvpf - -C targetdir'

Обратите внимание, что вы получите targetdir / sourcedir на server2.

Авторы и права: Идея пришла из книги Oreilly System Administration с броненосцем на обложке. Я просто вставил рабочую станцию ​​посередине, так как server1 не может напрямую общаться с server2.

Я хочу синхронизировать файлы с serverA на serverB, но между ними нет прямой связи, но у меня есть serverC, который может получить доступ как к serverA, так и serverB. что сработало для меня:
на serverC:
ssh user@serverA 'rsync -avP -e "ssh -ax user@serverC ssh " /source/files user@serverB:/des/tination'

gw_en_2_segmentos# ssh cuenta@ip_origen 'cd /carpeta_origen;star \
                           -acl -artype=exustar -z \
                           -c -f=- *' | ssh cuenta@ip_destino \
                                        'cd /carpeta_destino;star \
                                         -acl -artype=exustar -z -xv -f=-'

Дает вам удаленную копию с правами доступа к файлам и списками контроля доступа POSIX

Предполагая, что вы используете * nix:

Добавьте задание cron, которое выполняет синхронизацию с одним из серверов.

Если вы хотите синхронизировать все из / home / user / sync_dir с одного компьютера на другой, и вас не беспокоит настройка самого rsync для специфики каталога, я предпочитаю делать это, а не ssh. (Вам нужно будет настроить ключи для входа в систему вместо паролей, если вы работаете через cron).

rsync -ave "ssh" / home / user / sync_dir / remote_user @ remote_host: / home / user / remote_sync_dir /