Fish-shell: Rsync y sftp no funcionan cuando el host remoto usa una concha de pescado

Creado en 18 oct. 2016  ·  3Comentarios  ·  Fuente: fish-shell/fish-shell

SO: Debian Jessie
pescado: 2.2.0

SO: Maui Linux
pescado: 2.3.1

¿Cómo reproducir?

  1. establecer en el host remoto cualquier script para que se ejecute al iniciar sesión (el script debe imprimir cualquier mensaje en la línea de comando)
  2. Intente iniciar sesión en el host remoto a través de sftp -> Fail
  3. Intente sincronizar cualquier directorio a través de rsync. Rsync debe usar ssh para sincronizar dir en un host remoto. -> Fallar

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.

question

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.

Todos 3 comentarios

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.

¿Fue útil esta página
0 / 5 - 0 calificaciones