Poprawka: pseudoterminal nie zostanie przydzielony, ponieważ stdin nie jest terminalem

W większości przypadków pojawi się mylący błąd „pseudoterminal nie zostanie przydzielony, ponieważ stdin nie jest terminalem” tylko wtedy, gdy uruchamiasz jakieś polecenie SSH ze skryptu. Jeśli uruchamiasz to samo polecenie z wiersza poleceń, może działać idealnie.

Zanim przejdziesz dalej, upewnij się, że dodałeś swój klucz publiczny do agenta SSH, a następnie spróbuj ponownie użyć ssh. Mogłeś właśnie zgubić klucz. Z drugiej strony, jeśli to nie zadziała, musisz trochę rozwiązać problem w swoim skrypcie.

Metoda 1: wymuszanie i wyłączanie alokacji pseudo-tty

Istnieje kilka opcji wiersza poleceń, które mogą szybko rozwiązać problem. Spróbuj ssh -t -t -R, a następnie resztę tego, z czym próbujesz się połączyć, aby wymusić alokację pseudo-terminala. Na przykład, powiedzmy, że zamierzasz użyć ssh -p 80 [email protected], aby zalogować się na swoje konto na example.com, co oczywiście jest atrapą dla dokumentacji, która nie istnieje.

Spróbuj uruchomić np. Ssh -t -t -R -p 80 [email protected] i zobacz, czy to rozwiąże problem. Aby pomyślnie zalogować się do systemu, musisz oczywiście zastąpić nazwę swoim rzeczywistym kontem i nazwą hosta. Wymusza to przydzielenie terminala, więc nie powinieneś widzieć, że pseudoterminal nie zostanie przydzielony, ponieważ stdin nie jest błędem terminala.

Z drugiej strony możesz po prostu skończyć z ciągiem komunikatów o błędach. Niektórzy użytkownicy zauważyli, że można to uznać za zabawne.

Z pewnością jest to frustrujące, ale niezależnie od tego, użyj Ctrl + C, aby zabić proces.

Możesz spróbować użyć tylko jednego przełącznika -t lub zwiększyć liczbę. Jeśli to nie zadziała, zastąp dowolne przełączniki -t przełącznikiem -T w poleceniu, np. Ssh -T -R -p 80 [email protected] i sprawdź, czy to działa.

Ta metoda całkowicie wyłącza cały proces alokacji pseudo-terminala, więc może działać w przypadkach, gdy wymuszenie tego nie działa. Oczywiście nic z tego nie powinno stanowić problemu z wiersza poleceń, ale pamiętaj, aby zanotować, gdy znajdziesz opcję, która działa w Twoim skrypcie, abyś mógł jej użyć w przyszłych skryptach, które będziesz musiał uruchomić, aby uzyskać dostęp do wspomnianego serwera.

Ponieważ polecenie ssh nadało tym dwóm przeciwstawnym opcjom podobne nazwy, pamiętaj, że -t wymusza alokację pseudoterminali, podczas gdy -T je wyłącza. Opcje te uwzględniają wielkość liter i często są potrzebne wewnątrz skryptów, ponieważ ssh potrzebuje do działania tradycyjnego terminala TTY. Oczywiście w twoim przypadku używałbyś do tego emulatora terminala.

Metoda 2: użycie sshpass

Niektórzy ludzie mogą stwierdzić, że ich skrypty działają lepiej z poleceniem sshpass, które nie jest dołączone domyślnie. Zawsze możesz zainstalować go za pomocą sudo apt-get install sshpass lub sudo yum install sshpass, jeśli wolisz spróbować lub potrzebujesz go do konkretnego przypadku użycia.

Jeśli jeszcze jej nie używasz, prawdopodobnie jej nie potrzebujesz. Niemniej jednak możesz użyć tych samych technik, aby zaskoczyć komunikaty o błędach związane z alokacją pseudoterminalów również w tego rodzaju środowisku.

Na przykład użyj sshpass -p hasło ssh -T [email protected], aby zmusić system do pracy z wnętrza skryptu.

Metoda 3: Naprawianie błędów zarządzania zadaniami

Czasami możesz otrzymać jeszcze jeden komunikat o błędzie, nawet po naprawieniu tego wszystkiego. Jeśli otrzymujesz ostrzeżenie z informacją o braku dostępu do tty, a następnie przypomni Ci się, że w powłoce nie ma kontroli zadań, powinieneś być w stanie normalnie pracować.

Ten błąd jest spowodowany przez coś nieregularnego na zdalnym serwerze, co jest związane z csh, tcsh lub nawet z Almquistem lub inną powłoką. Być może nie zauważyłeś tego, ponieważ otrzymywałeś inne komunikaty o błędach, ale pod warunkiem, że nie widzisz żadnych innych informacji o pseudoterminalach, powinno być możliwe kontynuowanie działania w taki sposób, jak zwykle.

Możesz jednak nie chcieć używać Ctrl + Z w tym przypadku do zatrzymywania procesów, ponieważ może nie być możliwości ich ponownego uruchomienia. Jeśli podczas zamykania otrzymujesz komunikat o błędzie informujący o zatrzymanych zadaniach, nie będziesz mógł się wylogować.

Użyj poleceń ps i kill, aby zamknąć wszystkie zadania, których nie możesz zamknąć, zakładając, że nie masz nic przeciwko utracie pracy w tym procesie. Będziesz mógł teraz wyjść.

Tagi Linux instrukcje ssh