Konfigurowanie uwierzytelniania klucza SSH w systemie Windows 10/2019

W tym artykule skonfigurujemy uwierzytelnianie SSH w systemie Windows za pomocą kluczy RSA w celu bezpiecznego dostępu do systemów zdalnych. Pokażemy, jak wygenerować klucze RSA (certyfikaty) w systemie Windows i skonfigurować serwer OpenSSH w systemie Windows 10 / Windows Server 2019 do autoryzacji za pomocą kluczy (bez haseł).

Uwierzytelnianie za pomocą kluczy SSH jest szeroko stosowane w świecie Linux, a w systemie Windows ta funkcja pojawiła się stosunkowo niedawno. Chodzi o to, że klucz publiczny klienta jest dodawany do serwera SSH, a po połączeniu serwer sprawdza odpowiedni klucz prywatny dla klienta.

Treść

  • Generowanie kluczy RSA na kliencie Windows
  • Konfigurowanie OpenSSH w systemie Windows do autoryzacji klucza
  • Logowanie za pomocą klucza SSH dla lokalnych administratorów systemu Windows

Generowanie kluczy RSA na kliencie Windows

Na komputerze klienckim, z którego będziesz się łączyć ze zdalnym serwerem Windows za pomocą OpenSSH, musisz wygenerować parę kluczy RSA (publiczny i prywatny). Klucz prywatny jest przechowywany na kliencie (nie daj go nikomu!), A klucz publiczny jest umieszczany na serwerze SSH w pliku klucze autoryzowane. Aby wygenerować klucze RSA na kliencie Windows, musisz zainstalować klienta OpenSSH.

W systemach Windows 10 1809 i Windows Server 2019 klient OpenSSH jest instalowany jako osobny wbudowany komponent:

Add-WindowsCapability -Online -Name OpenSSH.Client ~~~~ 0.0.1.0

W poprzednich wersjach systemu Windows można zainstalować port Win32-OpenSSH za pomocą GitHub (patrz przykład w artykule na temat konfigurowania serwera SFTP w systemie Windows).

Rozpocznij regularną (nieuprzywilejowaną sesję PowerShell) i wygeneruj parę kluczy RSA 2048 za pomocą polecenia:

ssh-keygen

Narzędzie poprosi o podanie hasła w celu ochrony klucza prywatnego. Jeśli określisz hasło, za każdym razem, gdy użyjesz tego klucza do autoryzacji SSH, będziesz musiał wprowadzić to hasło. Nie podałem hasła do klucza (niezalecane).

Narzędzie ssh-keygen utworzy katalog .ssh w profilu bieżącego użytkownika systemu Windows (C: \ Users \ twoja_nazwa_użytkownika) i umieść w nim 2 pliki:

  • id_rsa - klucz prywatny
  • id_rsa.pub - klucz publiczny

Po utworzeniu kluczy możesz dodać klucz prywatny do usługi Agent SSH, co pozwala wygodnie zarządzać kluczami prywatnymi i używać ich do uwierzytelniania.

Agent SSH może przechowywać klucze prywatne i udostępniać je w kontekście bezpieczeństwa bieżącego użytkownika. Uruchom usługę ssh-agent i skonfiguruj AutoShell, aby uruchamiał polecenia kontroli usługi za pomocą PowerShell:

set-service ssh-agent StartupType „Automatyczny”
Start-Service ssh-agent

Dodaj swój klucz prywatny do bazy danych ssh-agent:

ssh-add "C: \ Users \ youruser \ .ssh \ id_rsa"

Lub tak:

ssh-add.exe $ ENV: UserProfile \ .ssh \ id_rsa

Konfigurowanie OpenSSH w systemie Windows do autoryzacji klucza

Teraz klucz publiczny wygenerowany na kliencie należy skopiować na serwer SSH (w tym przykładzie jest to komputer zdalny z systemem Windows 10 1903 i skonfigurowaną usługą OpenSSH).

Sprawdziliśmy już szczegółowo konfigurację serwera OpenSSH w systemie Windows.

Skopiuj plik id_rsa.pub do katalogu .ssh profil użytkownika, pod którym będziesz się łączyć z serwerem SSH. Na przykład mam użytkownika utworzonego w systemie Windows 10 admin, następnie muszę skopiować klucz do pliku C: \ Users \ admin \ .ssh \ Author_keys.

