Как использовать rsync с удаленным хостом

Как использовать rsync с удаленным хостом

Я являюсь счастливым пользователем rsync -e sshи использую его для синхронизации данных между моей машиной и удаленным хостом с помощью

rsync -avz -e ssh me@hostA:~/folder ~/folder

И это сделало то, что мне было нужно до сих пор.

Сейчас я работаю с конфигурацией, где доступ немного сложнее. Предположим, что now ~/folderнаходится на hostB, но hostBне доступен напрямую с моей машины, а только косвенно через hostA.

Итак, если я хочу увидеть папку только на hostB, мне сначала нужно подключиться по ssh к hostA, затем к , hostBпосле чего я смогу увидеть свои файлы ~/folderна удаленном хосте.

Теперь у меня вопрос: какой (лучший) метод использовать rsyncнапрямую между моей машиной и hostB?

К сожалению, это конфигурация, с которой мне нужно работать. Предположим, что нет возможности временно хранить данные на hostAсебе.

решение1

Посмотри наКак подключиться к ПК через другой ПК с помощью ssh

Вы создаете новую ~/.ssh/configзапись с именем tunnelb:

Host tunnelb
HostName hostB
User user
ProxyCommand ssh user@hostA nc %h %p

Если у вас есть последняя версия ssh, вы можете использовать Proxycommand ssh user@hostA -W %h:%pвместо этого. Это предпочтительнее, так как не зависит отnc

Теперь вы можете просто использовать, rsync -e ssh tunnelb:~/folder ~/folderтак как он будет использовать определенную запись в ~/.ssh/config.

решение2

Вариант 1:

Сначала запустите ssh на hostA постоянно с локальным перенаправлением портов в другом терминале. Например:

ssh -N -v -L 22022:hostB:22 hostA

Затем "скармливаем" rsync с ssh в localhost:22022. Один из вариантов - записать в ~/.ssh/config:

Host hostB
HostName localhost
Port 22022

Вариант 2:

Заменить -e sshна -eкакой-нибудь скрипт, который содержит:

ssh hostA 'ssh hostB' "$@"

Я не пробовал, поэтому некоторые детали будут описаны дополнительно.

Связанный контент