Cómo realizar una sincronización segura entre servidores a través de una red no segura

19

Básicamente, lo que pregunto es si alguien ha encontrado un medio para envolver rsync en ssh.

Con OpenSSH v4.9 + sftp tiene algunas buenas opciones que le permiten cambiar la conexión entrante y tal, y esa es una solución que consideraría, sin embargo, estoy atascado con RHEL, y ni RHEL4 ni RHEL5 están a la altura de esa versión de ssh

Mi solución actual es agregar algo como esto al lado del servidor usando la clave del usuario del cliente ...

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

... y entonces el cliente estaría restringido a una sola cosa y solo a una ...

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

Esto asegura la conexión, así como el servidor (del cliente), sin embargo, es ineficiente ya que todos los archivos se recuperarán una y otra vez.

Después de hacer algo similar (o simplemente mejor) usando rsync.

Jerjes
fuente

Respuestas:

18

Rsync admite el uso de ssh como transporte

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

Algunas versiones anteriores de rsync requieren que especifique ssh explícitamente

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

Una alternativa al uso de rsync es Unison de BC Pierce , que tiene una funcionalidad similar a rsync, pero mantiene un índice local en ambos extremos para evitar tener que recorrer el sistema de archivos para calcular los deltas

Dave Cheney
fuente
¡Gracias por la rápida respuesta! Debería haber mencionado que también investigué eso; el problema (en mi caso) con eso es que no restringe / desestabiliza al usuario. Si fuera posible hablar con el servicio rsync a través de ssh (es decir, utilizando la sintaxis de dos puntos para definir el control remoto), eso sería perfecto, pero lo anterior solo funciona con dos puntos, es decir, a través de ssh y, por lo tanto, sin chrooting.
Jerjes
Olvidé mencionarlo: Unison se ve bien y mantendré un enlace a él; sin embargo, en este caso, no puedo instalar nada fuera de lo ofrecido por RHN, lo cual es lamentable, pero está fuera de mi control.
Jerjes
Otra restricción más que debo mencionar es que la conexión debe iniciarse desde el cliente, el lado <i> pull </i>, y no el servidor. (La inserción del lado del servidor, naturalmente, sería fácil de asegurar, ya que el cliente no tiene voz, pero no es aplicable a mi problema actual).
Jerjes
1
rsync -az server: / ruta / ruta / en / cliente?
Dave Cheney
1
¿Por qué el chroot? Sabes que un chroot realmente no mejora tanto la seguridad. Además, si ya sale a proporcionar ssh, entonces rsync over ssh no reduce la seguridad del sistema. También piense que lo que hace rsync sobre ssh es invocar el binario rsync en el servidor. Puede asegurarlo de la misma manera que asegura su comando de copia.
Paul de Vrieze
5

Bien, finalmente descubrí esto, pero la solución no es tan elegante como esperaba.

En el lado del servidor, debe agregar lo siguiente al archivo autorizado_claves para el usuario relevante ...

no-pty, command="exit"

En el cliente, puede crear un túnel de la siguiente manera ...

ssh -l username -fNTL 8073:server:873

Una vez que se establece el túnel, puede rsync como de costumbre, no es posible usar la sintaxis de dos puntos, a localhost.

El número de puerto localhost selecciona (8073) son totalmente opcionales, evidentemente, sólo recuerda que eso es lo que tiene que rsync a ...

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