Polski

Klucze SSH w Windows: ed25519 z wbudowanym OpenSSH

3 min
Hosting VPS/VDS

Para kluczy jest znacznie bezpieczniejsza niż hasło: klucz prywatny nigdy nie opuszcza Twojego komputera, a boty skanujące port 22 nie mogą go odgadnąć. Windows 10 i 11 mają już wbudowany OpenSSH, więc utworzysz klucz, zainstalujesz go na VPS Linux Infrawire, zachowasz go załadowanego w usłudze ssh-agent systemu Windows, a na końcu wyłączysz logowanie hasłem.

📋 Wymagania wstępne

  • Windows 10 lub 11 z klientem OpenSSH (sprawdź poleceniem ssh -V w PowerShellu).
  • VPS z Linuksem (Ubuntu 24.04, Debian 12, AlmaLinux 9 lub Rocky 9), na który nadal możesz wejść hasłem: w panelu klienta znajdziesz IP i hasło root VPS.
  • Około dziesięciu minut oraz druga sesja SSH lub konsola VPS jako siatka bezpieczeństwa.
PowerShell
ssh -V

🔐 Generowanie klucza ed25519

Otwórz PowerShell (zwykły, nie jako administrator) i uruchom:

PowerShell
ssh-keygen -t ed25519 -C 'USER@my-pc'

Zaakceptuj domyślną ścieżkę C:\Users\USER\.ssh\id_ed25519 i podaj hasło do klucza. Szyfruje ono klucz prywatny na dysku, więc skradziony plik jest bezużyteczny. Powstają dwa pliki: id_ed25519 (prywatny, nigdy go nie udostępniaj) i id_ed25519.pub (publiczny).

📤 Kopiowanie klucza publicznego na VPS

Windows nie ma ssh-copy-id, więc zainstaluj klucz ręcznie. Najpierw wyświetl klucz publiczny i skopiuj całą linię:

PowerShell
Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub

Zaloguj się hasłem i dopisz tę linię na serwerze (zamień tekst przykładowy na swój prawdziwy klucz między apostrofami):

Bash
ssh root@VPS_IP mkdir -p ~/.ssh && chmod 700 ~/.ssh echo 'ssh-ed25519 AAAA...your-key... USER@my-pc' >> ~/.ssh/authorized_keys sed -i 's/\r$//' ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys

Linia z sed usuwa windowsowe końce linii, które uczyniłyby klucz nieczytelnym. Nie używaj do tego potoków PowerShella do ssh: Windows PowerShell 5.1 może dodawać do danych znaki powrotu karetki.

🧰 Włączanie ssh-agent w Windows

Bez agenta musisz wpisywać hasło do klucza przy każdym logowaniu. Usługa ssh-agent jest zainstalowana, ale domyślnie wyłączona lub ustawiona na start ręczny. W PowerShellu uruchomionym jako administrator:

PowerShell
Get-Service ssh-agent | Set-Service -StartupType Automatic Start-Service ssh-agent Get-Service ssh-agent

Następnie w zwykłym PowerShellu załaduj klucz jednorazowo i wyświetl załadowane klucze:

PowerShell
ssh-add $env:USERPROFILE\.ssh\id_ed25519 ssh-add -l

Agent zachowuje klucz po restarcie, więc nie będziesz pytany ponownie.

✅ Test logowania kluczem

Połącz się ponownie. Powinieneś dostać powłokę bez pytania serwera o hasło roota:

PowerShell
ssh root@VPS_IP

Aby zobaczyć dokładnie, jaka metoda jest użyta, dodaj -v i szukaj Server accepts key oraz Authenticated to ... using publickey:

PowerShell
ssh -v root@VPS_IP

Nie idź dalej, dopóki to nie działa, i zostaw tę sesję otwartą.

🚫 Wyłączanie uwierzytelniania hasłem na serwerze

W Ubuntu i Debianie katalog /etc/ssh/sshd_config.d/ może już zawierać plik (np. 50-cloud-init.conf) włączający hasła. SSH używa pierwszej odczytanej wartości, więc utwórz plik, który sortuje się wcześniej. Wykonaj jako root na VPS:

Bash
grep -ri 'PasswordAuthentication' /etc/ssh/sshd_config /etc/ssh/sshd_config.d/ cat > /etc/ssh/sshd_config.d/10-keys-only.conf <<'EOF' PasswordAuthentication no KbdInteractiveAuthentication no PubkeyAuthentication yes PermitRootLogin prohibit-password EOF sshd -t && systemctl reload ssh

W AlmaLinux/Rocky usługa nazywa się sshd: użyj systemctl reload sshd. Upewnij się, że główny sshd_config zawiera na początku linię Include /etc/ssh/sshd_config.d/*.conf (tak jest domyślnie). sshd -t nic nie wypisuje, gdy składnia jest poprawna.

W nowym oknie sprawdź, że hasła są teraz odrzucane, a klucz nadal działa:

PowerShell
ssh -o PubkeyAuthentication=no root@VPS_IP

Oczekiwana odpowiedź to Permission denied (publickey).

🛠️ Rozwiązywanie problemów

Permission denied (publickey). Klucza nie ma w authorized_keys właściwego konta, został wklejony w kilku liniach albo uprawnienia są błędne. Na serwerze wykonaj chmod 700 ~/.ssh i chmod 600 ~/.ssh/authorized_keys oraz sprawdź, czy linia zaczyna się od ssh-ed25519.

WARNING: UNPROTECTED PRIVATE KEY FILE. Inne konta Windows mogą odczytać Twój klucz prywatny. Ogranicz dostęp do swojego użytkownika:

PowerShell
icacls $env:USERPROFILE\.ssh\id_ed25519 /inheritance:r /grant:r "${env:USERNAME}:F"

Error connecting to agent: No such file or directory. Usługa ssh-agent nie działa; uruchom ją tak, jak opisano wyżej.

Zablokowany dostęp po zmianie. Użyj konsoli VPS z panelu klienta, usuń /etc/ssh/sshd_config.d/10-keys-only.conf, wykonaj sshd -t i przeładuj usługę SSH.


🚀 Twój komputer z Windows loguje się teraz na VPS kluczem ed25519, a hasła są wyłączone. Zachowaj kopię klucza prywatnego w bezpiecznym miejscu.

Bądź na bieżąco z najnowszymi ofertami, zniżkami i promocjami specjalnymi.

Zobacz promocje

Używamy plików cookie

Używamy plików cookie analitycznych, aby ulepszać nasz serwis. Nie sprzedajemy danych stronom trzecim. Więcej w polityce prywatności.