Rsyncing каталогов через ssh туннель

У меня 3 компьютера / сервера, назовем их компьютером A, компьютером B и компьютером C.

  • Компьютер A имеет доступ через ssh к компьютеру B.
  • Только компьютер B имеет доступ через ssh к компьютеру C.
  • Компьютер A не имеет прямого доступа к компьютеру C.

Поэтому я хочу, чтобы каталоги rsync с компьютера A на компьютер C, используя компьютер B (поскольку только компьютер B имеет доступ через ssh к компьютеру C). Я хочу использовать rsync простым способом, например:

 rsync -options /path_to_local IpComputerC:/path_to_remote 

Я думаю о ssh туннеле, но я не знаю, нужно ли мне выполнять локальную переадресацию портов или удаленное перенаправление портов, или если мне нужно сделать два туннеля: один от A до B и другой от B до C ?

Какие-либо предложения?? Я был бы очень благодарен.

** ОБНОВЛЕНИЕ: Я не понимаю! Я создал туннель ssh с локальной переадресацией портов, что означает, что я использовал локальный порт из машины A для подключения к удаленному порту на машине C через машину B. Синтаксис команды:

 ssh -f -N -L local_port_machineA:ip_machineC:remoteport_machineC [email protected]_machineB 

В моем случае remoteport_machineC shoul – это порт 22, потому что я хочу rsync каталоги через ssh.

После этого мы можем выполнить команду rsync с машины A следующим образом:

 rsync -avz -e "ssh -p local_port" /source_directory [email protected]:/target_directory 

Это все. Кроме того, вы можете добавить дополнительные параметры в часть внутри кавычек, например, ключи или файлы и т. Д. **

Гораздо проще других предложений: используйте rsync -e | --rsh -e | --rsh :

 rsync -azv -e 'ssh -o "ProxyCommand ssh -A proxy -W %h:%p"' foo/ dest:./foo/ 

Обратите внимание, что я использую -A (перенаправление агентов), но он также должен работать с аутентификацией пароля, если вы не используете ключи, и, конечно же, вы можете заменить proxy B и dest на C в вашем примере.

Если случайно у вас нет новой версии ssh (> = 5.3, IIRC), вы можете использовать netcat вместо опции -W для ssh :

 rsync -azv -e 'ssh -o "ProxyCommand ssh -A proxy nc %h %p"' foo/ dest:./foo/ 

Одним из решений будет crontab на вашем «узле прыжка» (компьютер B в этом сценарии).

A -> B (вручную инициировано или может быть выполнено через crontab на узле A)

 rsync -avzP --progress /path/to/transfer/ [email protected]:/transfer/share/ 

B -> C (создайте crontab для запуска каждые 15 минут)

 sudo crontab -e */15 * * * * rsync -avzP --progress /transfer/share/ [email protected]:/destination/share/ 

Возможно, вы захотите еще больше укрепить это, заблокировав доступ через «служебную учетную запись» (AKA: ProdID) с ограниченным доступом. Альтернативно вы можете использовать SSH-ключ, чтобы обойти подсказку пароля при входе в систему.

http://www.rackspace.com/knowledge_center/article/generating-rsa-keys-with-ssh-puttygen

Дополнительная информация

Рассматривали ли вы удаленный общий ресурс NFS (предлагаемый nodeC, удаленно установленный на узле B и нацеленный на rsync от nodeA)? В этом случае удаленный общий ресурс NFS (из NodeC) будет установлен на NodeB (и будет отображаться как стандартная файловая система с точки зрения ОС). Таким образом, он будет доступен в описанном вами сценарии подключения, не расходуя DISK на NodeB. Таким образом, вы сможете адаптировать синтаксис «rsync» выше, чтобы указать на удаленный общий ресурс NFS, установленный на NodeB, в конечном счете «pass-thru» на NodeC. Также могут возникнуть проблемы с безопасностью, которые вы захотите рассмотреть.

Решение NFS

СПРАВКА

http://www.tldp.org/HOWTO/NFS-HOWTO/server.html

РЕАЛИЗАЦИЯ

NodeC: включить NFS, создать общий ресурс NFS, установить права без полномочий root (RHEL 5.x в этом примере, другие дистрибутивы будут немного отличаться)

 sudo /sbin/chkconfig portmap on sudo /sbin/chkconfig nfs on sudo /sbin/service portmap start sudo /sbin/service nfs start sudo chown "nobody:users" /final/destination/share sudo chmod 775 /final/destination/share sudo vi /etc/exports /final/destination/share NodeC_IP(rw) NodeB_IP(rw) sudo /usr/sbin/exportfs -ra 

NodeB: автоматически подключить целевой ресурс

 sudo mkdir -p /transfer/share/name sudo vi /etc/fstab NodeC_IP:/final/destination/share /transfer/share/name nfs defaults sudo mount -a 

NodeA: запланировать задание rsync (15-минутная частота в этом примере)

 # manual method /usr/bin/rsync -avzP --progress /transfer/share/local/ [email protected]:/transfer/share/name/ # scheduled method sudo crontab -e */15 * * * * /usr/bin/rsync -avzP --progress /transfer/share/local/ [email protected]:/transfer/share/name/ 
  • Перенос файлов по SSH
  • SSH не читает файлы rc
  • Wake-on-LAN через Интернет практически невозможно
  • Как ssh два компьютера за NAT и брандмауэром, без третьего компьютера
  • Могу ли я заставить sshd OpenSSH принять логин для несуществующего пользователя?
  • Можете ли вы указать git-shell в .ssh / authorized_keys для ограничения доступа только к git-командам через ssh?
  • Vim и мышь с ssh от Mac до Linux
  • Добавить Keypair в существующий экземпляр EC2
  • Ключ авторизации SSH для нескольких систем
  • У Windows 10 уже есть SSH?
  • Передача агента SSH не работает
  • Interesting Posts

    Домашняя сеть с адаптерами Powerline, беспроводным маршрутизатором и точкой беспроводного доступа

    Как отклонить AlertDialog в android

    Исключение скрепки: Paperclip :: AdapterRegistry :: NoHandlerError

    Как исправить: «HAX не работает, а эмулятор работает в режиме эмуляции»

    Глобальный ASAX – получить имя сервера

    objective … отменяет настройку `OTHER_LDFLAGS`, определенную в` Pods / Pods.xcconfig

    Как я могу заставить Windows 7 выключать свет?

    Как добавить общую метку в грани в ggplot2?

    Как вы можете ограничить значение из ввода с помощью AngularJS?

    Вызов службы WCF с помощью VBScript

    Настройка заголовка User-Agent для запроса WebClient

    Каков правильный способ подготовить chroot для восстановления сломанной установки Linux?

    Есть ли кабель SATA, который может подключаться к нескольким дискам?

    Настройка экрана блокировки Windows 8.1 по умолчанию (системная)

    Как создать раздел восстановления с помощью установочного диска Windows 7?

    Давайте будем гением компьютера.