Forzar rsync al modo no interactivo

Forzar rsync al modo no interactivo

Me gustaría usar rsync dentro de un script en Python. Lo llamo usando el subprocessmódulo y me autentico usando claves públicas almacenadas en el authorized_keyarchivo en la máquina remota.

El único problema es que cuando uso rsync con un nombre de usuario remoto incorrecto, se me solicita la contraseña, lo que obviamente detiene el script de respaldo para siempre.

¿Puedo forzar rsyncla salida con error si no puedo autenticarme, en lugar de solicitar la contraseña?

udi

Respuesta1

Suponiendo que usa rsync con un shell remoto SSH (y no, por ejemplo, con un servidor rsync), puede hacer que rsync ejecute SSH de una manera que nunca le solicite una contraseña. Por ejemplo, una vez puede usar esta llamada:

rsync -e 'ssh -o "NumberOfPasswordPrompts 0"' source user@target:/path

Esto obligará a rsync a usar SSH con 0 posibles intentos de contraseña; si no puede obtener acceso utilizando algún otro método de autenticación (como clave pública o GSSAPI), fallará con un error. Tenga en cuenta que no le agradará a rsync cuando eso suceda y se quejará en voz alta con STDERR y romperá con el código de salida 255.

Respuesta2

Estas son las opciones de línea de comando para ssh que uso para mantenerlo en silencio.

ssh -o stricthostkeychecking=no -o userknownhostsfile=/dev/null -o batchmode=yes -o passwordauthentication=no

Solo necesita la clave de host si no mantiene su archivo conocido_hosts y le preocupa recibir advertencias de MitM. En lugar de especificar los tipos de autenticación como sugirió James F, tuve que restringir explícitamente la autenticación con contraseña. Sin embargo, uso esto para acceder a cientos de hosts con algunas versiones diferentes del sistema operativo, por lo que puede ser simplemente una incompatibilidad.

Respuesta3

re: sugerencia de James (sin darle tty), para el subproceso, intente poner stdin=None como parámetro para Popen.

Respuesta4

Dependiendo de cómo inicie rsync, puede ser útil no darle un TTY o PTY.

Muchos programas verifican si tienen un TTY de control antes de decidir solicitar información al usuario. El comportamiento predeterminado de system() y llamadas similares es proporcionar un tty a los subprogramas, pero puede desactivarlo.

También es posible deshabilitar completamente la autenticación de contraseña en el lado remoto si tiene el control de ambos sistemas y desea evitar la autenticación de contraseña para obtener beneficios de seguridad mientras resuelve este problema.

Si está haciendo rsync a través de SSH, puede agregar lo siguiente a su archivo ssh_config para el host en cuestión, o mediante el modificador de línea de comando -o:

PreferredAuthentications publickey

En una prueba rápida (solo de ssh, no de rsync) que provocó que SSH se cerrara inmediatamente cuando mi clave pública no fue aceptada sin solicitarme una contraseña.

información relacionada