SO: Debian Jessie
pescado: 2.2.0
SO: Maui Linux
pescado: 2.3.1
¿Cómo reproducir?
Cuando el host remoto usa fish shell, el usuario no puede usar rsync y sftp (sftp en la línea de comandos y dentro de mc). El host remoto utiliza el script de inicio de sesión para mostrar alguna información.
Enlace al script: https://blog.pawel.mydevil.net/index.php/2014/02/20/wyswietlanie-danych-przy-logowaniu-skrypt/
Probé en dos hosts. El primer host es Debian Jessie (fish, versión 2.2.0) y el segundo es Maui Linux (fish, versión 2.3.1).
sftp
sftp root @ remoteHost
root @ remoteHost 's contraseña:
Mensaje recibido demasiado largo 539831597
parte del registro auth.log
Contraseña aceptada para root desde el puerto localHost 48460 ssh2
18 de octubre 19:18:59 bpi sshd [7502]: pam_unix (sshd: sesión): sesión abierta para el usuario root por (uid = 0)
18 de octubre 19:19:00 bpi sshd [7502]: desconexión recibida de localHost: 11: desconectado por el usuario
18 de octubre 19:19:00 bpi sshd [7502]: pam_unix (sshd: sesión): sesión cerrada para el usuario root
rsync:
~ $ sudo rsync -av --delete -e ssh / home / pawel pawel @ remoteHost : / mnt / backup
[sudo] hasło użytkownika pawel:
Contraseña de pawel @ remoteHost :
incompatibilidad de la versión del protocolo: ¿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 (176) [remitente = 3.1.1]
Leí manual e Internet y ejecuté el comando
"ssh pawel @RemoteIP / bin / true> out.dat"
el archivo "out.dat" contiene el resultado del script ejecutado al iniciar sesión.
Cuando comento el enlace al script en el archivo /etc/fish/config.fish, todo funciona correctamente.
Funciona para mi. Este tipo de falla generalmente se debe a que los archivos de configuración de shell escriben en stdout cuando la sesión no es interactiva. En el caso de fish, debe asegurarse de que cualquier cosa en su _ ~ / .config / fish / config.fish_ (y los scripts de sus fuentes) que pueda escribir en stdout (o leer desde stdin pero eso es menos común) esté envuelto en un if status --is-interactive
... end
bloque.
Muchas gracias por tu ayuda. Pongo algo como esto
si el estado es interactivo
/ ruta / a / script / que / imprimir / en / consola
fin
en /etc/fish/config.fish y funciona perfectamente. El script se ejecuta solo cuando el usuario invoca el shell, no el script.
Intenté poner "si" dentro del script. pero no sé cómo mezclar el script bash y el script fish.
¿Por qué no incluir esta sugerencia en las preguntas frecuentes? He sufrido este problema por un tiempo, no puedo usar rsync con concha de pescado.
Comentario más útil
Funciona para mi. Este tipo de falla generalmente se debe a que los archivos de configuración de shell escriben en stdout cuando la sesión no es interactiva. En el caso de fish, debe asegurarse de que cualquier cosa en su _ ~ / .config / fish / config.fish_ (y los scripts de sus fuentes) que pueda escribir en stdout (o leer desde stdin pero eso es menos común) esté envuelto en un
if status --is-interactive
...end
bloque.