¿Cómo puedo sincronizar sin solicitar una contraseña, sin usar la autenticación de clave pública?

45

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:

En otras palabras, ¡necesito que el RSYNC_PASSWORDenfoque funcione! :-)

Insecto
fuente
¿Ha habilitado rsync daemon en el servidor remoto?
Rahul Patil

Respuestas:

13

Esta variable de entorno de contraseña solo parece usarse cuando se usa el protocolo rsync:

rsync rsync://[email protected]:/abc /def

Para que esto funcione, también debe ejecutar rsync como daemon ( --daemonopción), que a menudo se hace usando inetd.conf.

Al usar este protocolo, abcdebe corresponder a un objetivo definido en /etc/rsyncd.conf. El nombre de usuario debe estar presente en una auth userslínea para este objetivo, y se debe especificar un archivo de contraseña con la secrets fileopción.

Es este archivo de secretos que contiene asignaciones entre nombres de usuario y contraseñas en el siguiente formato:

username:password

Y es esta contraseña la que puede especificar utilizando la variable de entorno RSYNC_PASSWORD.

brm
fuente
Una forma rápida de ejecutar un servidor rsync es con https://s3.amazonaws.com/skaperen/rsend
Skaperen
65

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 usar sshpass:

 sshpass -p "password" rsync [email protected]:/abc /def

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 la RSYNC_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 usar tput resetpara borrar el historial de su terminal.

Graeme
fuente
2
¿Por qué sugeriría agregar texto claro de contraseña en un comando, eso es malo linux admin 101.
Eddie
Súper práctico ... he estado buscando un enfoque para esto por un tiempo. Gracias.
Isaac Gregson
66
Si bien es malo agregar la contraseña como texto sin cifrar, esta es actualmente la única forma razonablemente simple de hacerlo.
Weston Ganger
15
siempre puede hacer algo como esto: sshpass -p $(cat passFile) ..ocultar el pase claro en el historial de bash ,, y chmod 400 en passFile para asegurarlo
Kresimir Pendic
3
Sé que esto es antiguo, pero por el bien de los lectores más nuevos, indique la contraseña: las contraseñas pueden contener caracteres y espacios especiales. -p "$RSYNC_PASSWORD"
Paddy Landau
16

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.

rsync -e"ssh -i /path/to/privateKey" -avR $sourcedir ${ruser}@${rhost}:~/${rdir}/

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.

Eddie
fuente
1
Esto es especialmente útil si está utilizando el nuevo shell Bash para Windows 10. Me preguntaba por qué rsync no funcionaba sin contraseña. Me di cuenta de que estaba usando la ~/.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)
Toby Deshane
12

Muy útil para las secuencias de comandos es utilizar la --password-fileopción de línea de comandos.

  • Crear un archivo vacío llamado rsync_pass
  • escriba la contraseña de este archivo (nada más)
  • chmod 600 rsync_pass
  • rsync $args --password-file=rsync_pass user@rsynchost::/share localdirectory

Esto 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.

Arunas Bartisius
fuente
44
Nota para el lector: esto también requiere que se ejecute un demonio rsync en el servidor. Realmente esperaba que las claves ssh fueran suficientes para rsync sin contraseña.
Sridhar Sarnobat
En mi humilde opinión, esta es la única forma correcta de hacerlo si uno no quiere usar ssh.
maxf130
Esta respuesta tiene más sentido
AJ Meyghani