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



Wypróbuj Nasz Instrument Do Eliminowania Problemów

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 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 załóżmy, że zamierzasz użyć ssh -p 80 appuals@ssh.example.com, aby zalogować się na swoje konto w witrynie example.com, co oczywiście jest atrapą dla dokumentacji, która nie istnieje.



Spróbuj biegać np. ssh -t -t -R -p 80 appuals@ssh.example.com i zobacz, czy to rozwiąże problem. Aby pomyślnie zalogować się do systemu, musisz oczywiście zastąpić nazwę rzeczywistą nazwą konta i hosta. Wymusza to przydział 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ągłym ciągiem komunikatów o błędach. Niektórzy użytkownicy zauważyli, że można to uznać za zabawne.

Mimo wszystko jest to frustrujące, więc użyj Ctrl + C, aby zakończyć proces.



pseudoterminal

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 appuals@ssh.example.com i zobacz, 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 tego 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. Te opcje uwzględniają wielkość liter i często są potrzebne wewnątrz skryptów, ponieważ ssh wymaga do działania tradycyjnego terminala TTY. Oczywiście w twoim przypadku użyjesz 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łączane 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 swojego 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 appuals@ssh.example.com, 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 Twojej powłoce nie ma kontroli zadań, powinieneś być w stanie normalnie pracować.

Ten błąd jest spowodowany przez coś, co jest nieregularne 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 zakładając, że nie widzisz żadnych innych informacji na temat pseudoterminalów, powinno być możliwe kontynuowanie działania w taki sam 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ć sposobu, aby ponownie uruchomić je ponownie. Jeśli podczas zamykania otrzymujesz komunikat o błędzie informujący, że są zatrzymane zadania, nie będziesz mógł się wylogować.

zatrzymane prace

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 Instrukcje dotyczące systemu Linux ssh 3 minuty czytania