Я являюсь счастливым пользователем 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' "$@"
Я не пробовал, поэтому некоторые детали будут описаны дополнительно.