GNU/Linux >> Tutoriales Linux >  >> Linux

La ejecución del comando SSH se bloquea, aunque el shell interactivo funciona bien

Arreglamos esto agregando -n (para redirigir std desde /dev/null) y -t (forzar la asignación de pseudo-tty)

Ejemplo:

ssh -t -n [email protected] command

De hecho, el problema era mi secuencia de comandos de inicio de sesión, aunque no tenía que ver con requerir una terminal (lo sospechaba y probé con el -t y -T opciones). El problema fue que mi .bashrc estaba ejecutando un exec (en este caso a zsh - porque nuestro sistema no permite chsh a zsh ).

La línea ofensiva:

test -f /usr/bin/zsh && exec /usr/bin/zsh

Resuelto comprobando primero el shell interactivo y saliendo si es así:

[ -z "$PS1" ] && return
test -f /usr/bin/zsh && exec /usr/bin/zsh

Entonces, esencialmente, porque el shell se estaba ejecutando en zsh , ssh estaba esperando que esto terminara, lo que nunca sucedió.

Estoy un poco confundido por qué mi .bashrc estaba siendo llamado en absoluto - Pensé que esto era solo para shells interactivos, pero el propósito exacto y el orden de los diversos scripts de inicio es algo que no creo que nunca aprenda.

Espero que esto pueda ser útil para otras personas que tengan algún tipo de exec en sus scripts de inicio.

Por cierto, las otras dos respuestas estaban en el camino correcto, por lo que no estaba completamente seguro de si debería 'responder' o simplemente comentar sus respuestas. Si responder a mi propia pregunta es moralmente incorrecto en stackoverflow, házmelo saber y haré penitencia. Gracias a los demás que respondieron.


Linux
  1. ¿Cómo se analizan los argumentos de la línea de comandos remotos de Ssh?

  2. ¿La secuencia de comandos de Shell se bloquea en el comando de correo?

  3. ¿Procesos en una sesión en un shell interactivo versus en un script?

  4. Cómo usar las funciones de shell de la línea de comandos en Linux

  5. Pasar variables en el comando ssh remoto

Comando SSH

Comando fuente en Linux

Construcción de comandos

Explicación del comando fuente en Linux

¿Cómo ejecutar un comando en un script de Shell?

dividido:comando no encontrado