Rsync sobre ssh con acceso raíz en ambos lados

14

Tengo un servidor ubuntu más antiguo y un servidor Debian más nuevo y estoy migrando datos del antiguo al nuevo. Quiero usar rsync para transferir datos para que la migración final sea más fácil y rápida que el proceso tar / scp / untar equivalente.

Como ejemplo, quiero sincronizar las carpetas de inicio de una en una con el nuevo servidor. Esto requiere acceso a la raíz en ambos extremos ya que no todos los archivos en el lado de origen son legibles en todo el mundo y el destino debe escribirse con los permisos correctos en / home. No puedo entender cómo dar acceso a rsync root en ambos lados.

He visto algunas preguntas relacionadas, pero ninguna coincide con lo que estoy tratando de hacer.

Tengo sudo configurado y trabajando en ambos servidores.

Tim Abell
fuente

Respuestas:

14

En realidad , NO necesita permitir la autenticación de raíz a través de SSH para ejecutar rsync como sugiere Antoine. El transporte y la autenticación del sistema se pueden realizar completamente a través de las cuentas de usuario siempre que pueda ejecutar rsync con sudo en ambos extremos para leer y escribir los archivos.

Como usuario en su servidor de destino, puede chupar los datos de su servidor de origen de esta manera:

sudo rsync -aPe ssh --rsync-path='sudo rsync' boron:/home/fred /home/

El usuario que ejecute en ambos servidores necesitará acceso sin contraseña * sudo al binario rsync, pero NO necesita habilitar el inicio de sesión ssh como root en ningún lugar. Si el usuario que está utilizando no coincide en el otro extremo, puede agregar user @ boron: para especificar un usuario remoto diferente.

Buena suerte.

* o deberá haber ingresado la contraseña manualmente dentro de la ventana de tiempo de espera.

Caleb
fuente
55
Aunque esta es una vieja pregunta, me gustaría agregar una palabra de PRECAUCIÓN a esta respuesta aceptada. Según tengo entendido, permitir "sudo rsync" sin contraseña es equivalente a abrir la cuenta raíz para el inicio de sesión remoto. Esto se debe a que con esto es muy fácil obtener acceso completo a la raíz, por ejemplo, porque todos los archivos del sistema se pueden descargar, modificar y reemplazar sin una contraseña.
Ascurion
3

Si sus datos no son muy confidenciales, puede usar tary socat. En mi experiencia, esto es a menudo más rápido que rsyncsobre ssh.

Necesitas socato netcaten ambos lados.

En el host de destino, vaya al directorio donde desea colocar sus datos, después de eso ejecute:
socat TCP-LISTEN:4444 - | tar xzf -

Si el host de destino está escuchando, inícielo en la fuente como:
tar czf - /home/fred /home/ | socat - TCP:ip-of-remote-server:4444

Para esta configuración, necesitará una conexión confiable entre los 2 servidores.

zagyi
fuente
Buen punto. En un entorno de confianza, obtendrá mucha velocidad al no cifrar. Puede que no importe en archivos pequeños, pero con GB de datos lo hará.
pboin
2

Ok, he reunido todas las pistas para obtener algo que funcione para mí.

Llamemos a los servidores "src" y "dst".

Configure un par de claves para root en el servidor de destino y copie la clave pública en el servidor de origen:

dest $ sudo -i
dest # ssh-keygen
dest # exit
dest $ scp /root/id_rsa.pub src:

Agregue la clave pública a las claves autorizadas de root en el servidor de origen

src $ sudo -i
src # cp /home/tim/id_rsa.pub .ssh/authorized_keys

De vuelta en el servidor de destino, extraiga los datos con rsync:

dest $ sudo -i
dest # rsync -aP src:/home/fred /home/
Tim Abell
fuente