Al seguir las instrucciones para hacer copias de seguridad de rsync aquí: http://troy.jdmz.net/rsync/index.html
Me aparece el error "la versión del protocolo no coincide - ¿está limpio su shell?"
Leí en alguna parte que necesitaba silenciar las indicaciones (PS1 = "") y motd (.hushlogin) para solucionar esto. He hecho esto, el aviso y el banner de inicio de sesión (MOTD) ya no aparecen, pero el error aún aparece cuando ejecuto:
rsync -avvvz -e "ssh -i /home/thisuser/cron/thishost-rsync-key" remoteuser@remotehost:/remote/dir /this/dir/
Tanto el cliente ssh como el servidor sshd están utilizando la versión 2 del protocolo.
¿Cual podría ser el problema? Gracias.
[EDITAR] He encontrado http://www.eng.cam.ac.uk/help/jpmg/ssh/authorized_keys_howto.html que indica que a veces es necesario "Forzar v2 usando la bandera -2 para ssh o slogin
ssh -2 -i ~/.ssh/my_private_key remotemachine"
No está claro que esto resolvió el problema, ya que creo que puse este cambio DESPUÉS de que el error cambió, pero el hecho es que el error ha evolucionado a otra cosa. Actualizaré esto cuando sepa más. Y ciertamente intentaré la sugerencia de ejecutar esto en un shell de emacs - gracias.
ESC x shell
y hacerexport TERM=xterm; ssh remotehost ls
. Si aparecen caracteres de control u otra salida espuria, eso es lo que tienes que cazar.--rsync-path
) no cambia nada para mí.Respuestas:
Probablemente uno de sus scripts de inicio de sesión (.bashrc / .cshrc / etc.) Esté enviando datos al terminal (cuando no debería estarlo). Esto está causando un error de ssh cuando se conecta y se prepara para copiar, ya que comienza a recibir datos adicionales que no espera. Elimine la salida que se genera en los scripts de inicio.
Puede verificar si su terminal es interactiva y solo genera texto utilizando el siguiente código en un bashrc. También existe algo equivalente para otros proyectiles:
o alternativamente, así, ya que el parámetro especial
-
contienei
cuando el shell es interactivo:Para obtener más información, consulte: rsync a través de ssh de Linux a Windows sbs 2003 no coincide el protocolo
Para diagnosticar esto, asegúrese de que el siguiente es el resultado que obtiene cuando ingresa al host:
Si obtiene nuevas líneas u otros datos, sabe que se está enviando una salida adicional. Puede cambiar el nombre de su .bashrc / .cshrc / .profile / etc. archivos a otra cosa para que no generen salida adicional. Por supuesto, todavía hay archivos del sistema que podrían causar esto. En ese caso, verifique con su administrador de sistemas que los archivos del sistema no generen datos.
fuente
echo
en el~/.bashrc
, Thx. MeHay una manera simple de probar si su shell está limpio, para una conexión ssh: ejecute un comando desde la conexión ssh, en lugar de iniciar un shell interactivo. El
false
comando terminará inmediatamente sin producir ningún resultado, por lo que es una buena prueba:Si esa línea de comando produce algún resultado, uno de los scripts de inicio es el culpable:
Otra cosa para verificar si está recibiendo este error es si rsync está instalado y localizable por ssh:
Si rsync no está en la ruta, verá algo como:
Puede solucionar esto instalando rsync, o si está instalado pero en una ubicación inusual, pasando la ubicación a la línea de comando rsync:
fuente
Esto es comúnmente causado por las cosas de inicio de sesión de su shell que generan cosas en un shell no interactivo. Puede probar si este es el caso haciendo:
Si testfile NO tiene 0 bytes, entonces el problema es que su shell está generando algo. Comprobar
/etc/profile
,.profile
,.bashrc
,.cshrc
, etc. Si es así, usted puede cambiar para comprobar si su terminal es de texto interactivo y sólo de salida al utilizar el código siguiente en un bashrc. También existe algo equivalente para otros proyectiles:o alternativamente, así, ya que el parámetro especial
-
contienei
cuando el shell es interactivo:Sin embargo, si el archivo de prueba es de hecho 0 bytes, entonces su shell se está comportando, pero es posible que solo tenga una versión muy antigua de rsync. Puede decirle al cliente que finaliza (suponiendo que sea el último) que no anuncie una versión tan alta que la versión anterior del servidor rysnc no la reconozca. Puedes hacer esto usando la
--protocol=
opción. En mi caso, usar--protocol=30
hizo el truco.Si todavía tiene problemas, intente ssh mientras el usuario rsysnc se está conectando e intente ejecutar
rsync --version
para ver si el shell puede encontrar rsync. Si obtiene algo que dice que no se encontró el comando, es posible que rsync no esté instalado en la máquina a la que se está conectando o que no esté en la ruta. Rsync tiene opciones para especificar la ruta del extremo remoto, lea las páginas de manual.fuente
--protocol
cuál resolvió mi problema con un servidor 2.5.6 (versión de protocolo 26) y un cliente 3.1.0 (versión de protocolo 31)Este es un caso especial de las otras respuestas, pero no es muy diferente de entonces.
Para ejecutar un rsync a través de ssh, necesita acceso de shell en ssh para ejecutar el comando remoto rsync. Si su cuenta ssh solo permite scp / sftp, no podrá iniciar la eliminación de rsync y falla al dar este error.
Esto se puede probar con el mismo comando que el anterior
Este debería fallar y este debería ser un éxito
Esto demuestra que tiene un acceso solo sftp.
Si quieren y tienen permisos para hacerlo, puede desactivar la SFTP único acceso para ese usuario, mediante la modificación del
/etc/ssh/sshd_config
vehículo y verifiquematch
yforcecommand
entradas.También puedes consultar esta publicación
fuente
Obtuve
protocol version mismatch -- is your shell clean?
simplemente porque todavía no había instalado rsync en el otro extremo.sudo yum install rsync
resuelve el problema.fuente
La solicitud no se mostrará en absoluto cuando se ejecute directamente un comando, y no de forma interactiva. Un simple google muestra el primer resultado: http://marc.info/?l=rsync&m=100263876212594&w=2 Y dado que el shell puede ser invocado, no debe mostrar nada en modo no interactivo, como cuando escribe " bash "en una solicitud existente, no debería aparecer nada más que la nueva solicitud.
fuente
Esto puede deberse a un mensaje de inicio de sesión en el host remoto, como "Su contraseña caducará en 6 días" que RSYNC no espera
fuente