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.