Możesz skopiować klucz na serwer SSH z klienta za pomocą SCP:

scp C: \ Users \ youruser \ .ssh \ id_rsa.pub [email protected]: c: \ users \ admin \ .ssh \ Author_keys

Teraz możesz połączyć się z serwerem SSH bez podawania hasła użytkownika. A jeśli nie ustawiłeś hasła (hasła) dla klucza prywatnego, natychmiast połączysz się automatycznie ze zdalnym serwerem Windows.

Aby połączyć się przez SSH ze zdalnym hostem, użyj następującego polecenia:

ssh (nazwa użytkownika) @ (nazwa lub adres IP serwera SSH)

Na przykład,

ssh [email protected]

Oznacza to, że chcesz połączyć się ze zdalnym serwerem SSH za pomocą adresu 192.168.1.90 pod kontem admin. Usługa agenta SSH automatycznie spróbuje użyć wcześniej zapisanego klucza prywatnego do autoryzacji.

Jeśli nie chcesz używać ssh-agent do zarządzania kluczami, możesz określić ścieżkę do klucza prywatnego, którego chcesz używać do uwierzytelniania SSH:

ssh [email protected] -i "C: \ Users \ youruser \ .ssh \ id_rsa"

Jeśli nie możesz połączyć się z serwerem SSH przy użyciu klucza RSA, a nadal jesteś proszony o hasło, najprawdopodobniej użytkownik, z którym się łączysz, jest członkiem lokalnej grupy administratorów serwerów (SID grupy S-1-5-32-544). O tym dalej.

Logowanie za pomocą klucza SSH dla lokalnych administratorów systemu Windows

OpenSSH używa specjalnych ustawień dostępu do klucza dla użytkowników z lokalnymi uprawnieniami administratora Windows.

Przede wszystkim zamiast klucza autoryzowanego_kluczy w profilu użytkownika należy użyć pliku z kluczami C: \ ProgramData \ ssh \administrator_autoryzowany_kluczs. Musisz dodać swój klucz do tego pliku tekstowego (ze względów bezpieczeństwa tylko administratorzy i SYSTEM powinni mieć uprawnienia do tego pliku).

Aby użyć klucza autoryzowanego_kluczy z profilu użytkownika i nie przesyłać danych klucza publicznego do pliku administrators_authorized_keys, możesz skomentować wiersz w pliku konfiguracyjnym OpenSSH („C: \ ProgramData \ ssh \sshd_config„).

Skomentuj linie:

#Match Group administrators # AuthorizedKeysFile __PROGRAMDATA __ / ssh / administrators_authorized_keys

Dodatkowo w pliku sshd_config możesz włączyć logowanie przy użyciu kluczy RSA:

Pubkey Uwierzytelnienie tak

I odmów dostępu za pomocą hasła:

Hasło Numer uwierzytelnienia

Po zapisaniu zmian w pliku sshd_config pamiętaj o ponownym uruchomieniu usługi sshd.

restart-service sshd

Kolejny mały niuans. W starszych wersjach OpenSSH trzeba było przyznać NT Service \ sshd prawo odczytu kluczy autoryzowanych.

Aby to zrobić, wykonaj jedną z następujących czynności:

  • Zainstaluj moduł Opensshutils: Moduł instalacji -Force OpenSSHUtils -Scope AllUsers . Aby zmienić uprawnienia do pliku, wykonaj polecenie: Repair-AuthorizedKeyPermission -FilePath C: \ Users \ admin \ .ssh \ Author_keys ;
  • Zmień uprawnienia do plików NTFS za pomocą modułu NTFSSecurity lub icacls;
  • Lub możesz wyłączyć tryb w pliku konfiguracyjnym sshd_config StrictModes. Domyślnie ten tryb jest włączony i uniemożliwia uwierzytelnianie klucza, jeśli klucze prywatny i publiczny nie są wystarczająco chronione. Odkomentuj linię #StrictModes tak, zmień na StrictModes no .

Tak więc skonfigurowano uwierzytelnianie SSH w systemie Windows za pomocą klucza publicznego RSA (certyfikatu). Teraz możesz użyć tej metody uwierzytelniania do bezpiecznego dostępu do zdalnych serwerów, automatycznego podnoszenia przekierowania portów w tunelu SSH, uruchamiania skryptów i innych zadań automatyzacji.