Rsync файлы через промежуточный хост


22

В настоящее время я не в сети и мне нужно сделать резервную копию моего ноутбука. У меня есть несколько недавняя копия моего ноутбука на моем сервере, и я обычно делаю резервную копию ноутбука, используя rsync. Теперь я хочу сделать это, но за пределами моей локальной сети.

Короче говоря, я хочу отправить данные из A в C через B, где A - мой ноутбук, B - мой маршрутизатор и C - мой сервер.

Я нашел эту команду: она A$ scp -oProxyCommand="ssh B nc %h %p" thefile C:destinationотлично работает для передачи файлов через scp - но так как у меня уже есть большая часть данных на моем сервере, я хочу использовать rsync только для синхронизации дельты.

Я попытался:, A$ rsync file -e 'ssh B ssh' Cи это работает, поскольку мне предлагают дать пароль для пользователя: C. Однако при вводе пароля ничего не происходит. Маршрутизатор работает под управлением Tomato v1.28, и я не могу настроить его на использование файла конфигурации ssh, чтобы он мог войти в систему с C / oa паролем.

Есть идеи, как заставить это работать?


2
используйте то же самое ProxyCommandв файле конфигурации. Rsync должен поднять это.
Jakuje

Ответы:


30

На этот вопрос, по сути, ответили в другом месте, в том числе здесь для scp и здесь для rsync . Поскольку последний включает мой ответ, но ответ не был принят, я повторю его здесь.

Как вы отметили, вы можете использовать rsync«s -e | --rshвариант, но это будет немного более сложным:

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

Или, если ваша версия sshдостаточно новая (OpenSSH> = v7.3), вы можете использовать опцию -J( ProxyJump)

rsync -azv -e 'ssh -A -J USER@PROXYHOST:PORT' foo/ dest:./foo/

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

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

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

Наконец, как уже отмечалось в комментариях, вы можете поместить их ProxyCommandв свой $HOME/.ssh/configфайл, чтобы у вас не было такой сложной командной строки. В частности, добавьте что-то вроде этого:

Host C
  ProxyCommand ssh -A PROXYHOST -p 22 -W %h:%p

Или, используя ProxyJumpдля OpenSSH> = v 7.3:

Host C
  ProxyJump PROXYHOST

Тогда вы должны быть в состоянии сделать:

rsync -azv foo/ C:./foo/
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.