Nous avons corrigé cela en ajoutant -n (pour rediriger std depuis /dev/null) et -t (forcer l'allocation pseudo-tty)
Exemple :
ssh -t -n [email protected] command
Le problème était en effet mon script de connexion, bien que cela n'ait rien à voir avec la nécessité d'un terminal (je m'en doutais et j'ai testé avec le -t
et -T
choix). Le problème était que mon .bashrc
exécutait un exec
(dans ce cas à zsh
- parce que notre système n'autorise pas chsh
à zsh
).
La ligne incriminée :
test -f /usr/bin/zsh && exec /usr/bin/zsh
Résolu en vérifiant d'abord le shell interactif et en quittant si c'est le cas :
[ -z "$PS1" ] && return
test -f /usr/bin/zsh && exec /usr/bin/zsh
Donc, essentiellement, parce que le shell s'exécutait en zsh
, ssh
attendait que cela se termine - ce qui ne s'est jamais produit.
Je suis un peu confus pourquoi mon .bashrc
était appelé du tout - je pensais que ce n'était que pour les shells interactifs, mais le but exact et l'ordre des différents scripts d'initialisation est quelque chose que je ne pense pas que j'apprendrai un jour.
J'espère que cela pourra être utile à d'autres qui ont une sorte de exec
dans leurs scripts de démarrage.
BTW - les deux autres réponses étaient sur la bonne voie, donc je ne savais absolument pas si je devais "répondre" ou simplement commenter leurs réponses. Si répondre à ma propre question est moralement répréhensible sur stackoverflow, faites le moi savoir et je ferai pénitence. Merci aux autres répondeurs.