13

В настоящее время я не в сети, и мне нужно сделать резервную копию моего ноутбука. У меня есть несколько недавняя копия моего ноутбука на моем сервере, и я обычно делаю резервную копию ноутбука, используя 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.

Любые идеи о том, как сделать эту работу?

1 ответ1

20

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

Как вы заметили, вы можете использовать rsync -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/

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