Я могу ssh к удаленной системе серверов через сервер входа в систему (ssh user@lxplus.sern.ch
). С сервера входа в систему я могу ssh на конкретный сервер (ssh user@supercool
). Я не могу получить доступ к конкретному серверу напрямую (ssh user@supercool.sern.ch
). Как я могу запустить локальный rsync, чтобы получить каталог с этого конкретного сервера? Я не могу выполнить rsync с конкретного сервера на мой локальный компьютер, потому что мой локальный компьютер не имеет общедоступного IP-адреса.
1 ответ
Итак, ваша установка такова:
Local Machine --> Intermediate Server --> Remote Server
Если вы можете запустить команду rsync на удаленном сервере, а на вашем локальном компьютере работает sshd, вы можете сделать это:
Войдите на промежуточный сервер с помощью следующей команды ssh
ssh user@<intermediate server> -R 1024:localhost:22
Это создаст обратный туннель SSH. Любые соединения SSH на промежуточном сервере через порт 1024 будут перенаправлены обратно на ваш локальный компьютер.
В этот момент вы будете авторизованы на промежуточном сервере. Затем вам нужно расширить туннель до удаленного сервера. На промежуточном сервере запустите:
ssh user@<remote server> -R 1024:localhost:1024
Теперь любое соединение SSH через порт 1024 на удаленном сервере будет возвращаться к промежуточному серверу через порт 1024, который затем будет туннелироваться обратно на ваш локальный компьютер. Уф!
Теперь нам нужно обернуть это в rsync. Rsync имеет опцию удаленной оболочки (-e), которую вы можете использовать для указания опций ssh. Таким образом, на удаленном сервере вы можете запустить (это немного догадка из прошлого опыта, возможно, потребуется некоторая настройка):
rysnc -<whatver rsync options you want> -e "ssh -p 1024" <source directory> <local machine user>@localhost
Не забывайте всегда запускать команду rsync с параметром --dry-run, чтобы убедиться, что она выполняет то, что вы ожидаете (в сочетании с различными уровнями многословия -v, -vv или -i или -ii в зависимости от используемых версий rsync.).