Назад | Перейти на главную страницу

Как выполнить безопасную синхронизацию между серверами в незащищенной сети

В основном я спрашиваю, встречал ли кто-нибудь способ обернуть rsync внутри ssh.

С OpenSSH v4.9 + sftp имеет несколько хороших опций, которые позволяют вам chroot входящего соединения и тому подобное - и это решение, на которое я бы посмотрел, однако я застрял в RHEL, и ни RHEL4, ни RHEL5 не подходят для этой версии ssh.

Мое текущее решение - добавить что-то подобное на стороне сервера, используя ключ пользователя клиента ...

server% cat ~/.ssh/authorized_keys
command="cd /srv/rsync/etl && tar --exclude './lost+found' -pcf - ./" ssh-rsa...

... и тогда клиент будет ограничен одним и только одним ...

client% ssh -T -i ${HOME}/.ssh/id_rsa oracle@database.com > sensative.tar

Это защищает соединение, а также сервер (от клиента), однако неэффективно, поскольку все файлы будут извлекаться снова и снова.

Я делаю что-то подобное (или просто лучше) с помощью rsync.

Rsync поддерживает использование ssh в качестве транспорта

rsync -az /path/to/source username@host:/path/to/destination

некоторые старые версии rsync требуют, чтобы вы явно указали ssh

rsync -aze ssh /path/to/source host:/path/to/destination

Альтернативой использованию rsync является Унисон Б. С. Пирса, который имеет схожую функциональность с rsync, но сохраняет локальный индекс на обоих концах, чтобы избежать обхода файловой системы для вычисления дельт

Хорошо, я наконец понял это, но решение не так элегантно, как я надеялся.

На стороне сервера вам необходимо добавить следующее в файл authorized_keys для соответствующего пользователя ...

no-pty, command="exit"

Затем на клиенте вы можете создать туннель следующим образом ...

ssh -l username -fNTL 8073:server:873

Как только туннель установлен, вы можете использовать rsync как обычно - использование синтаксиса с двойным двоеточием невозможно - с localhost.

Номер порта localhost, который вы выбираете (8073), явно необязателен, просто помните, что это то, что вам нужно для rsync к...

rsync --port=8073 -a user@localhost::mySecureStore /srv/some/place/

Возможно, вас заинтересует daemon-over-ssh-mode, который является предметом этого вопроса:

Не удается заставить rsync работать в режиме daemon-over-ssh