linux - usar - rsync ssh
rsync sobre SSH preservar la propiedad solo para archivos propiedad de www-data (5)
Estoy usando rsync para replicar una estructura de carpetas web desde un servidor local a un servidor remoto. Ambos servidores son ubuntu linux. Uso el siguiente comando y funciona bien:
rsync -az /var/www/ [email protected]:/var/www/
Los nombres de usuario para el sistema local y el sistema remoto son diferentes. Por lo que he leído, puede que no sea posible conservar todos los propietarios y grupos de archivos y carpetas. Eso está bien, pero me gustaría preservar propietarios y grupos solo para el usuario de www-data, que existe en ambos servidores.
es posible? Si es así, ¿cómo voy a hacer eso?
¡Gracias!
** EDIT **
Se menciona que rsync puede conservar la propiedad y los grupos en las sincronizaciones de archivos remotos aquí: http://lists.samba.org/archive/rsync/2005-August/013203.html
** EDITAR 2 **
Terminé obteniendo el efecto deseado gracias a muchos de los útiles comentarios y respuestas aquí. Suponiendo que la IP de la máquina fuente es 10.1.1.2 y la IP de la máquina de destino es 10.1.1.1. Puedo usar esta línea desde la máquina de destino:
sudo rsync -az [email protected]:/var/www/ /var/www/
Esto preserva la propiedad y los grupos de archivos que tienen un nombre de usuario común, como www-data. Tenga en cuenta que el uso de rsync
sin sudo
no conserva estos permisos.
Los usuarios raíz para el sistema local y el sistema remoto son diferentes.
¿Qué significa esto? El usuario raíz es uid 0. ¿En qué se diferencian?
Cualquier usuario con permiso de lectura para los directorios que desea copiar puede determinar qué nombres de usuario poseen qué archivos. Solo root puede cambiar la propiedad de los archivos que se escriben .
Actualmente está ejecutando el comando en la máquina fuente, que restringe sus escrituras a los permisos asociados con [email protected]. En su lugar, puede intentar ejecutar el comando como raíz en la máquina de destino . Su acceso de lectura en la máquina fuente no es un problema.
Entonces, en la máquina de destino (10.1.1.1), suponiendo que la fuente es 10.1.1.2:
# rsync -az [email protected]:/var/www/ /var/www/
Asegúrate de que tus grupos coincidan en ambas máquinas.
Además, configure el acceso a [email protected] utilizando una clave DSA o RSA, de modo que pueda evitar tener contraseñas flotando. Por ejemplo, como raíz en su máquina de destino, ejecute:
# ssh-keygen -d
A continuación, tome el contenido del archivo /root/.ssh/id_dsa.pub
y agréguelo a ~user/.ssh/authorized_keys
en la máquina fuente. Puede ssh [email protected]
como root desde la máquina de destino para ver si funciona. Si recibe un mensaje de contraseña, verifique su registro de errores para ver por qué la clave no funciona.
Bueno, podrías saltearte los desafíos de rsync, y solo haz esto a través de un túnel de alquitrán.
sudo tar zcf - /path/to/files | /
ssh user@remotehost "cd /some/path; sudo tar zxf -"
Tendrá que configurar sus claves SSH como describió Graham.
Tenga en cuenta que esto maneja copias de directorio completo, no actualizaciones incrementales como rsync.
La idea aquí es que:
- usted sube su directorio,
- en lugar de crear un archivo tar, envía la salida tar a stdout,
- ese stdout se canaliza a través de un comando SSH a un tar receptor en el otro host,
- pero ese tar de recibir es ejecutado por sudo, por lo que tiene acceso de escritura privilegiado para establecer nombres de usuario.
Por lo que yo sé, no puedes chown
archivos a alguien más que tú, si no eres root. Por lo tanto, deberá rsync
utilizando la cuenta www-data
, ya que todos los archivos se crearán con el usuario especificado como propietario. Por lo tanto, necesita chown
los archivos posteriormente.
También puede sudo la rsync en el host de destino utilizando la opción --rsync-path
:
# rsync -av --rsync-path="sudo rsync" /path/to/files user@targethost:/path
Esto le permite autenticarse como user
en targethost, pero aún así obtener permiso de escritura privilegiado a través de sudo
. Deberá modificar su archivo sudoers en el host de destino para evitar la solicitud de sudo de sudo. man sudoers
o ejecutar sudo visudo
para obtener instrucciones y muestras.
Menciona que desea conservar la propiedad de los archivos propiedad de www-data, pero no de otros archivos. Si esto es realmente cierto, puede que no tenga suerte a menos que implemente chown
o una segunda ejecución de rsync
para actualizar los permisos. No hay forma de decirle a rsync que preserve la propiedad de un solo usuario .
Dicho esto, deberías leer sobre la opción rsync --files-from
.
rsync -av /path/to/files user@targethost:/path
find /path/to/files -user www-data -print | /
rsync -av --files-from=- --rsync-path="sudo rsync" /path/to/files user@targethost:/path
No lo he probado, así que no estoy seguro de cómo funcionará la salida de --files-from=-
en --files-from=-
. Sin duda, necesitarás experimentar.
Tuve un problema similar e hice trampa en el comando rsync,
rsync -avz --delete root @ xxxx: / home // dominios / sitio / public_html / / home / domains2 / public_html && chown -R wwwusr: wwwgrp / home / domains2 / public_html /
el && ejecuta el chown contra la carpeta cuando rsync se completa con éxito (1x ''&'' ejecuta el chown independientemente del estado de finalización de rsync)