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

Découvrez comment résoudre l'erreur "le pseudo-terminal ne sera pas alloué" lors des connexions SSH depuis des scripts, en utilisant les bonnes options et outils.

Dans la plupart des cas, vous recevrez un message d'erreur déroutant "le pseudo-terminal ne sera pas alloué car stdin n'est pas un terminal" seulement 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 pourrait fonctionner parfaitement bien.

Avant d'aller plus loin, assurez-vous d'avoir ajouté votre clé publique à l'agent SSH, puis essayez d'utiliser ssh à nouveau. Il se peut que vous ayez simplement manqué une clé. D'autre part, si cela ne fonctionne pas, vous devrez effectuer un peu de dépannage dans votre script.

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

Il existe une paire d'options en ligne de commande qui pourraient résoudre le problème rapidement pour vous. Essayez ssh -t -t -R suivi du reste de ce que vous essayiez de connecter pour forcer l'allocation de pseudo-terminal. Par exemple, disons que vous alliez utiliser ssh -p 80 appuals@ssh.example.com pour vous connecter à votre compte sur example.com, qui, bien sûr, est un exemple fictif pour la documentation.

Essayez d'exécuter, par exemple, ssh -t -t -R -p 80 appuals@ssh.example.com et voyez si cela résout le problème. Vous devrez bien sûr remplacer le nom par votre compte réel et le nom d'hôte pour vous connecter avec succès au système. Cela force l'allocation d'un terminal, donc vous ne devriez pas voir l'erreur "le pseudo-terminal ne sera pas alloué car stdin n'est pas un terminal".

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

Cependant, c'est certainement frustrant, donc utilisez Ctrl+C pour tuer le processus.

Vous pouvez essayer d'utiliser soit un seul commutateur -t soit d'augmenter le nombre. Si cela ne fonctionne pas, remplacez les commutateurs -t par un commutateur -T dans la commande, par exemple ssh -T -R -p 80 appuals@ssh.example.com et voyez si cela fonctionne.

Cette méthode désactive complètement le processus d'allocation de pseudo-terminal, donc elle pourrait fonctionner dans les cas où forcer ne fonctionne pas. Bien sûr, rien de tout cela ne devrait poser de problème depuis la ligne de commande, mais assurez-vous de noter quelle option fonctionne depuis votre script afin de pouvoir l'utiliser dans d'autres scripts futurs que vous aurez à exécuter pour accéder à ce serveur.

Comme 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 désactive cette allocation. Ces options sont sensibles à la casse, et elles sont souvent nécessaires depuis l'intérieur de 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 : Utiliser sshpass

Certaines personnes pourraient 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à, alors vous n'en avez probablement pas besoin. Néanmoins, vous pouvez utiliser les mêmes techniques pour résoudre les messages d'erreur liés à l'allocation de pseudo-terminal dans ce type d'environnement également.

Par exemple, utilisez sshpass -p password ssh -T appuals@ssh.example.com pour forcer le système à travailler depuis votre script.

Méthode 3 : Corriger les erreurs de gestion des tâches

Il se peut qu'occasionnellement vous obteniez un autre message d'erreur même après avoir tout corrigé. Si vous recevez un avertissement indiquant qu'il n'y a pas d'accès à tty et qu'on vous rappelle qu'il n'y a pas de contrôle des tâches dans votre shell, vous devriez être capable de travailler quelque peu normalement.

Cette erreur est causée par quelque chose d'irrégulier sur le serveur distant lié à csh, tcsh ou éventuellement même à l'Almquist ou à un autre shell. Vous ne l'avez peut-être pas remarqué car vous receviez d'autres messages d'erreur, mais tant que vous ne voyez pas d'autres erreurs concernant les pseudo-terminaux, il devrait être possible de continuer comme d'habitude.

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 pas moyen de les redémarrer. Si vous obtenez 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 les tâches que vous ne pouvez pas arrêter, à condition que ça ne vous dérange pas de perdre du travail dans le processus. Vous pourrez maintenant quitter.

Questions et réponses importantes à connaître

Comment réparer le pseudo terminal qui ne sera pas alloué car stdin n'est pas un terminal ?

Pour résoudre l'erreur 'pseudo terminal non alloué car stdin n'est pas un terminal', vous pouvez suivre ces étapes simples :

 

  • Utilisez l'option -t avec SSH :
      • - Lancez votre commande SSH en ajoutant

    -t

      . Par exemple : bash ssh -t user@host
  • Comprendre l'effet de l'option -t :
  • Cette option force SSH à allouer un pseudo-TTY, même si l'entrée standard n'est pas un terminal.
  • Exécuter des commandes avec des scripts :
  • Si vous exécutez des scripts qui nécessitent un terminal, assurez-vous de les appeler avec -t également.
  • Vérifier la connexion :
  • Assurez-vous que votre connexion SSH est correctement établie, car une connexion instable peut également causer des problèmes d'allocation de TTY. En appliquant ces recommandations, vous devriez pouvoir éliminer rapidement l'erreur de pseudo terminal.

 

Qu'est-ce que l'allocation de pseudo-terminaux ?

L'allocation de pseudo-terminaux (pty) est un mécanisme essentiel dans les systèmes d'exploitation permettant à des programmes de simuler une interaction avec un terminal réel. Voici les points clés à retenir :

    • -

Interaction utilisateur

    : Les programmes peuvent communiquer avec les utilisateurs comme s'ils s'exécutaient sur un terminal physique.

  • Connexion à distance : Lorsqu'un utilisateur se connecte à une machine distante via SSH, un pty est alloué sur cette machine, facilitant l'interaction avec le terminal local.
  • Émulation de terminal : Le pty permet d'émuler les fonctionnalités d'un terminal, permettant des entrées et sorties de données standardisées.
  • Applications : Ce mécanisme est utilisé dans divers contextes, y compris les shells interactifs, les sessions de débogage, et plus encore. En résumé, l'allocation de pseudo-terminaux est cruciale pour maintenir une interface utilisateur réactive et fonctionnelle, même en environnement distant.

Maintenant que tu as fini de lire Correction : Le pseudo-terminal ne sera pas alloué car stdin n'est pas un terminal, nous t'invitons à explorer davantage la catégorie Linux. Tu y trouveras d'autres articles intéressants qui élargiront tes connaissances et te tiendront informé. Ne cesse pas de lire et de découvrir plus!

Index
  1. Méthode 1 : Forcer et désactiver l'allocation pseudo-tty
  2. Méthode 2 : Utiliser sshpass
  3. Méthode 3 : Corriger les erreurs de gestion des tâches
  • Questions et réponses importantes à connaître
    1. Comment réparer le pseudo terminal qui ne sera pas alloué car stdin n'est pas un terminal ?
    2. Qu'est-ce que l'allocation de pseudo-terminaux ?
  • Laisser un commentaire

    Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

    Go up