In den meisten Fällen erhalten Sie nur dann den verwirrenden Fehler "Pseudo-Terminal wird nicht zugewiesen, da stdin kein Terminal ist", wenn Sie einen SSH-Befehl über ein Skript ausführen. Wenn Sie denselben Befehl über die Befehlszeile ausführen, funktioniert er möglicherweise einwandfrei.
Bevor Sie fortfahren, stellen Sie sicher, dass Sie Ihren öffentlichen Schlüssel zum SSH-Agenten hinzugefügt haben, und versuchen Sie dann erneut, ssh zu verwenden. Möglicherweise haben Sie gerade einen Schlüssel verpasst. Wenn dies jedoch nicht funktioniert, müssen Sie in Ihrem Skript eine kleine Fehlerbehebung durchführen.
Methode 1: Erzwingen und Deaktivieren der Pseudo-Tty-Zuordnung
Es gibt zwei Befehlszeilenoptionen, mit denen das Problem möglicherweise schnell behoben werden kann. Versuchen Sie ssh -t -t -R, gefolgt von dem Rest dessen, mit dem Sie eine Verbindung herstellen wollten, um die Zuweisung von Pseudo-Terminals zu erzwingen. Angenommen, Sie würden ssh -p 80 [email protected] verwenden, um sich in Ihrem Konto auf example.com anzumelden. Dies ist natürlich ein Dummy für Dokumentation, die nicht vorhanden ist.
Versuchen Sie, z. B. ssh -t -t -R -p 80 [email protected] auszuführen, und prüfen Sie, ob das Problem dadurch behoben wird. Sie müssen den Namen natürlich durch Ihr tatsächliches Konto und Ihren Hostnamen ersetzen, um sich erfolgreich beim System anzumelden. Dies erzwingt die Zuweisung eines Terminals, sodass Sie nicht sehen sollten, dass das Pseudo-Terminal nicht zugewiesen wird, da stdin kein Terminalfehler ist.
Auf der anderen Seite wird möglicherweise eine konstante Folge von Fehlermeldungen angezeigt. Einige Benutzer haben bemerkt, dass dies als amüsant angesehen werden könnte.
Trotzdem ist es sicherlich frustrierend. Verwenden Sie also Strg + C, um den Prozess abzubrechen.
Sie können versuchen, entweder nur einen -t-Schalter zu verwenden oder die Anzahl zu erhöhen. Wenn dies nicht funktioniert, ersetzen Sie alle -t-Schalter durch einen -T-Schalter im Befehl, z. B. ssh -T -R -p 80 [email protected], und prüfen Sie, ob dies funktioniert.
Diese Methode deaktiviert den gesamten Pseudo-Terminal-Zuweisungsprozess vollständig, sodass sie möglicherweise in Fällen funktioniert, in denen dies nicht erzwungen wird. Natürlich sollte nichts davon über die Befehlszeile ein Problem sein. Notieren Sie sich jedoch, wenn Sie herausfinden, welche Option in Ihrem Skript funktioniert, damit Sie sie in zukünftigen Skripten verwenden können, die Sie ausführen müssen, um auf diesen Server zuzugreifen.
Da der Befehl ssh diesen beiden entgegengesetzten Optionen ähnliche Namen gegeben hat, denken Sie daran, dass -t die Zuweisung von Pseudo-Terminals erzwingt, während -T sie deaktiviert. Diese Optionen unterscheiden zwischen Groß- und Kleinschreibung und sind häufig innerhalb von Skripten erforderlich, da ssh ein traditionelles TTY-Terminal benötigt, um zu funktionieren. In Ihrem Fall würden Sie natürlich Ihren Terminalemulator für diesen Zweck verwenden.
Methode 2: Verwenden von sshpass
Einige Benutzer stellen möglicherweise fest, dass ihre Skripte mit dem Befehl sshpass besser funktionieren, der standardmäßig nicht enthalten ist. Sie können es jederzeit mit sudo apt-get install sshpass oder sudo yum install sshpass installieren, wenn Sie es lieber ausprobieren möchten oder weil Sie es für Ihren speziellen Anwendungsfall benötigen.
Wenn Sie es noch nicht verwenden, brauchen Sie es wahrscheinlich nicht. Trotzdem können Sie dieselben Techniken verwenden, um Fehlermeldungen im Zusammenhang mit der Zuweisung von Pseudo-Terminals auch in einer solchen Umgebung zu überraschen.
Verwenden Sie beispielsweise das Kennwort sshpass -p ssh -T [email protected], um das System zu zwingen, innerhalb Ihres Skripts zu arbeiten.
Methode 3: Beheben von Jobverwaltungsfehlern
Gelegentlich wird möglicherweise eine weitere Fehlermeldung angezeigt, selbst nachdem dies alles behoben wurde. Wenn Sie eine Warnung erhalten, die keinen Zugriff auf tty lautet, und Sie daran erinnert werden, dass Ihre Shell keine Jobsteuerung enthält, sollten Sie in der Lage sein, normal zu arbeiten.
Dieser Fehler wird durch Unregelmäßigkeiten auf dem Remote-Server verursacht, die entweder mit csh, tcsh oder möglicherweise sogar mit Almquist oder einer anderen Shell zusammenhängen. Sie haben es vielleicht nicht bemerkt, weil Sie andere Fehlermeldungen erhalten haben, aber vorausgesetzt, Sie sehen keine anderen über Pseudo-Terminals, sollte es möglich sein, relativ wie gewohnt fortzufahren.
In diesem Fall möchten Sie möglicherweise nicht versuchen, Strg + Z zu verwenden, um Prozesse zu stoppen, da es möglicherweise keine Möglichkeit gibt, sie erneut zu starten. Wenn beim Beenden eine Fehlermeldung angezeigt wird, dass Jobs gestoppt wurden, können Sie sich nicht abmelden.
Verwenden Sie die Befehle ps und kill, um Jobs zu schließen, die Sie nicht schließen können, vorausgesetzt, es macht Ihnen nichts aus, dabei die Arbeit zu verlieren. Sie können jetzt beenden.
Tags Linux How-to-SSH