Necesito ejecutar rsync, sin que me solicite la contraseña.
He visto en la página de rsyncmanual que no permite especificar la contraseña como argumento de línea de comando.
Pero noté que permite especificar la contraseña a través de la variable RSYNC_PASSWORD.
Así que intenté exportar la variable, pero rsyncsigo pidiéndome contraseña.
export RSYNC_PASSWORD="abcdef"
rsync [email protected]:/abc /def
¿Qué estoy haciendo mal?
Por favor considera:
- Entiendo que esta es una mala idea desde el punto de vista de la seguridad.
- Debo usar solo
rsync, no puedo usar otro software - No puedo usar la autenticación basada en claves
- Ya he leído muchas preguntas de SE, por ejemplo:
cómo-pasar-contraseña-para-rsync-ssh-command @ stackoverflow.com
rsync-cron-trabajo-con-una-contraseña @ superuser.com
cómo-configurar -rsync-sin-contraseña-con-ssh-on-unix-linux @ superuser.com
En otras palabras, ¡necesito que el RSYNC_PASSWORDenfoque funcione! :-)

Respuestas:
Esta variable de entorno de contraseña solo parece usarse cuando se usa el protocolo rsync:
Para que esto funcione, también debe ejecutar rsync como daemon (
--daemonopción), que a menudo se hace usandoinetd.conf.Al usar este protocolo,
abcdebe corresponder a un objetivo definido en/etc/rsyncd.conf. El nombre de usuario debe estar presente en unaauth userslínea para este objetivo, y se debe especificar un archivo de contraseña con lasecrets fileopción.Es este archivo de secretos que contiene asignaciones entre nombres de usuario y contraseñas en el siguiente formato:
Y es esta contraseña la que puede especificar utilizando la variable de entorno RSYNC_PASSWORD.
fuente
Si el
rsyncdemonio no se está ejecutando en la máquina de destino, y no le importa exponer las contraseñas a todos en la máquina local ( ¿Por qué alguien no debería usar contraseñas en la línea de comando? ), Puede usarsshpass:Tenga en cuenta el espacio al comienzo del comando, en el
bashshell esto detendrá el comando (y la contraseña) de ser almacenados en el historial. No recomiendo usar laRSYNC_PASSWORDvariable a menos que sea absolutamente necesario (según una edición anterior de esta respuesta), recomiendo suprimir el almacenamiento del historial o al menos borrar el historial después. Además, puede usartput resetpara borrar el historial de su terminal.fuente
sshpass -p $(cat passFile) ..ocultar el pase claro en el historial de bash ,, y chmod 400 en passFile para asegurarlo-p "$RSYNC_PASSWORD"Puede usar identidades ssh estándar para iniciar sesión sin contraseña. Esto se maneja de manera predeterminada si tiene un
~/.ssh/id_rsao similar, pero también puede codificar su propia ruta a la clave privada de un par de claves autorizado.Esto permite el procesamiento por lotes / scripting sin exponer las contraseñas, y la clave pública se puede eliminar del servidor de destino si la clave privada alguna vez se ve comprometida.
También puede agregar argumentos
-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/nullpara no forzar la verificación de la clave del host remoto. ! Precaución: eso abre al hombre en los ataques medios y es una mala práctica en general.fuente
~/.sshcarpeta dentro del shell (donde vive rsync). Una vez que usé -e para señalar la llave adentro/mnt/c/Users/MyUsername/.ssh, funcionó como se esperaba. (Gracias.: D)Muy útil para las secuencias de comandos es utilizar la
--password-fileopción de línea de comandos.chmod 600 rsync_passrsync $args --password-file=rsync_pass user@rsynchost::/share localdirectoryEsto se puede usar para crear secuencias de comandos y permite ser más seguro que solo exportar la contraseña a la variable del sistema.
fuente