Fix: Pseudo-Terminal wird nicht zugewiesen, da stdin kein Terminal ist
In den meisten Fällen erhalten Sie ein verwirrendes Pseudo-Terminal, das nicht zugewiesen wird, da es sich bei stdin nicht um einen Terminalfehler handelt, wenn Sie einen SSH-Befehl aus einem Skript ausführen. Wenn Sie denselben Befehl über die Befehlszeile ausführen, funktioniert das möglicherweise einwandfrei.
Bevor Sie weitermachen, stellen Sie sicher, dass Sie Ihren öffentlichen Schlüssel dem SSH-Agenten hinzugefügt haben und versuchen Sie es dann erneut mit ssh. Vielleicht haben Sie gerade einen Schlüssel vermisst. Auf der anderen Seite, wenn dies nicht funktioniert, müssen Sie ein wenig Fehlersuche in Ihrem Skript durchführen.
Methode 1: Erzwingen und Deaktivieren der Pseudo-Tty-Zuordnung
Es gibt einige Befehlszeilenoptionen, die das Problem schnell beheben können. Versuchen Sie ssh -t -t-R gefolgt von dem Rest der Verbindung, mit der Sie eine Verbindung herstellen wollten, um eine Pseudo-Terminal-Zuweisung zu erzwingen. Nehmen wir zum Beispiel an, Sie würden ssh -p 80 [email protected] verwenden, um sich in Ihrem Konto bei example.com anzumelden, was natürlich ein Dummy für nicht existierende Dokumentation ist.
Versuchen Sie, z. B. ssh -t -t-R -p 80 [email protected] auszuführen, und prüfen Sie, ob dadurch das Problem behoben wird. Sie müssen den Namen natürlich durch Ihren tatsächlichen Account und Hostnamen ersetzen, um sich erfolgreich im System anmelden zu können. Dies erzwingt die Zuweisung eines Terminals, so dass Sie nicht sehen sollten, dass das Pseudo-Terminal nicht zugewiesen wird, da stdin kein Terminal-Fehler ist.
Auf der anderen Seite können Sie am Ende mit einer konstanten Reihe von Fehlermeldungen enden. Einige Benutzer haben bemerkt, dass dies als amüsant angesehen werden könnte.
Es ist sicherlich frustrierend, aber verwenden Sie Strg + C, um den Prozess zu beenden.
Sie können versuchen, entweder nur einen -t-Schalter zu verwenden oder die Nummer 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 das funktioniert.
Diese Methode deaktiviert den gesamten Pseudo-Terminal-Zuweisungsprozess vollständig, sodass es in Fällen funktionieren kann, in denen dies nicht erzwungen wird. Natürlich sollte nichts davon ein Problem von der Befehlszeile sein, aber stellen Sie sicher, dass Sie eine Notiz machen, wenn Sie herausfinden, welche Option von Ihrem Skript funktioniert, damit Sie sie in zukünftigen Skripten verwenden können, um auf diesen Server zuzugreifen.
PRO TIPP: Wenn das Problem bei Ihrem Computer oder Laptop / Notebook auftritt, sollten Sie versuchen, die Reimage Plus Software zu verwenden, die die Repositories durchsuchen und beschädigte und fehlende Dateien ersetzen kann. Dies funktioniert in den meisten Fällen, in denen das Problem aufgrund einer Systembeschädigung auftritt. Sie können Reimage Plus herunterladen, indem Sie hier klickenDa der Befehl ssh diesen beiden entgegengesetzten Optionen ähnliche Namen gab, denken Sie daran, dass -t die Zuweisung von Pseudo-Terminals erzwingt, während -T ihn deaktiviert. Bei diesen Optionen ist die Groß- und Kleinschreibung zu beachten, und sie sind oft in 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
Manche Leute finden möglicherweise, dass ihre Skripte besser mit dem Befehl sshpass funktionieren, der standardmäßig nicht enthalten ist. Sie können es immer mit sudo apt-get install sshpass oder sudo yum install sshpass installieren, wenn Sie es ausprobieren möchten oder weil Sie es für Ihren speziellen Anwendungsfall benötigen.
Wenn Sie es nicht bereits verwenden, brauchen Sie es wahrscheinlich nicht. Nichtsdestotrotz können Sie die gleichen Techniken verwenden, um Fehlermeldungen in Bezug auf die Pseudo-Terminal-Zuweisung in dieser Art von Umgebung zu überraschen.
Verwenden Sie zum Beispiel sshpass -p password ssh -T [email protected], um zu erzwingen, dass das System innerhalb des Skripts funktioniert.
Methode 3: Behebung von Job-Management-Fehlern
Gelegentlich erhalten Sie möglicherweise eine weitere Fehlermeldung, auch nachdem Sie alles behoben haben. Wenn Sie eine Warnung erhalten, die keinen Zugriff auf tty anzeigt und Sie daran erinnert werden, dass es in Ihrer Shell keine Jobkontrolle gibt, sollten Sie etwas normal arbeiten können.
Dieser Fehler wird dadurch verursacht, dass auf dem Remote-Server etwas irregulär ist, das mit csh, tcsh oder möglicherweise sogar dem Almquist oder einer anderen Shell in Zusammenhang steht. Sie haben es vielleicht nicht bemerkt, weil Sie andere Fehlermeldungen erhalten haben, aber vorausgesetzt, dass Sie keine anderen über Pseudo-Terminals sehen, sollte es möglich sein, relativ so weiter zu machen, wie Sie es normalerweise tun würden.
Sie können in diesem Fall jedoch nicht versuchen, Strg + Z zu verwenden, um Prozesse zu stoppen, da es möglicherweise keine Möglichkeit gibt, sie erneut starten zu lassen. Wenn Sie eine Fehlermeldung erhalten, die besagt, dass beim Beenden Jobs gestoppt wurden, können Sie sich nicht abmelden.
Verwenden Sie die Befehle ps und kill, um alle Jobs zu schließen, die Sie nicht schließen können, vorausgesetzt, dass es Ihnen nichts ausmacht, dabei Arbeit zu verlieren. Sie können jetzt beenden.
PRO TIPP: Wenn das Problem bei Ihrem Computer oder Laptop / Notebook auftritt, sollten Sie versuchen, die Reimage Plus Software zu verwenden, die die Repositories durchsuchen und beschädigte und fehlende Dateien ersetzen kann. Dies funktioniert in den meisten Fällen, in denen das Problem aufgrund einer Systembeschädigung auftritt. Sie können Reimage Plus herunterladen, indem Sie hier klicken