it-swarm-es.com

no coinciden las versiones del protocolo: ¿está limpio su Shell?

Al seguir las instrucciones para hacer copias de seguridad de rsync aquí: http://troy.jdmz.net/rsync/index.html

Aparece el error "la versión del protocolo no coincide: ¿está limpio su Shell?"

Leí en alguna parte que necesitaba silenciar las indicaciones de Prompt (PS1 = "") y motd (.hushlogin) para lidiar con 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" [email protected]:/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 el -2 bandera a ssh o slogin

 ssh -2 -i ~/.ssh/my_private_key remotemachine"

No está claro que esto resolviera el problema, ya que creo que puse este cambio DESPUÉS de que el error haya cambiado, 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.

62
rfreytag

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:

if shopt -q login_Shell; then
    [any code that outputs text here]
fi

o alternativamente, así, ya que el parámetro especial - contiene i cuando el Shell es interactivo:

if echo "$-" | grep i > /dev/null; then
    [any code that outputs text here]
fi

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:

[email protected]'s password: 
Last login: Mon Nov  7 22:54:30 2011 from YOURIP
[[email protected] ~]$ 

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.

66
Andrew Case

Hay 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 comando false terminará inmediatamente sin producir ningún resultado, por lo que es una buena prueba:

bash$ ssh remotehost false
Enter passphrase for key '/home/user/.ssh/my_private_key': 
bash$

Si esa línea de comando produce algún resultado, uno de los scripts de inicio es el culpable:

bash$ ssh remotehost false
Enter passphrase for key '/home/user/.ssh/my_private_key': 
Welcome to RemoteHost!

This system is company property and is provided for authorized use only, 
as set forth in applicable written policies. Unauthorized use is prohibited 
and may be subject to discipline, civil suit and criminal prosecution.

Welcome back - You last logged in 16 days ago...
bash$

Otra cosa que debe verificar si está recibiendo este error es si rsync está instalado y localizable por ssh:

bash$ ssh remotehost "rsync --version"
Enter passphrase for key '/home/user/.ssh/my_private_key': 
rsync  version 3.0.9  protocol version 30
Copyright (C) 1996-2011 by Andrew Tridgell, Wayne Davison, and others.
Web site: http://rsync.samba.org/
Capabilities:
    64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints,
    socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,
    append, ACLs, xattrs, iconv, symtimes

rsync comes with ABSOLUTELY NO WARRANTY.  This is free software, and you
are welcome to redistribute it under certain conditions.  See the GNU
General Public Licence for details.
bash$

Si rsync no está en la ruta, verá algo como:

bash$ ssh remotehost "rsync --version"
Enter passphrase for key '/home/user/.ssh/my_private_key': 
bash: rsync: command not found
bash$

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:

rsync -avvvz -e "ssh -i /home/thisuser/cron/thishost-rsync-key" \
    --rsync-path="/usr/local/bin/rsync" \
    [email protected]:/remote/dir /this/dir/
21
Stobor

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:

ssh [email protected] "/bin/true" > testfile
ls -l testfile

Si testfile NO tiene 0 bytes, entonces el problema es que su Shell está generando algo. Cheque /etc/profile, .profile, .bashrc, .cshrc, etc. Si es así, puede cambiarlo para verificar si su terminal es interactivo y solo genera texto utilizando el siguiente código en un bashrc. También existe algo equivalente para otros proyectiles:

if shopt -q login_Shell; then
    [any code that outputs text here]
fi

o alternativamente, así, ya que el parámetro especial - contiene i cuando el Shell es interactivo:

if echo "$-" | grep i > /dev/null; then
    [any code that outputs text here]
fi

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 final (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 --protocol= opción. En mi caso, usando --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 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.

7
Azendale

Tengo protocol version mismatch -- is your Shell clean? simplemente porque todavía no había instalado rsync en other end. Sudo yum install rsync resuelve el problema.

4
Kjetil S.

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

ssh remotehost false

Este debería fallar y este debería ser exitoso

sftp remotehost

Esto demuestra que tiene un acceso solo sftp.

Si desea y tiene permisos para hacerlo, puede deshabilitar el acceso sftp solo para ese usuario, editando el /etc/ssh/sshd_config y verifique las entradas match y forcecommand.

También puede verificar esto post

4
higuita

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, al escribir simplemente "bash" en un indicador existente, no debe aparecer nada más que el nuevo indicador.

2
dgq8

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

1
Dief

También observo este error al extraer archivos de una instancia con rsync version 2.5.7 protocol version 26 a version 3.1.1:

protocol version mismatch - is your Shell clean?
(see the rsync man page for an explanation)
rsync error: protocol incompatibility (code 2) at compat.c(62)
rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
rsync error: error in rsync protocol data stream (code 12) at io.c(226) [Receiver=3.1.1]

Pero el Shell remoto no tenía un banner de inicio de sesión. En cambio, la solución fue especificar un protocolo anterior ( ref ):

rsync --protocol=29 ...
0
patricktokeeffe