Correction: le pseudo-terminal ne sera pas alloué car stdin n'est pas un terminal

Dans la plupart des cas, vous recevrez une erreur déroutante «pseudo-terminal ne sera pas alloué car stdin n'est pas un terminal» uniquement lorsque vous exécutez une sorte de commande SSH à partir d'un script. Si vous exécutez la même commande à partir de la ligne de commande, cela peut fonctionner parfaitement.

Avant d'aller plus loin, assurez-vous d'avoir ajouté votre clé publique à l'agent SSH, puis réessayez d'utiliser ssh. Il vous manquait peut-être une clé. D'un autre côté, si cela ne fonctionne pas, vous devrez effectuer un petit dépannage dans votre script.

Méthode 1: Forcer et désactiver l'allocation de pseudo-tty

Il existe une paire d'options de ligne de commande qui pourraient résoudre le problème rapidement pour vous. Essayez ssh -t -t -R suivi du reste de ce à quoi vous essayez de vous connecter afin de forcer l'allocation de pseudo-terminaux. Par exemple, disons que vous alliez utiliser ssh -p 80 [email protected] pour vous connecter à votre compte sur example.com, ce qui est bien sûr un mannequin pour la documentation qui n'existe pas.

Essayez d'exécuter par exemple ssh -t -t -R -p 80 [email protected] et voyez si cela résout le problème. Vous devrez bien sûr remplacer le nom par votre compte et votre nom d'hôte réels afin de vous connecter avec succès au système. Cela force l'allocation d'un terminal, vous ne devriez donc pas voir que le pseudo-terminal ne sera pas alloué car stdin n'est pas une erreur de terminal.

D'un autre côté, vous pourriez vous retrouver avec une chaîne constante de messages d'erreur. Certains utilisateurs ont remarqué que cela pouvait être considéré comme amusant.

C'est certainement frustrant malgré tout, alors utilisez Ctrl + C pour tuer le processus.

Vous pouvez essayer d'utiliser un seul commutateur -t ou d'augmenter le nombre. Si cela ne fonctionne pas, remplacez tous les commutateurs -t par un commutateur -T dans la commande, par exemple ssh -T -R -p 80 [email protected] et voyez si cela fonctionne.

Cette méthode désactive complètement tout le processus d'allocation de pseudo-terminaux, elle peut donc fonctionner dans les cas où le forcer ne fonctionne pas. Bien sûr, rien de tout cela ne devrait être un problème à partir de la ligne de commande, mais assurez-vous de noter lorsque vous trouvez quelle option fonctionne à partir de votre script afin que vous puissiez l'utiliser dans tous les scripts futurs que vous devrez exécuter pour accéder à ce serveur.

Puisque la commande ssh a donné à ces deux options opposées des noms similaires, rappelez-vous que -t force l'allocation de pseudo-terminaux tandis que -T la désactive. Ces options sont sensibles à la casse, et elles sont souvent nécessaires à l'intérieur des scripts car ssh a besoin d'un terminal TTY traditionnel pour fonctionner. Naturellement, dans votre cas, vous utiliseriez votre émulateur de terminal à cette fin.

Méthode 2: Utilisation de sshpass

Certaines personnes peuvent trouver que leurs scripts fonctionnent mieux avec la commande sshpass, qui n'est pas incluse par défaut. Vous pouvez toujours l'installer avec sudo apt-get install sshpass ou sudo yum install sshpass si vous préférez l'essayer ou parce que vous en avez besoin pour votre cas d'utilisation spécifique.

Si vous ne l'utilisez pas déjà, vous n'en avez probablement pas besoin. Néanmoins, vous pouvez utiliser les mêmes techniques pour surprendre les messages d'erreur liés à l'allocation de pseudo-terminaux dans ce type d'environnement également.

Par exemple, utilisez sshpass -p password ssh -T [email protected] pour forcer le système à fonctionner depuis l'intérieur de votre script.

Méthode 3: Correction des erreurs de gestion des travaux

À l'occasion, vous pourriez recevoir un autre message d'erreur même après avoir corrigé tout cela. Si vous recevez un avertissement indiquant qu'il n'y a pas d'accès à tty et que vous vous rappelez qu'il n'y a pas de contrôle de travail dans votre shell, vous devriez pouvoir travailler un peu normalement.

Cette erreur est causée par quelque chose d'irrégulier sur le serveur distant lié à csh, tcsh ou peut-être même à Almquist ou à un autre shell. Vous ne l'avez peut-être pas remarqué car vous receviez d'autres messages d'erreur, mais à condition que vous n'en voyiez pas d'autres à propos des pseudo-terminaux, il devrait être possible de continuer relativement comme vous le feriez habituellement.

Vous ne voudrez peut-être pas essayer d'utiliser Ctrl + Z dans ce cas pour arrêter les processus, car il se peut qu'il n'y ait aucun moyen de les redémarrer. Si vous recevez un message d'erreur indiquant qu'il y a des tâches arrêtées lorsque vous quittez, vous ne serez pas autorisé à vous déconnecter.

Utilisez les commandes ps et kill pour fermer tous les travaux que vous ne pouvez pas fermer, en supposant que cela ne vous dérange pas de perdre du travail dans le processus. Vous pourrez quitter maintenant.

Tags Linux how-to ssh