Я ищу решение для использования 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-keygen
, вам будет предложено ввести кодовую фразу, вы захотите ввести здесь что-нибудь безопасное. он также сгенерирует два файла $ HOME / .ssh / id_rsa (не делитесь этим) и $ HOME / .ssh / id_rsa.pub.
Открытый ключ (id_rsa.pub) может быть передан кому угодно, не опасаясь компрометации вашей учетной записи. Если кто-то овладевает вашим секретным ключом, он может пройти аутентификацию на любой учетной записи / машине, настроенной для приема вашего секретного ключа.
Именно здесь на помощь приходит кодовая фраза, поэтому, если кто-то получит ваш закрытый ключ, ему все равно нужно будет знать кодовую фразу.
Во время входа в систему ssh ищет файл в $ HOME / .ssh / authorized_keys. Этот файл представляет собой список открытых ключей, которые разрешено использовать для аутентификации. На удаленных машинах вы захотите добавить свой id_rsa.pub в этот файл.
Во время попыток ssh теперь вам будет предложено ввести кодовую фразу для вашего закрытого ключа вместо вашего пароля.
Вы можете избежать повторного ввода ключевой фразы, используя ssh-agent bash
, с последующим ssh-add
. Это сначала запускает bash с прикрепленным к нему «связкой ключей», а затем добавляет ваш ключ в связку ключей. Теперь, находясь в этой оболочке, если вызывается ssh, он будет извлекать ваш закрытый ключ из связки ключей, а не запрашивать у вас парольную фразу.
Устанавливать AllowAgentForwarding yes
в / etc / ssh / sshd_config на удаленных хостах. Благодаря этому вы можете использовать ssh с машины, к которой вы подключились, на другую, у которой ваш открытый ключ указан в authorized_keys, и вам не будет предложено ввести пароль или кодовую фразу, так как он будет обрабатывать обмен данными с цепочкой для ключей на ваш исходный компьютер.
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"
Теперь вы можете сделать следующее.
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 /