Znalazłem samouczek na ten temat:
Zostało to pierwotnie omówione i uporządkowane przez użytkowników github imjakey, fpqc, qris, therealkenc, Manouchehri i aseering (ja) tutaj:
https://github.com/Microsoft/BashOnWindows/issues/612
Zauważ, że uruchomienie sshd ma wpływ na bezpieczeństwo. Dopóki model zabezpieczeń WSL nie będzie musiał dłużej piec, powinieneś założyć, że każdy, kto może ssh do twojego Windowsa, ma uprawnienia do wykonania dowolnej komendy jako użytkownik systemu Windows uruchamiający sshd, niezależnie od uprawnień na poziomie Linux. (Uprawnienia są prawdopodobnie bardziej restrykcyjne niż w praktyce, ale początkowy model bezpieczeństwa WSL nie ma być zbyt wyrafinowany).
Próba agregacji instrukcji z github:
- Wygeneruj klucze hosta SSH, uruchamiając je
sudo dpkg-reconfigure
openssh-server
w powłoce bash
- Uruchom
sudo nano /etc/ssh/sshd_config
; edytuj UsePrivilegeSeparation yes
wiersz do przeczytania
UsePrivilegeSeparation no
. (Jest to konieczne, ponieważ
UsePrivilegeSeparation
używa chroot()
syscall, którego WSL obecnie nie obsługuje).
- Podczas edytowania
/etc/ssh/sshd_config
możesz zmienić
PasswordAuthentication no
na PasswordAuthentication yes
. W przeciwnym razie będziesz musiał skonfigurować klucze SSH.
- Zapisz
/etc/ssh/sshd_config
i wyjdź.
Uruchom, sudo visudo
aby edytować plik sudoers. Dodaj linię
$USER ALL = (root) NOPASSWD: /usr/sbin/sshd -D
zamieniając „$ USER” na swoją nazwę użytkownika dla systemu Linux. Zapisz i wyjdź. Jeśli visudo skarży się, że twoje zmiany są nieważne, napraw je, dopóki nie zgłosi, że są one poprawne; w przeciwnym razie możesz złamać sudo w swoim systemie!
- Po stronie systemu Windows edytuj zaporę systemu Windows (i wszelkie zapory innych firm, które mogą być uruchomione), aby zezwolić na ruch przychodzący na porcie 22. Ponieważ nie jest to super-bezpieczna konfiguracja, zalecam zezwalanie na ruch przychodzący tylko z domu ( prywatne) i sieci domen, nie z publicznego Internetu.
Utwórz plik tekstowy
autostartssh.vbs
w systemie Windows zawierający:
set ws=wscript.createobject("wscript.shell")
ws.run "C:\Windows\System32\bash.exe -c 'sudo /usr/sbin/sshd -D'",0
- Kliknij dwukrotnie skrypt. Powinien uruchomić sshd; powinieneś mieć możliwość ssh na swoim komputerze z systemem Windows.
- Otwórz Harmonogram zadań systemu Windows. Dodaj zadanie uruchamiane
autostartssh.vbs
podczas uruchamiania systemu. Użyj wscript.exe
jako polecenia do uruchomienia, a lokalizacja skryptu VBS jako parametru.
I to wszystko - na twoim komputerze z systemem Windows powinien być uruchomiony serwer Linux openssh!
UsePrivilegeSeparation = yes
tym wyjątkiem, żesudo /bin/mkdir -p /var/run/sshd
przed uruchomieniem sshd należy również uruchomić (aby utworzyć katalogi separacji uprawnień). Czy WLS obsługuje teraz chroot (), czy istnieje obejście w źródle openssh, czy też= No
ustawienie jest bardziej zaleceniem bezpieczeństwa? Ponadto wydaje się, że zadanie systemu Windows działa tylko dla mnie, jeśli mój użytkownik jest zalogowany./etc/ssh/sshd_config
tym czytaniuPort 22
i przejdź doPort 8822
. Jednym z powodów jest to, że Windows uruchamia jakiś proces SSH na 22. Widziałem sugestie, że nie ma problemu z wyłączeniem tego, ale najłatwiej było po prostu zmienić port SSH WSL.Musiałem zrobić to samo.
Oto, jak uruchomić system Linux Ubuntu ze wszystkimi usługami crona podczas rozruchu systemu Windows i zapewnić sposób na ponowne uruchomienie systemu Linux.
Z powodzeniem hostuję bazę openssh-server, nginx i mariadb na naszym serwerze.
Zainstaluj podsystem Linux
Pasta:
Zainstaluj Ubuntu ze Sklepu Windows.
Usuń pytanie o hasło sudo (wymagane)
Pasta:
Włącz logowanie za pomocą hasła SSH (opcjonalnie)
Pasta:
Autologinowanie Windows podczas startu (wymagane, jeśli masz hasło lub RDP w)
Przeglądaj do
Utwórz nowy ciąg
DefaultPassword
i wpisz hasło użytkownika jako wartość.Uruchom pętlę bash / cron przy starcie
linux.bat
inshell:startup
Pasta:
Dodaj aplikacje / usługi do uruchamiania na cronie
sudo crontab -e
Dołącz aplikacje startowe, takie jak openssh-server, nginx, mysql, php:
Zapisz i wyjdź:, ctrlxa następnie naciśnij yi enter.
Uruchom ponownie podsystem Linux bez ponownego uruchamiania systemu Windows
Otwórz bash lub SSH w
Spowoduje to zamknięcie bieżącej instancji i utworzenie nowej z zastosowaniem crona.
Extra - Zainstaluj PHP 7.1 (nie tak prosto)
Uruchom poniższe polecenia, aby uzyskać dość standardową konfigurację:
Uruchom poniższe polecenie, aby skonfigurować „OwnCloud”:
Extra - Zainstaluj serwer WWW Nginx
Uruchom poniższe polecenia dla podstawowej konfiguracji z PHP7.1:
Extra - Zainstaluj bazę danych mysql mariadb
Uruchom poniższe polecenia dla serwera bazy danych mysql:
Po wyświetleniu monitu ustaw hasło użytkownika root bazy danych.
źródło
Odpowiedź @poma jest bardzo dobra i na tej podstawie oparta jest moja odpowiedź. Chcę jednak dodać kilka ulepszeń:
service
zamiast dzwonićsshd
bezpośrednio:'sudo service ssh start'
zamiast'sudo /usr/sbin/sshd -D'
. W ten sposób, nawet jeśli wywołasz skrypt wielokrotnie, będzie tylko jedensshd
proces. Ponadto łatwo go zabić za pomocą innego uruchomionego skryptu'sudo service ssh stop'
. W pliku sudoers, wystarczy zamienić/usr/sbin/sshd -D
z/usr/sbin/service
.sshd
bezpośrednio, pozbyć się-D
opcją , ponieważ wprowadzi proces na pierwszym planie w nieskończoność. Jeśli mi nie wierzysz, po prostu zrób to,top
a zobaczyszinit
isudo
proces za każdym razem, gdy wywołasz skrypt. Nie zapomnij również usunąć-D
opcji z pliku sudoers!autostartsshd.ps1
i wklej w następujących przypadkach:bash -c 'sudo service ssh start'
. Aby wykonać skrypt, kliknij go prawym przyciskiem myszy i kliknijRun with PowerShell
.Inne pytanie o przepełnienie stosu ma podobne kroki: /superuser//a/1114162/182590
Mam nadzieję, że ktoś komuś pomoże :)
źródło
sudo service ssh start
a następnie zamkniesz bash, zabije to demona ssh. Przynajmniej tak zrobiłem w momencie pisania mojego przewodnika.wstaw
bash -c "echo [password] | service ssh start"
do skryptu uruchamiania systemu Windows i użyj własnego hasła sudo, aby zastąpić [hasło]źródło
sudo
słowo kluczowe, które sugeruje twoje zdanie). To po prostu nie działa. W każdym razie nie powinieneś przechowywać hasła w postaci zwykłego tekstu!Odpowiedzi na @Poma i @Hintron są świetne.
Chciałbym rozszerzyć opis ostatniego punktu, jak dodać zadanie ssh w Harmonogramie zadań Windows, ponieważ wymaga przełączenia niektórych opcji:
Służy do bezpośredniego wywoływania bash. Nie ma potrzeby zawijania go w skryptach VBS ani PowerShell.
Korzystam z polecenia serwisowego z powodów wyjaśnionych przez @Hintron. Dodatkowo bezpośrednie wywołanie sshd powoduje błąd
W takim przypadku należy dodać ten wpis
sudo visudo
poleceniemZauważ również, że tutaj wszyscy użytkownicy (pierwsza kolumna) mogą uruchomić lub zatrzymać sshd. Jeśli jesteś tylko jednym użytkownikiem tego komputera z systemem Windows, powinno być w porządku.
źródło
Utwórz plik o nazwie
wsl_setup.bat
i dodaj zawartość w następujący sposóbDodaj
wsl_setup.bat
plik do folderu startowego systemu Windows windows-10-change-startup-appsUruchom ponownie i zaloguj się do konta Windows (tak, musisz się zalogować)
źródło