Błąd SSH: żądanie alokacji PTY nie powiodło się na kanale 0

11

Więc przejrzałem błąd i sprawdziłem błąd serwera, ale rozwiązania nie pasowały. Większość wyników to problemy z / dev / pts, ale to jest zamontowane. Inne wyniki to błędy w git, ale na maszynie nie ma git.

Moje konto nie jest zablokowane, nadal mogę zalogować się na konsoli. Inni użytkownicy również mają ten problem, więc nie sądzę, że ma to coś wspólnego z czymś, co znajduje się w moim .ssh /

Otrzymuję tę odpowiedź za pomocą ssh -vv:

<snip>
debug1: Next authentication method: password
rogier@server's password: 
debug2: we sent a password packet, wait for reply
debug1: Authentication succeeded (password).
debug1: channel 0: new [client-session]
debug2: channel 0: send open
debug1: Requesting [email protected]
debug1: Entering interactive session.
debug2: callback start
debug2: client_session2_setup: id 0
debug2: channel 0: request pty-req confirm 1
debug1: Sending environment.
debug1: Sending env LANG = en_US.UTF-8
debug2: channel 0: request env confirm 0
debug2: channel 0: request shell confirm 1
debug2: fd 3 setting TCP_NODELAY
debug2: callback done
debug2: channel 0: open confirm rwindow 0 rmax 32768
debug2: channel_input_status_confirm: type 100 id 0
PTY allocation request failed on channel 0
debug2: channel 0: rcvd adjust 2097152
debug2: channel_input_status_confirm: type 99 id 0
debug2: shell request accepted on channel 0

Następnie sesja zawiesza się. Czy ktoś ma pojęcie, co się dzieje?

blauwblaatje
źródło
5
Czy możesz użyć, ssh user@host "/bin/bash -i"aby się zalogować?
Tim
hmm .. tak, to działa ...
blauwblaatje
1
Widziałem przypadek, w którym /dev/pt*urządzenia musiały zostać usunięte i ręcznie dodane ponownie, ponieważ zostały uszkodzone. W takim przypadku zadziałało również obejście, które wymieniłem powyżej.
Tim
@ Tim Mam ten sam problem. Mogę również zalogować się za pomocą ssh user@host "/bin/bash -i. Czy możesz bardziej szczegółowo określić, które polecenia muszę uruchomić, aby to naprawić? Jak przywrócić /dev/pt*? Dzięki.
Erwin Rooijakkers,
4
@ user2609980 uruchom mount, jedną z wypisywanych linii powinien być / dev / pts, zanotuj opcje. Odmontuj umount /dev/ptsi zamontuj ponownie, mount -t devpts -o OPTIONS devpts /dev/ptszastępując OPCJE opcjami obserwowanymi przed odmontowaniem.
Tim

Odpowiedzi:

10

Ok, dzięki Tim. umounting / dev / pts, a następnie mount / dev / pts załatwiło sprawę.

blauwblaatje
źródło
To jest bardzo dziwne. Wiesz, dlaczego tak jest? Czy to błąd sterownika urządzenia czy coś innego? Czy to zostało naprawione? itd ...
not2qubit
Brak pomysłu. I nie widziałem tego ponownie.
blauwblaatje
1
@blauwblaatje Mam ten sam problem. Mogę również zalogować się za pomocą ssh user@host "/bin/bash -i. Czy możesz bardziej szczegółowo określić, które polecenia muszę uruchomić, aby to naprawić? Dzięki.
Erwin Rooijakkers,
O ile pamiętam, zrobiłem tylko: umount / dev / pts && mount / dev / pts
blauwblaatje
Właśnie miałem problem i musiałem, mkdir /dev/ptszanim zadziałał. W przeciwnym razie to rozwiązało problem.
Angelo Fuchs,
1

pozwól, że opowiem ci o wszystkich moich doświadczeniach, próbuję połączyć się z linuksem do systemu Windows za pośrednictwem ssh, miałem serwery z openssh i inne z freessh . Gdy serwer się otworzy, działa dobrze, ale od czasu do czasu zaczyna wyświetlać komunikat „żądanie powłoki nie powiodło się na kanale 0”, gdy freessh jest uruchomioną usługą (przychodzi z dnia na dzień, lepiej działa, openssh)

Test wykonany przeze mnie polegał na próbie ustanowienia połączenia od innego użytkownika, ponieważ widzę, że działa dobrze, tworzę kopię zapasową ~ / .ssh (użytkownika, który przedstawia problem), a następnie działa dobrze.

Wydaje mi się, że zaangażowany plik to znane_hosty, perms wygląda dobrze, podobnie jak zawartość, ale tak to naprawiłem.

Pérez P. Javier E.
źródło
1

Błąd oznacza po prostu, że otwarcie pseudo terminala nie powiodło się. Najprawdopodobniej nie ma to nic wspólnego z ssh. Aby debugować go po stronie serwera ssh, użyj bardzo prostej wersji demonstracyjnej PTY, takiej jak mypty w http://rachid.koucha.free.fr/tech_corner/pty_pdip.html, aby sprawdzić, czy w ogóle można przydzielić dowolny PTY. Jeśli nie, użyj strace, aby sprawdzić, gdzie zawodzi. (Dla mnie było to brakujące dowiązanie / dev / ptmx w kontenerze, jak wyjaśniono w https://www.kernel.org/doc/Documentation/filesystems/devpts.txt )

Uwe Geuder
źródło
0

Może zależeć od ciebie LANG i twoich ustawień LC, ale to działa dla mnie:

unset LANG        2>/dev/null
unset LC_MONETARY 2>/dev/null
unset LC_NUMERIC  2>/dev/null
unset LC_MESSAGES 2>/dev/null
unset LC_COLLATE  2>/dev/null
unset LC_CTYPE    2>/dev/null
ssh -l username hostname
Vidar Knive
źródło
2
Jak myślisz, dlaczego problem może być związany ze zmiennymi środowiskowymi LANGi LC_*?
Adrian Heine
Zastanawiam się, co zmieniłem, zanim to się zaczęło. Właściwie zmieniłem niektóre z tych zmiennych! Zobaczmy, czy to też działa dla mnie.
Erwin Rooijakkers,
0

W moim przypadku łączyłem się z hostem Windows (działającym cygwin i innym pokrewnym oprogramowaniem) z Linux-a.

Dziwne próby połączenia z serwerem Windows działały, ale nie powiodły się podczas przydzielania interaktywnego terminala. Sprawdź ssh -vvdzienniki poniżej.

...
Authentication succeeded
...
Entering interactive session
Requesting authentication agent forwarding.
Sending environment.
Sending env LANG = en_US.UTF-8
PTY allocation request failed on channel 4
...

Mój kolega zorientował się, że dzieje się tak z powodu wielu otwartych procesów na serwerze Windows, który używał tych samych danych logowania, co mój i wykonywał pewne automatyczne operacje wsadowe.

Zabicie go tymczasowo, załatwiło sprawę i pozwoliło moje połączenie ssh pomyślnie.

Najprawdopodobniej Windows + Cygwin miał maksymalny limit w tym zakresie. Pozostały prace, aby poprawnie przydzielić zasoby, gdy procesy te zostaną uruchomione.

MiKu
źródło