Resulta que rsync no puede funcionar con un servidor remoto que tiene un archivo .bashrc?
En el cliente local que obtuve cuando ejecuté rsync:
protocol version mismatch -- is your shell clean?
(see the rsync man page for an explanation)
rsync error: protocol incompatibility (code 2) at compat.c(180) [sender=3.0.7]
Como se sugiere aquí, eliminar el .bashrc en el servidor resolvió el problema. ¿Cómo resolverlo sin eliminar el archivo .bashrc (temporalmente)?
Respuestas:
Puede tener problemas si el
.bashrc
servidor remoto emite algo al terminal. Rsync puede no esperar eso y puede tener problemas como resultado.Puede solucionar esto eliminando cualquier comando en
.bashrc
ese texto de salida, o canalizando cualquier salida a / dev / null.fuente
El .bashrc realmente no es el lugar correcto para generar resultados, ya que causa este tipo de problema. Sin embargo, mucha gente se sale con la suya hasta que intentan ejecutar rsync :-)
Cualquier salida deseada (y la lógica y los comandos asociados) se deben mover a su .bash_profile (consulte, por ejemplo, la pregunta de error del servidor ".profile vs. .bash_profile vs. .bashrc" para obtener más información sobre las diferencias entre los archivos).
De esa manera, no tendrá que sacrificar la obtención de la salida cuando inicie sesión, ni tratar de hacer cambios temporales en su .bashrc cuando quiera usar rsync.
fuente
Siempre tuve archivos .bashrc en mis cuentas de usuario y nunca tuve este problema hasta que intenté hoy sincronizar algo con mi servidor usando la cuenta raíz. Tu publicación me ayudó a encontrar la solución:
mis archivos $ user / .bashrc siempre comienzan con la siguiente sección para evitar este tipo de problema. ¡Lo repliqué en .bashrc de raíz y rsync'ing ahora funciona de maravilla!
HTH, karsten
fuente
rsync
porque, por cualquier motivo, se clasifica como "shell interactivo". Pero es una buena línea para agregar de todos modos, ya que de lo contrario podría arruinar shells no interactivos si hay alguna salida.Por razones complejas, rsync / scp / sftp ejecuta .bashrc cuando se conecta a otro host. Debe tener cualquiera de estos comandos en la parte superior de su .bashrc :
ya sea
o
Cualquiera de los comandos anteriores solo permitirá la ejecución del resto de comandos .bashrc para sesiones interactivas . Hasta donde sé, no los necesita para ningún otro tipo de sesión (y de hecho, he visto bashrc predeterminado de Arch y Debian usando esta técnica en su bashrc).
Sin embargo, si desea ser más paranoico acerca de permitir que sus comandos bashrc se ejecuten incluso para sesiones no interactivas, al menos debe ajustar los comandos de su bashrc que producen resultados como este ( referencia ) para que solo se ejecuten en sesiones interactivas:
Tenga en cuenta que otros sugieren mover comandos que envían texto a su bash_profile, pero tengo mis dudas sobre si esto siempre es bueno (por las razones explicadas aquí )
fuente