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

rsync уникальная ситуация

Ссылка:
Как мне осуществлять переводы Multihop SCP?
https://stackoverflow.com/questions/732039/rsyncing-files-between-two-remote-servers-get-errors-stating-rsync-command-not
http://ubuntuforums.org/showthread.php?t=748431

У меня есть ситуация, для которой я очень надеюсь, что есть решение, хотя за последние пару часов я еще ничего не нашел.

У меня есть два сервера, которые не могут общаться друг с другом, и мне нужно передавать данные между ними. Это довольно распространенная ситуация, которую легко решить с помощью некоторых уловок scp. Вот и все.

Доступ к одному серверу осуществляется через VPN, (vpnserver) доступ к другому серверу (targetserver) осуществляется через узел перехода (jumphostserver).

У меня есть настройка ProxyCommand, позволяющая мне прокси-соединения через jumphostserver на целевой сервер, и я использую материал SSH Mux (ControlMaster / ControlPersist / ControlPath), чтобы разрешить совместное использование соединений для всех открытых соединений.

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

scp -3 vpnserver: / путь / к / файлу targetserver: / путь / к / месту назначения

Я также могу rsync напрямую с vpnserver на мою локальную машину и с моей локальной машины на targetserver (используя прокси ssh, который проходит через jumphostserver)

Что мне нужно сделать, так это заставить мою машину действовать как посредник так, как это позволяет scp -3, но делать это с помощью rsync, чтобы разрешения, владение и (что более важно) ACL правильно копировались на целевой сервер.

Я думал о том, чтобы попытаться экспортировать NFS файловую систему vpnserver и targetserver (реэкспортировать через jumphostserver), но у меня нет контроля над jumphostserver, только над vpnserver и targetserver.

Если один из этих двух хостов может войти в другой, если присутствует сетевое подключение, либо с помощью ключа SSH ID на одном, распознаваемом в authorized_keys на другом, либо можно использовать пароль, И если переадресация портов не отключена, И если пропускать этот трафик через локальную машину можно, тогда это почти всегда можно сделать с помощью переадресации портов.

Давайте назовем ваш локальный компьютер хостом A, и у этого хоста B есть учетные данные для входа на хост C с помощью SSH, если только он может достичь хоста C.

  1. Войдите на хост B, используя опцию REVERSE для переадресации портов, прослушивая порт 2222 на машине B и подключаясь к порту 3333 на localhost (что произойдет на машине A). В Linux этот параметр - "-R 2222: локальный: 3333".

  2. Войдите в систему на хосте C, используя обычную переадресацию портов, прослушивая порт 3333 на машине A и подключив tp-порт 22 на localhost (что произойдет на машине C). В Linux этот параметр - "-L 3333: локальный: 22".

  3. На хосте B запустите тестовый сеанс SSH с хостом C, чтобы убедиться, что все настроено правильно. Команда сделать: "ssh -p2222 имя пользователяonhostc @ localhost". Если все настроено правильно, он подключится к порту 2222 на B, будет перенаправлен на порт 3333 на A, а затем будет перенаправлен на порт 22 на C. Если ваши ключи верны, вы можете просто войти в систему. В противном случае вам следует Получите запрос пароля. Введите пароль, чтобы быть уверенным.

Если вы можете подключиться нормально, закройте это тестовое соединение и перейдите к пункту 4 или 5 ниже.

  1. Чтобы отправить файлы из B в C, сделайте это на B: rsync -e "ssh -p2222" -av / где / в / получить / файлы /. имя пользователяonhostc @ localhost: / где / в / положить / файлы

  2. Чтобы отправить файлы из C в B, сделайте это в B: rsync -e "ssh -p2222 "-av usernameonhostc @ localhost: / where / to / get / files /. / where / to / put / files

Если вам нужно передать очень большие объемы данных между машинами через Интернет, потому что ваш локальный доступ имеет ограниченную пропускную способность, тогда это будет сложнее, потребуется знать, как сети ограничены на B и C, и может даже быть невозможно.

Замените строку «useronhostc» своим именем пользователя, которое вы используете на хосте C. Оставьте «localhost» как есть или измените его только на «127.0.0.1». Укажите правильные пути для показанных примеров. Удалить "/."в конце исходного пути, если это всего лишь один файл.

Помните, что вы должны войти в систему как B, так и C (из A) одновременно. Предлагаются отдельные окна xterminal. Оба этих входа ssh будут выполнять переадресацию портов. Но вы также можете выполнять команды через них. Вы можете выбрать номера порта, отличные от 2222 или 333, показанных в примере. Порт 22, вероятно, потребуется, если хост C по какой-то причине не прослушивает другой порт (я делаю это со своими серверами ... я не говорю, какой порт). Если вы меняете порты 2222 и / или 3333, вам, вероятно, придется использовать номера 1024 или выше. Технически вы даже можете использовать один и тот же номер для обоих, поскольку прослушивания находятся на разных машинах.

Если обе системы имеют доступ к Интернету, вы можете установить пакет n2n от ntop для создания VPN-соединения между системами.