В основном я спрашиваю, встречал ли кто-нибудь способ обернуть 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