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 -Vw 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.
PowerShellssh -V
🔐 Generowanie klucza ed25519
Otwórz PowerShell (zwykły, nie jako administrator) i uruchom:
PowerShellssh-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ę:
PowerShellGet-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):
Bashssh 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:
PowerShellGet-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:
PowerShellssh-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:
PowerShellssh root@VPS_IP
Aby zobaczyć dokładnie, jaka metoda jest użyta, dodaj -v i szukaj Server accepts key oraz Authenticated to ... using publickey:
PowerShellssh -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:
Bashgrep -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:
PowerShellssh -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:
PowerShellicacls $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.