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/rsync
le dicesudo
que cuando su usuario se ejecuta/usr/bin/rsync
o simplementersync
que 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/example
luego 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_tickets
todos modos ... así que puedo probar este enfoque.sudo: no tty present and no askpass program specified
Necesita un método para proporcionar la contraseña
sudo
. Unaskpass
programa está diseñado para solicitar contraseñas cuando los mecanismos normales no están disponibles. La configuraciónsudo
para no requerir una contraseña para ejecutarsersync
como 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
rsync
como root, este tipo de cosas se vuelven más fáciles de hacer. Otra alternativa es utilizar unrsycnd
proceso 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
NOPASSWD
o claves) - en Ubuntu 14.04:sudo
en la máquina remota deshabilitando atty_tickets
travé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"rsync
consudo
como se muestra en otras respuestassudo
en 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 -v
debe 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.y
está 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