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

Mick
źródło
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.

Mistrz Azazel
źródło
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.

d1val
źródło
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,
7
WSL wdrożył chroot we wrześniu 2016 r. (Po tej odpowiedzi).
GreenReaper
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. = :)

NYCeyes
źródło
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.

scotty86
źródło
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.

Sami Kuhmonen
źródło
3
Co jest poprawne ... ale inne odpowiedzi wyjaśniają, jak obejść wymaganie chroot.
Mahmoud Al-Qudsi,