Podsystem Linux Windows 10 Klient SSH Zasób tymczasowo niedostępny

27

Próbuję ssh na mój zdalny serwer w systemie Linux 10. Używam MS Windows 10 Home Insider Preview kompilacja 14366.

W wierszu polecenia piszę:

ssh uż[email protected]

Kilka sekund po wpisaniu komendy ssh pojawia się następujący komunikat:

ssh: połącz z hostem domain.com port 22: zasób tymczasowo niedostępny

Z powodzeniem mogę się połączyć za pomocą Putty, a także ssh w Git Bash.

To prowadzi mnie więc do wniosku, że problem dotyczy mojego lokalnego komputera, a konkretniej podsystemu Linux. Nadal jestem bardzo zielony w środowisku Linuksa i nie jestem pewien, jak interpretować ten komunikat. Jaki zasób jest niedostępny i co powinienem zrobić, aby go udostępnić?

Kel
źródło
Pierwsze przypuszczenie: Zapora systemu Windows? ps> i witamy na superużytkowniku :) Google wydaje się trochę związane z fork. Proszę edytować post i dodać wiersz poleceń, które daje ten błąd.
Hastur
powiązane
Ramhound,
sprawdzam tylko, czy korzystasz z kompilacji Windows 10 dla Insider Preview, ponieważ podsystem Linux jest dostępny tylko w tej wersji, a nie w „normalnym” systemie Windows 10. W przeciwnym razie może używasz Cygwin?
gogoud
@ggoud - Zaktualizowałem pytanie, aby uwzględnić system operacyjny. Rzeczywiście jest to wersja zapoznawcza Insider.
Kel
2
Mam również ten problem. Wpływa na wszystkie programy obsługiwane przez ssh, takie jak gitandapt-get
scicalculator,

Odpowiedzi:

11

O ile wiem, to błąd w WSL. Mamy nadzieję, że Microsoft naprawi to w następnej wersji. Ale na razie możemy użyć tego nieco brzydkiego hacka.

Aktualizacja nr 1 : Zdecydowanie błąd. Znalazłem ten problem na Github. Proponowane przeze mnie obejście ponownego uruchomienia powłoki działa również dla mnie, jeśli nie chcesz przejść przez to wszystko.

TL; DR Dodaj to, aby ZAKOŃCZYĆ konfigurację SSH (zwykle znajduje się w ~/.ssh/config):

Host *
    ProxyCommand nc %h %p %r

Oto dlaczego to działa: Nasza SSH problem nie jest problemem, ponieważ zapora nci telnetpraca do tego samego hosta i portu (spróbuj telnet <host> <port>albo nc <host> <port>: powinieneś zobaczyć coś podobnego SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.7). Możemy to wykorzystać na naszą korzyść.

SSH pozwala na korzystanie z serwerów proxy, które pobierają standardowe dane wejściowe i wysyłają je do portu serwera za pomocą ProxyCommandopcji. Zwykle jest to używane do tunelowania do sieci do chronionego hosta za pomocą pośredniego serwera bastionowego SSH, czasami nazywanego hostem skoku (zobacz ten link, aby uzyskać więcej informacji).

Ten Hack mówi SSH do korzystania z serwera proxy bez gospodarza Jump (ów). Tak, robi się wokół nieudanej alokacji SSH za zasobów TCP popychając wszystkich alokacji zasobów sieciowych na Netcat, która działa. SSH SSH po prostu robi swoje rzeczy bez jakichkolwiek połączeń sieciowych, a Netcat wysyła surowe dane przez połączenie TCP do serwera SSH.

UWAGA: Ponieważ ten modyfikuje ProxyCommanddla wszystkich hostów, nie wiem jak to oddziałuje z innymi hostami SSH config że użycie ProxyCommand. Mam kilka serwerów, z którymi mogę przetestować to i będę aktualizować tę odpowiedź z wyników. Jest szansa, że nie istnieją żadne szkodliwe skutki uboczne, ale nie mogę zagwarantować, że.

Aktualizacja # 2: Zrobiłem kilka testów z kilkoma z moich serwerów oraz pracy wydaje. SSH korzysta szczytowego wpis w config kiedy zastosować wiele wpisów. Zatem istniejący ProxyCommandobecny powyżej tej hack, by go zastąpić. Gdy nowe polecenie SSH zostanie wykonane, ponownie odczytuje konfigurację SSH, a jeśli nie ma innej ProxyCommand, SSH używa naszego hacka ProxyCommand, pozwalając na zastosowanie tylko do „najbardziej zewnętrznej” sesji SSH. Słowo ostrzeżenia: jeśli umieścisz hack na górze pliku konfiguracyjnego (lub powyżej wpisu, do którego próbujesz SSH), sesje SSH, które wymagają a ProxyCommand, zignorują drugą ProxyCommandi zamiast tego spróbują rozwiązać adres hosta i połączyć się bezpośrednio z Netcat.

computergeek125
źródło
Dzięki za szczegół @ computergeek125. Niestety, nawet po skonfigurowaniu konfiguracji zgodnie z sugestią, wciąż pojawia się ten sam komunikat ssh: podłącz do hosta domain.com port 22: Zasób tymczasowo niedostępny Po uruchomieniu nc -v <host> <port>, dla pełnego wyjścia, otrzymuję ten sam błąd: zasób tymczasowo niedostępny. Być może robię coś złego, nie jestem pewien. Ponieważ nie mam żadnych problemów z ssh podczas korzystania z powłoki bash Git, na razie się z tym trzymam. BTW, mój system jest teraz w kompilacji 14393, więc jeśli był to błąd w wersji w momencie pytania, nadal jest to błąd 27 kompilacji później.
Kel
Cóż, to interesujące. Będę musiał zbadać tę wersję. Biegałam 14903 w tym czasie (jestem teraz do 14905). Może to być coś, co naprawili w kompilacji, którą mam.
computergeek125,
Jak edytować konfigurację SSH? W bash na konsolę Windows próbowałem, vi ~/.ssh/configktóry otworzył pusty plik. Wkleiłem twoje polecenia, ale kiedy próbuję zapisać (esc ->: -> wq), to mówi mi"~/.ssh/config" E212: Cannot open file for writing
Dan
Ok to dziwne. Jakiej wersji systemu Windows używasz i jaka jest wydajność ls -al ~/.ssh?
computergeek125
3

Był to również problem dla mnie, okazało się, że to był mój (Symantec) zapora blokuje cały ruch internetowy z bash.

Wydaje się, że jest to ogólny problem z zewnętrznymi dostawcami zapór ogniowych, którzy nie rozpoznają tego procesu:

https://github.com/Microsoft/BashOnWindows/issues/809

Kiedy wyłączyłem zaporę, działała dobrze. Obecnie nie można znaleźć lepszego rozwiązania.

Andrew Jones
źródło
0

W moim przypadku wystąpił ten błąd, ponieważ aktualizacja systemu Windows spowodowała problemy z przełącznikiem Hyper-V . Okazuje się, że host, do którego próbowałem ssh, był podłączony do tego przełącznika - naprawienie go przywróciło ssh.

MatrixManAtYrService
źródło
0

Na przyszłość, podczas instalacji Nginx, domyślnie zablokuje SSH z komunikatem o błędzie „Zasób tymczasowo niedostępny”, chyba że ...

sudo ufw pozwalają ssh

andrerpena
źródło
System Windows 10 ma w sobie zaporę. Dlaczego sugerują, że?
Biswapriyo
Sugeruję, że dla przyszłych użytkowników z tymi samymi problemami, ponieważ miałem dokładnie ten sam problem i to dlatego, że Nginx blokował SSH do serwera
andrerpena