¿Es posible usar rsync sobre sftp (sin un shell ssh)?

Pregunta:

Rsync sobre ssh, funciona muy bien siempre.

Sin embargo, al intentar sincronizar con un host que solo permite inicios de sesión sftp, pero no inicios de sesión ssh, se produce el siguiente error:

rsync -av / source ssh user @ remotehost: / target /

La versión del protocolo no coincide: ¿está limpia su shell? (consulte la página del manual de rsync para obtener una explicación) Error de rsync: incompatibilidad de protocolo (código 2) en compat.c (171) [remitente = 3.0.6]

Aquí está la sección relevante de la página del manual de rsync:

Este mensaje generalmente es causado por sus scripts de inicio o la instalación de shell remota que produce basura no deseada en la secuencia que rsync está usando para su transporte. La forma de diagnosticar este problema es ejecutar su shell remoto de esta manera:

 ssh remotehost /bin/true > out.dat

luego mire out.dat. Si todo funciona correctamente, out.dat debería ser un archivo de longitud cero. Si recibe el error anterior de rsync, probablemente encontrará que out.dat contiene texto o datos. Mire el contenido e intente averiguar qué lo está produciendo. La causa más común son los scripts de inicio de shell configurados incorrectamente (como .cshrc o .profile) que contienen declaraciones de salida para inicios de sesión no interactivos.

Probar esto en mi sistema produjo lo siguiente en out.dat:

ssh-dummy-shell: comando no permitido.

Como pensé, el host no permite inicios de sesión ssh.

El siguiente enlace muestra que es posible realizar esta tarea usando fusible con sshfs; sin embargo, es extremadamente lento y no apto para uso en producción.

¿Existe alguna posibilidad de que rsync sftp funcione?

Respuesta:

Desafortunadamente, no directamente. rsync requiere un enlace limpio con un shell que le permitirá iniciar la copia remota de rsync , cuando se ejecute de esta manera.

Si tiene alguna forma de ejecutar procesos de escucha de larga duración en el host, puede intentar iniciar rsync escuchando manualmente las conexiones en un puerto sin privilegios, pero la mayoría de las técnicas para hacerlo también requerirían un acceso de shell adecuado a través de SSH, y se basa en los arreglos del firewall de los hosts permiten que las conexiones entren en el puerto que elija (y el host que tiene rsync instalado en primer lugar). Sin embargo, generalmente no se recomienda ejecutar rsync como un servicio direccionable públicamente (en lugar de indirectamente a través de SSH o similar) para datos no públicos.

Si su host permite la creación de scripts en PHP o similar y no lo tiene bloqueado para que los procesos adicionales no puedan ser exec por scripts de usuario, entonces podría intentar iniciar rsync en modo de escucha de esa manera. Si su extremo es conectable (está ejecutando SSH accesible para el mundo exterior), puede intentar esto a la inversa: haga que un script ejecute rsync en el servidor, pero en lugar de escuchar las conexiones entrantes, pida que se comunique con su servicio local y sincronice de esa manera. Esto todavía depende de que rsync se instale realmente en el host, lo cual no es un hecho, o que puede cargar una copia de trabajo, pero no tiene las implicaciones de seguridad de ejecutar un demonio rsync de una manera públicamente direccionable y hablar con él a través de un código no cifrado. canal.

Sin embargo, jugar como se describió anteriormente puede ir en contra de las políticas de hosts, incluso si funciona, y podría hacer que lo expulsen. Es mejor preguntar si se puede habilitar un shell completo para esa cuenta y abandonar rsync para ese host o abandonar ese host y mudarse a otro lugar si no lo hacen.

Leave a Comment

Your email address will not be published. Required fields are marked *

web tasarım