Necesito ejecutar rsync
, sin que me solicite la contraseña.
He visto en la página de rsync
manual 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 rsync
sigo 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_PASSWORD
enfoque 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 (
--daemon
opción), que a menudo se hace usandoinetd.conf
.Al usar este protocolo,
abc
debe corresponder a un objetivo definido en/etc/rsyncd.conf
. El nombre de usuario debe estar presente en unaauth users
línea para este objetivo, y se debe especificar un archivo de contraseña con lasecrets file
opció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
rsync
demonio 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
bash
shell esto detendrá el comando (y la contraseña) de ser almacenados en el historial. No recomiendo usar laRSYNC_PASSWORD
variable 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 reset
para 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_rsa
o 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/null
para 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
~/.ssh
carpeta 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-file
opción de línea de comandos.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.
fuente