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


19

Наразі я вдалині від своєї локальної мережі і мені потрібно зробити резервну копію ноутбука. У мене є кілька останніх копій свого ноутбука на моєму сервері, і я зазвичай підтримую ноутбук за допомогою 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 config, щоб він міг увійти до пароля C w / oa.

Будь-які ідеї, як зробити цю роботу?


2
використовувати те ж саме ProxyCommandу файлі конфігурації. Rsync повинен це підібрати.
Jakuje

Відповіді:


26

На це питання по суті відповіді в іншому місці, включаючи тут для 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

Або, використовуючи ProxyJumpOpenSSH> = v 7.3:

Host C
  ProxyJump PROXYHOST

Тоді ви зможете просто зробити:

rsync -azv foo/ C:./foo/
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.