2

У меня есть 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 user_machineB@ip_machineB

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

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

rsync -avz -e "ssh -p local_port" /source_directory username_machineC@localhost:/target_directory

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

3 ответа3

3

Гораздо проще, чем другие предложения: используйте rsync 's -e | Опция -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/
0

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

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

rsync -avzP --progress /path/to/transfer/ user@nodeB:/transfer/share/

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

sudo crontab -e
*/15 * * * * rsync -avzP --progress /transfer/share/ user@nodeC:/destination/share/

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

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

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

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

0

Решение 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/ user@nodeB:/transfer/share/name/

# scheduled method
sudo crontab -e
    */15 * * * * /usr/bin/rsync -avzP --progress /transfer/share/local/ user@nodeB:/transfer/share/name/

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .