Jak mogę włączyć SSH do „Bash na Ubuntu na Windows 10”?


99

Mam Windows 10 Anniversary Edition z zainstalowanym i działającym „Bash na Ubuntu na Windows”. Chciałbym mieć możliwość SSH do tej instancji Ubuntu, ale chociaż mam zainstalowany i skonfigurowany serwer openssh (i nasłuchuję na porcie 2200), kiedy próbuję ssh do „localhost: 2200”, mówi mi „Serwer niespodziewanie” zamknięte połączenie sieciowe ".

Czy ktoś był w stanie to osiągnąć?

wprowadź opis zdjęcia tutaj


Używając Process Hackera i patrząc na zakładkę „Sieć” pokazuje, że sshd (działający na Ubuntu w systemie Windows 10) nasłuchuje na lokalnym porcie 2200.
— Mick

a jeśli spróbujesz połączyć się z adresem IP systemu? Ubuntu często odwzorowuje adresy sprzężenia zwrotnego inaczej niż Windows i używa dodatkowych wartości w 127.0.0.0/8 (często 127.0.1.1)
— Frank Thomas

@Ramhound: Nieprawda. Localhost to localhost i wszystko jest udostępniane. Możesz doskonale zrobić links http://localhost/z podsystemu Linux i zobaczyć stronę internetową dostarczoną przez IIS po stronie Windows. Nie ma separacji.
— Sami Kuhmonen,

Odpowiedzi:


120

Mam to do pracy; Oto jak.

Odinstalowałem serwer ssh, ponownie go zainstalowałem i upewniłem się, że został uruchomiony

sudo service ssh --full-restart

Upewnij się, że wyłączyłeś dostęp do konta root i dodałeś innego użytkownika w pliku konfiguracyjnym.

Udało mi się połączyć z podsystemem 127.0.0.1:22 zgodnie z oczekiwaniami. Mam nadzieję, że to Ci pomoże.

Oto zrzut ekranu.

  1. sudo apt-get purge openssh-server
  2. sudo apt-get install openssh-server
  3. sudo nano /etc/ssh/sshd_config i nie zezwalaj na logowanie roota przez ustawienie PermitRootLogin no
  4. Następnie dodaj wiersz pod nim:

    AllowUsers yourusername

    i upewnij się, że wybrano PasswordAuthenticationopcję, yesjeśli chcesz się zalogować przy użyciu hasła.

  5. Wyłącz separację uprawnień, dodając / modyfikując: UsePrivilegeSeparation no

  6. sudo service ssh --full-restart

  7. Połącz się z podsystemem Linux z systemu Windows za pomocą klienta ssh, takiego jak PuTTY.


2
nie musiałem tego robić - dziwne .. ale pamiętaj, że jest to wciąż w fazie beta, więc wyniki mogą się różnić
— Mistrz Azazel

7
Dodatkowo musiałem: Zatrzymać / wyłączyć usługi brokera serwera Windows 10 SSH z panelu sterowania usługami i ustawić: PubkeyAuthentication no in the sshdconfig
— math0ne 16.09.16

6
Musiałem także dodać regułę zapory. Istniała reguła, ale
— dotyczyła

2
Musiałem także zmienić porty ( Port 2222w /etc/ssh/sshd_configpliku), jeśli nie, serwer ssh systemu Windows odebrał połączenie na porcie 22.
— arod

2
@ArtemRussakovskii zatrzymują cały podsystem Linux za każdym razem, gdy zamkniesz okno bash ...
— Sakher

27

Ponieważ implementacja systemu Windows nie zapewnia chroot, musisz zmodyfikować plik / etc / ssh / sshd_config

UsePrivilegeSeparation no

Konieczne będzie także utworzenie użytkownika za pomocą polecenia useradd.


4
Ten krok był niezbędny do uruchomienia go.
— Mick

1
Byłem ciekawy, więc znalazłem to na freebsd.org/cgi/man.cgi?sshd_config(5) : UsePrivilegeSeparation:
— krs013

Określa, czy sshd (8) rozdziela uprawnienia, tworząc nieuprzywilejowany proces potomny do obsługi przychodzącego ruchu sieciowego. Po udanym uwierzytelnieniu zostanie utworzony inny proces z uprawnieniami uwierzytelnionego użytkownika. Celem rozdzielenia uprawnień jest zapobieganie eskalacji uprawnień poprzez ograniczenie wszelkich uszkodzeń w nieuprzywilejowanych procesach. Argumentem musi być „tak”, „nie” lub „piaskownica”. Jeśli parametr UsePrivilegeSeparation jest ustawiony na „piaskownica”, wówczas nieuprzywilejowany proces przed uwierzytelnieniem podlega dodatkowym ograniczeniom. Domyślnie jest to „piaskownica”.
— krs013,


24

Powyższe odpowiedzi komitetu były świetne. Dziękuję za nie. I chociaż zbliżyli się bardzo blisko, nadal miałem połączenie zamknięte przez problemy 127.0.0.1 .

Znalazłem i dodałem dodatkowe kroki z tego postu, które popchnęły mnie ponad garb. W szczególności rozpoczęcie od nowa i dodanie tego jako początkowego / pierwszego kroku (zwróć uwagę na kwalifikator --purge ) ostatecznie rozwiązało moją odmianę tego problemu:

sudo apt-get remove --purge openssh-server
sudo apt-get install openssh-server
sudo vi /etc/ssh/sshd_config # Change Port from 22 to 2222 (Just in case MS-Windows is using port 22; which, by the way, SSH on MS-Windows can be disabled if you want to use port 22).
sudo service ssh --full-restart

Jeszcze raz dziękuję, mam nadzieję, że ten dodatek pomoże innym. = :)


2
Dlaczego głosowanie negatywne? Same instrukcje nie działały w moim przypadku, jak wspomniano, i działał dodatkowy krok powyżej. Nie rozumiem
— NYCeyes

1
Miałem zupełnie inny błąd „Brak obsługiwanych metod uwierzytelniania (serwer wysłany: klucz publickey)” i te kroki naprawiły to.
— Mike Viens,

2
Z jakiegoś powodu system Windows po prostu nie docenił, że działam na porcie 2222. Nigdy nie pokazywał żadnych innych procesów z niego korzystających i nie było żadnych dowodów konfliktu portów, ale gdy tylko zmieniłem porty, zacząłem praca.
— forresthopkinsa

Port 2222 też nie działa, nie działa żadna inna usługa, ale działa 22, co stanowi problem, ponieważ chcę mieć wiele połączeń SSH.
— mFeinstein

4

Zrobiłem wszystko zgodnie z sugestią Mistrza Azazela i miałem problem. Po podłączeniu do portu 22zostałem poproszony o hasło, ale hasło ustawione w podsystemie Linux nie działało.

Rozwiązanie nr 1:
zmień port SSH /etc/ssh/sshd_configi zrestartuj serwer SSH w podsystemie

Rozwiązanie nr 2:
wyłącz / zatrzymaj „Usługi brokera serwera SSH” w panelu sterowania usług systemu Windows i zrestartuj serwer SSH w podsystemie.


1
Dotyczy to tylko sytuacji, gdy coś działa w systemie Windows na porcie 22.
— Mistrz Azazel,

3
Ofcz, jak widać na mojej domyślnej instalacji win10, usługa działała 22 ...
— scotty86

2

Powód, dla którego nie możesz ssh do niego jest pokazany w logowaniu z serwera:

chroot ("/ var / run / sshd"): Funkcja nie jest zaimplementowana [preauth]

Wydaje się, że podsystem Linux nie ma zaimplementowanego chroot, a serwer ssh go potrzebuje, więc połączenie nie jest dozwolone.


3
Co jest poprawne ... ale inne odpowiedzi wyjaśniają, jak obejść wymaganie chroot.
— Mahmoud Al-Qudsi,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.