Quiero sincronizar una carpeta de mi máquina con una carpeta en una máquina remota. La carpeta remota solo puede ser manipulada por root. Tengo una cuenta en la máquina remota que puedo usar sudo. ¿Cómo puedo ejecutar rsync de modo que tenga permisos de root en la máquina remota?
He intentado lo siguiente:
rsync -avz -e ssh /home/ubuntu/my/lovely/folder [email protected]:/remote/lovely/folder --delete --rsync-path="sudo rsync"
Pero (después de ingresar mi contraseña) aparece el siguiente error:
sudo: no tty present and no askpass program specified

Respuestas:
Prueba esta solución. En su archivo sudoers (
/etc/sudoers) configure a su usuario así:el
NOPASSWD:/usr/bin/rsyncle dicesudoque cuando su usuario se ejecuta/usr/bin/rsynco simplementersyncque no se necesita contraseña.Entonces tu original
--rsync-path="sudo rsync"debería funcionar.fuente
Esta es la solución que se me ocurrió:
¡Un poco de misión!
fuente
ps aux). Prueba:,rsync -R -avz -e ssh --rsync-path="find / > /dev/null && rsync" server.example.com:/ /tmp/exampleluego abra la terminal en la máquina remota yps aux | grep find.find /se usa solo porque es lo primero que se me ocurrió con una gran duración de ejecución.La solución en este blog funcionó muy bien para mí: http://www.pplux.com/2009/02/07/rsync-root-and-sudo/ .
Básicamente:
La primera línea permite la entrada de contraseña interactiva, sin mostrar la contraseña en la pantalla. Funciona muy bien para mí en Ubuntu 9.04.
fuente
!tty_tickets.ssh -t [other options]lugar de jugar constty -echo?tty_ticketstodos modos ... así que puedo probar este enfoque.sudo: no tty present and no askpass program specifiedNecesita un método para proporcionar la contraseña
sudo. Unaskpassprograma está diseñado para solicitar contraseñas cuando los mecanismos normales no están disponibles. La configuraciónsudopara no requerir una contraseña para ejecutarsersynccomo su ID de usuario es una opción.Normalmente configuro el inicio de sesión basado en claves con restricciones apropiadas para casos como este. Si configura una clave restringida que solo se ejecuta
rsynccomo root, este tipo de cosas se vuelven más fáciles de hacer. Otra alternativa es utilizar unrsycndproceso para manejar las solicitudes remotas. La configuración proporciona una variedad de restricciones que se pueden aplicar.EDITAR: Incluí un script para configurar claves para loings basados en claves en la sección Crear ID de usuario en clientes de mi publicación sobre Configuración de BackupPC en Linux . Consulte también la documentación de ssh_config que detalla algunas de las cosas que puede hacer para restringir el uso de la clave como se muestra en el script.
fuente
en máquina remota
luego en la máquina local
ruta sustituta a ssh-askpass con ruta real en máquina remota
fuente: http://unix.bris.ac.uk/2015/08/04/rsync-between-two-hosts-using-sudo-and-a-password-prompt/
fuente
Estoy sorprendido por la complejidad de las respuestas existentes. Es mucho más fácil y conveniente configurar sus sistemas (su PC y el host remoto) para que pueda conectarse como root al host remoto sin usar una contraseña. Y a diferencia de su aspecto, también es seguro .
Simplemente no olvide que mientras la línea en /root/.ssh/authorized_keys del host remoto esté allí, la máquina acepta los comandos raíz de su PC.
fuente
Esto es lo que funcionó para mí, teniendo en cuenta que quiero mantener la autenticación de contraseña (por lo que no quiero usar
NOPASSWDo claves) - en Ubuntu 14.04:sudoen la máquina remota deshabilitando atty_ticketstravés de un archivo temporal en/etc/sudoers.d/(que debería ser compatible con Debian, ver/etc/sudoers.d/README), y "Actualizar las credenciales en caché del usuario", que "extiende el tiempo de espera de sudo por otros 15 minutos"rsyncconsudocomo se muestra en otras respuestassudoen la máquina remota eliminando el archivo temporal en/etc/sudoers.d/, que vuelve a habilitartty_tickets... o, con líneas de comando:
Estas son las respuestas que obtengo al ejecutar estos comandos en la máquina local:
Tenga en cuenta que
sudo -vdebe ejecutarse después de cada archivo de entrada/etc/sudoers.d/, por lo que se aceptan los cambios allí.fuente
Otro método es evitar las restricciones de permisos iniciando rsync en la máquina remota. En lugar de:
Tu puedes hacer:
¿Dónde
y.y.y.yestá la dirección IP de su máquina local? Esto solo funciona si su máquina local puede actuar como un servidor SSH.fuente
Mi solución es agregar
--rsync-path="echo PASSWORD | sudo -Sv && sudo rsync"ejemplo:
rsync -avz -e ssh /home/ubuntu/my/lovely/folder [email protected]:/remote/lovely/folder --delete --rsync-path="echo <PASSWORD> | sudo -Sv && sudo rsync"Por lo general, no es una buena idea poner las contraseñas en una línea de comandos de una sola línea; se vuelven visibles en el árbol de procesos, por ejemplo. A veces reemplazo la contraseña real en este tipo de declaración con $ (cat my_password.txt), que es un poco mejor
rsync -avz -e ssh /home/ubuntu/my/lovely/folder [email protected]:/remote/lovely/folder --delete --rsync-path="cat my_password.txt | sudo -Sv && sudo rsync"fuente