Wie man den Fehler "Pseudo-Terminal wird nicht zugewiesen" löst

Wie man den Fehler "Pseudo-Terminal wird nicht zugewiesen" löst

30.05.2024
Autor: HostZealot Team
2 min.
56

Bei der Verwendung des Secure Shell (SSH)-Protokolls für den Zugriff auf einen entfernten Computer kann der Fehler "Pseudo-Terminal wird nicht zugewiesen, da stdin kein Terminal ist" auftreten.

Ein Pseudo-Terminal ist ein Ersatz für ein physisches Terminal, das alle Funktionen des Terminals beibehält. Wenn wir versuchen, uns über SSH mit dem Gerät zu verbinden, wird als erstes versucht, es mit einem Terminal zu verbinden. Was aber, wenn wir eine Verbindung zu einem entfernten Gerät ohne Terminal herstellen wollen?

Wir wollen zum Beispiel die Standardeingabe (stpin) eines Befehls auf einen anderen Befehl umleiten. Ein solches Szenario kann mit Problemen wie "Pseudoterminal wird nicht zugewiesen..." verbunden sein.

In diesem Artikel werden wir uns ansehen, warum der Fehler auftritt und wie man ihn beheben kann.

Ursachen für den Fehler

Nach unserer Erfahrung gibt es einige mögliche Ursachen für den "Pseudo-Terminal wird nicht zugewiesen, weil stdin kein Terminal ist" Fehler. Hier werden wir einige davon auflisten.

  • Ausführen eines interaktiven Befehls auf einem entfernten Gerät ohne Terminal, zum Beispiel:
$ ssh user@host 'vim file.txt'Copy
  • Der Versuch, einen Befehl, der sudo-Rechte erfordert, ohne ein Terminal auf einem entfernten Gerät auszuführen, wie z.B. dieser:
$ ssh user@host 'sudo apt update'Copy
  • Versuch, einen stdin-Umleitungsbefehl aus einer Datei oder einem anderen Befehl auf dem entfernten Rechner auszuführen:
$ ssh user@host 'cat file.txt' < input.txtCopy
  • Ausführen eines SSH-Befehls aus einem Skript.

Lösungen für den Fehler

Auch wenn es viele mögliche Ursachen für den Fehler gibt, gibt es auch eine Reihe von Möglichkeiten, ihn zu beheben. Wir werden drei davon untersuchen: Pseudo-TTY-Zuweisung erzwingen, Pseudo-TTY-Zuweisung deaktivieren und Shell-Spezifikation.

Pseudo-TTY-Zuweisungserzwingung

Um den Fehler durch Pseudo-TTY-Zuweisungserzwingung zu beseitigen, müssen wir eine -t -Option für ssh verwenden. Sie zwingt ssh, ein pty zuzuweisen, auch wenn stdin kein Terminal ist.

Diese Methode ist besonders nützlich, wenn Sie Befehle mit sudo-Rechten auf dem entfernten Rechner ausführen wollen. Der folgende Befehl erlaubt es Ihnen, aus der Ferne auf einen Server zuzugreifen und eine Datei interaktiv mit dem Texteditor Vim zu bearbeiten:

$ ssh -t user@host 'vim file.txt'Copy

Dann können Sie die Paketliste (unter Ubuntu OS) mit dem Befehl sudo und den damit verbundenen Admin-Rechten auf dem Remote-Server aktualisieren:

$ ssh -t user@host 'sudo apt update'Copy

In diesen beiden Beispielen erzwingt die Option -t, dass ein Terminal zugewiesen wird. Die Option -t ist jedoch keine allgemeingültige Lösung; in einigen Fällen müssen wir doppeltes -t oder -tt verwenden. Die Option -tt rationalisiert die tty-Zuweisung ohne ein lokales tty. Ein solcher Befehl ist nützlich, um eine stdin-Umleitung auf dem entfernten Rechner auszuführen:

$ ssh -tt user@host 'cat file.txt' < input.txtCopy

Die Option -t erzwingt eine Pseudo-TTY-Zuweisung und behebt dadurch einen Fehler.

Deaktivierung der Pseudo-TTY-Zuweisung

Wir können auch die Option -T von SSH verwenden, um die Pseudo-TTY-Zuweisung insgesamt zu deaktivieren. Die Option -T zwingt ssh dazu, keine Zuweisung des entfernten Rechners vorzunehmen. Für Befehle, die kein Terminal benötigen, ist diese Option also nützlich:

$ ssh -T user@host 'ls -l'Copy

Hier beendet der Befehl Is -I die Zuordnung sofort.

Shell Specification

Um den "Pseudoterminal wird nicht zugewiesen, weil stdin kein Terminal ist"-Fehler zu beseitigen, können wir auch die Shell auf dem entfernten Rechner angeben. Die SSH-Standardeinstellung sieht vor, dass die Anmeldeshell des entfernten Benutzers für die Ausführung von Befehlen verwendet wird. Einige Shells sind jedoch nicht mit der stdin-Umleitung kompatibel, was zu Fehlern wie dem unseren führen kann.

Um das zu vermeiden, können wir die Shell angeben:

$ ssh user@host '/bin/bash -c "cat file.txt < input.txt"'Copy

Dieser Befehl zielt auf die Bash-Shell, um den Inhalt von file.txt und input.txt zu verknüpfen.

Zusammengefasst

In diesem Leitfaden haben wir uns auf drei Methoden konzentriert, um den "Pseudo-Terminal wird nicht zugewiesen, weil stdin kein Terminal ist" Fehler zu beheben: Pseudo-TTY-Zuweisung, Deaktivierung der Pseudo-TTY-Zuweisung und Shell-Spezifikation.

Mit diesen Methoden können Sie Befehle ausführen, ohne weitere Probleme mit der Terminalzuweisung zu haben.

Verwandte Artikel