Serwer SSH odmawia działania ;(

Całkiem niedawno świat obiegła lotem błyskawicy wiadomość, że Microsoft po cichu wypuścił pakiet OpenSSH (w wersji beta) dla swoich systemów operacyjnych, o czym również informowaliśmy czytelników testhub.pl. Klient SSH poza samą instalacją nie wymaga żadnych dodatkowych zabiegów do działania i od razu można z niego skorzystać. Natomiast osoby, które po zainstalowaniu pakietu serwera oczekiwały, że to wszystko, co konieczne do jego uruchomienia, mogła czekać niespodzianka. Również próba uruchomienia usługi systemowej sshd (serwer OpenSSH) kończy się komunikatem o błędzie:

Nadanie uprawnień

Pierwszy z nich wiąże się z brakiem niezbędnych uprawnień dla usługi sshd, które trzeba dodać ręcznie. Do tego celu służy narzędzie o nazwie Zasady zabezpieczeń lokalnych, które najprościej uruchomić poprzez wydanie polecenia secpol”. Można to zrobić z terminala, ale równie dobrze wystarczy kliknąć menu START i rozpocząć pisanie polecenia. Po otwarciu narzędzia edytora Zasad zabezpieczeń lokalnych należy odszukać klucz Zasady lokalne, a następnie otworzyć Przypisywanie praw użytkownika. W prawym oknie odszukujemy pozycję Zamień token na poziomie procesu:

Otwieramy właściwości tej pozycji poprzez dwukrotne kliknięcie na niej lub wybierając pozycję Właściwości z menu kontekstowego. W otwartym oknie należy kliknąć przycisk Dodaj użytkownika lub grupę. W oknie, które się otworzy, w polu Wprowadź nazwy obiektów do wybrania, które jest dla ułatwienia jedynym aktywnym polem do edycji, wpisujemy NT Service\sshd (koniecznie ze spacją) i zatwierdzamy zmiany, klikając OK.

Klikamy jeszcze raz OK, tym razem w oknie właściwości zasady Zamień token na poziomie procesu i można już zamknąć edytor Zasad zabezpieczeń lokalnych.

Nie tak szybko

Nie, usługi jeszcze uruchomić nie można, a kto chciał to zrobić nie mogąc doczekać się efektów ten spotka się z nowym komunikatem błędu:

Dociekliwym w wytropieniu przyczyny pomoże log usługi, który znajduje się w pliku sshd.log w katalogu C:\Windows\System32\OpenSSH\Logs, zawierający wpisy o takiej treści:

error: Could not load host key: ./ssh_host_rsa_key
error: Could not load host key: ./ssh_host_dsa_key
error: Could not load host key: ./ssh_host_ed25519_key
sshd: no hostkeys available -- exiting.

Generujemy klucze szyfrujące

Mamy winowajcę, nasz serwer SSH nie posiada kluczy do szyfrowania ruchu pomiędzy serwerem i klientem usługi SSH. Musimy je zatem wygenerować komendą C:\Windows\System32\OpenSSH\ssh-keygen.exe -A, którą wydamy w terminalu. Oczywiście operacja ta wymaga praw administratora i terminal należy uruchomić z takimi uprawnieniami (np. poprzez stworzenie skrótu cmd.exe na pulpicie i uruchomienie go poprzez wybranie Uruchom jako administrator z menu kontekstowego). Jeszcze jedna ważna uwaga – operacje należy wykonać w katalogu C:\Windows\System32\OpenSSH lub wygenerowane klucze tam przenieść.

To jeszcze nie wszystko

Niestety to nadal nie wszystkie operacje jakie musimy uczynić. A to dlatego, że chociaż już mamy klucz, to nadal usługa serwera SSH nie ma dostępu do pliku ssh_host_ed25519_key i musimy ten problem naprawić. Zatem z menu kontekstowego pliku wywołujemy Właściwości, przechodzimy na zakładkę Zabezpieczenia i wprowadzamy następujące zmiany:

  • zmieniamy właściciela pliku na NT Service\sshd,
  • nadajemy usłudze NT Service\sshd wyłącznie prawa do odczytu pliku,
  • odbieramy uprawnienia do pliku innym użytkownikom.

Po upewnieniu się co do poprawności zmian, można zamknąć okno właściwości pliku.

Startujemy

Tym razem uruchomienie usługi powinno zakończyć się sukcesem. Jeśli tak nie jest, należy sprawdzić zawartość logu. Najbardziej prawdopodobny scenariusz, to niepoprawnie zmienione uprawnienia do pliku klucza, które w logu będą miały postać ostrzeżenia:

error: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
error: @ WARNING: UNPROTECTED PRIVATE KEY FILE! @
error: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
error: Permissions for './ssh_host_ed25519_key' are too open.
error: It is required that your private key files are NOT accessible by others.
error: This private key will be ignored.

Po uruchomieniu serwera SSH, można się już połączyć zdalnie z komputerem za pomocą klienta SSH.

Uwagi

Usługa serwera SSH jest domyślnie ustawiona na uruchomienie automatyczne opóźnione. Czyli będzie uruchamiana automatycznie, po wystartowaniu wszystkich pozostałych usług, a zatem dostęp do komputera po SSH może być możliwy dopiero po dłuższej chwili od uruchomienia go. Jeśli nie planujecie intensywnie z niej korzystać, bezpieczniej będzie zmienić to ustawienie na typ uruchomienia ręczny i zmieniać według potrzeb. Należy też pamiętać o ewentualnych zmianach w konfiguracji firewall’a, zapory w programie antywirusowym czy skonfigurowaniu NAT na routerze, jeśli dostęp ma być realizowany, np. w sieci Internet.