Como executar um rsync seguro entre servidores em uma rede não segura

19

Basicamente, o que estou perguntando é: alguém encontrou um meio pelo qual envolver o rsync dentro do ssh.

Com o OpenSSH v4.9 +, o sftp tem algumas boas opções que permitem chroot na conexão de entrada e tal - e essa é uma solução que eu procuraria, no entanto, estou preso ao RHEL e nem o RHEL4 nem o RHEL5 são dessa versão do ssh.

Minha solução atual é adicionar algo assim ao lado do servidor usando a chave do usuário do cliente ...

servidor% cat ~ / .ssh / allowed_keys
comando = "cd / srv / rsync / etl && tar --exclude './lost+found' -pcf - ./" ssh-rsa ...

... e assim o cliente ficaria restrito a uma coisa e apenas uma coisa ...

cliente% ssh -T -i $ {HOME} /. ssh / id_rsa [email protected]> sensative.tar

Isso protege a conexão, assim como o servidor (do cliente), no entanto, é ineficiente, pois todos os arquivos serão recuperados repetidamente.

Estou depois de fazer algo semelhante (ou apenas melhor) usando o rsync.

Xerxes
fonte

Respostas:

18

Rsync suporta o uso de ssh como transporte

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

algumas versões mais antigas do rsync exigem que você especifique ssh explicitamente

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

Uma alternativa ao uso do rsync é o BC Pierce's Unison , que possui funcionalidade semelhante ao rsync, mas mantém um índice local nas duas extremidades para evitar a necessidade de percorrer o sistema de arquivos para calcular os deltas

Dave Cheney
fonte
Obrigado pela resposta rápida! Eu deveria ter mencionado que também investiguei - o problema (no meu caso) com isso é que ele não restringe / chroot o usuário. Se fosse possível conversar com o serviço rsync via ssh (ou seja, usar a sintaxe de dois pontos de dois pontos para definir o controle remoto) - isso seria perfeito - mas o acima funcionará apenas com dois pontos - ou seja, via ssh e, portanto, sem chrooting.
Xerxes
Esqueci de mencionar - o Unison parece legal, e vou manter um link para ele - no entanto, neste caso - não consigo instalar nada fora do oferecido pela RHN - que é manco, mas está fora do meu controle.
Xerxes
Outra restrição que devo mencionar é que a conexão precisa ser iniciada a partir do cliente - do lado que está puxando, e não do servidor. (O envio pelo servidor seria naturalmente fácil de proteger o servidor, pois o cliente não tem voz, mas não se aplica ao meu problema atual).
Xerxes
1
servidor rsync -az: / caminho / caminho / on / cliente?
Dave Cheney
1
Por que o chroot? Você sabe que um chroot não melhora muito a segurança. Além disso, se você já fornece o ssh, o rsync over ssh não reduz a segurança do sistema. Também pense que o que o rsync over ssh faz é invocar o binário rsync no servidor. Você pode proteger da mesma maneira que protege seu comando de cópia.
Paul de Vrieze
5

Ok, finalmente descobri isso, mas a solução não é tão elegante quanto eu esperava.

No lado do servidor, você precisa adicionar o seguinte ao arquivo allowed_keys para o usuário relevante ...

no-pty, command="exit"

No cliente, você pode criar um túnel da seguinte maneira ...

ssh -l username -fNTL 8073:server:873

Depois que o túnel é estabelecido, você pode sincronizar como de costume - usando a sintaxe de dois pontos - não é possível - para o host local.

O número da porta localhost você selecionar (8073) são inteiramente opcionais, obviamente, basta lembrar que isso é o que você tem que rsync para ...

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