it-swarm-es.com

No se puede hacer que rsync funcione en modo daemon-over-ssh

Estoy intentando configurar rsync para copiar los datos de un servidor todos los días. Para que el sistema sea lo más restringido posible, estoy tratando de usar el modo descrito en la página del manual como: "USANDO LAS CARACTERÍSTICAS DE RSYNC-DAEMON VIA UNA CONEXIÓN REMOTA-Shell"

Así que puse un archivo llamado rsyncd.conf en la carpeta de inicio de las raíces:

[root]
path = /
read only = true

e intenté copiar/etc/passwd como prueba:

rsync -vv -e ssh myserver::root/etc/passwd .

Pero obtengo lo siguiente:

opening connection using: ssh myserver rsync --server --daemon . 
rsync: connection unexpectedly closed (0 bytes received so far) [receiver]
rsync error: error in rsync protocol data stream (code 12) at io.c(635) [receiver=3.0.3]

La razón por la que estoy haciendo todo esto es que una vez que lo haga funcionar, planeo restringir el acceso especificando el comando

rsync --server --daemon .

en ~/.ssh/authorized_keys

11
rjmunro

Parece haber un error en la documentación o la implementación de rsync. man rsync dice:

Rsync admite la conexión a un host mediante un Shell remoto y luego genera un servidor "demonio" de un solo uso que espera leer su archivo de configuración en el directorio inicio del usuario remoto.

pero al conectarse a root, de acuerdo con/var/log/messages, buscaba en /etc/rsyncd.conf el archivo de configuración (la ubicación estándar para un archivo rsyncd.conf cuando no se usa sobre SSH.

Tuve que forzar al servidor ssh a usar el archivo de configuración correcto agregando

command="rsync --config=/root/rsyncd.conf --server --daemon ."

a /root/.ssh/authorized_keys.

La razón por la que no puse la configuración en la ubicación predeterminada es que no quería que alguien iniciara accidentalmente un demonio rsync normal; solo quiero que un demonio tenga tanto acceso cuando tenga la clave ssh correcta.

11
rjmunro

rsync en modo daemon no es lo que sugeriría si desea bloquearlo lo más posible. Desea restringir el comando que se permite ejecutar una clave SSH e invocar el comando de copia utilizando esa clave.

Para saber a qué comando restringir la clave, ejecute la línea de comando rsync apropiada con una ligera modificación en el comando ssh:

rsync -avz -e 'ssh -v' stuff somewhere:/place

Verá una línea en la salida de depuración como:

debug1: Sending command: rsync --server -vlogDtprze.iLs . /place

Ese comando exacto es lo que desea restringir la clave para que pueda ejecutarse en .ssh/allowed_keys:

command="rsync --server -vlogDtprze.iLs . /place" ssh-dss AAAASSHKEY=
5
MikeyB