Русский (Russian)

SSH-ключи в Windows: ed25519 со встроенным OpenSSH

3 min
VPS/VDS-хостинг

Пара ключей намного безопаснее пароля: закрытый ключ никогда не покидает ваш компьютер, и боты, сканирующие порт 22, не могут его подобрать. В Windows 10 и 11 уже есть OpenSSH, поэтому вы создадите ключ, установите его на VPS Linux Infrawire, загрузите его в службу ssh-agent Windows и в конце отключите вход по паролю.

📋 Требования

  • Windows 10 или 11 с клиентом OpenSSH (проверьте командой ssh -V в PowerShell).
  • Linux VPS (Ubuntu 24.04, Debian 12, AlmaLinux 9 или Rocky 9), на который вы ещё можете войти по паролю: в личном кабинете вы найдёте IP и пароль root вашего VPS.
  • Около десяти минут и вторая SSH-сессия или консоль VPS на случай ошибки.
PowerShell
ssh -V

🔐 Создание ключа ed25519

Откройте PowerShell (обычный, не от администратора) и выполните:

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

Согласитесь с путём по умолчанию C:\Users\USER\.ssh\id_ed25519 и задайте парольную фразу. Она шифрует закрытый ключ на диске, поэтому украденный файл бесполезен. Создаются два файла: id_ed25519 (закрытый, никому его не передавайте) и id_ed25519.pub (открытый).

📤 Копирование открытого ключа на VPS

В Windows нет ssh-copy-id, поэтому установите ключ вручную. Сначала выведите открытый ключ и скопируйте строку целиком:

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

Войдите по паролю и добавьте эту строку на сервере (замените пример между одинарными кавычками на ваш настоящий ключ):

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

Строка с sed убирает windows-окончания строк, из-за которых ключ стал бы нечитаемым. Не передавайте ключ в ssh через конвейер PowerShell: Windows PowerShell 5.1 может добавить к данным символы возврата каретки.

🧰 Включение ssh-agent в Windows

Без агента парольную фразу придётся вводить при каждом входе. Служба ssh-agent установлена, но по умолчанию отключена или запускается вручную. В PowerShell от администратора:

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

Затем в обычном PowerShell один раз загрузите ключ и выведите список загруженных ключей:

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

Агент сохраняет ключ и после перезагрузки, так что повторно его запрашивать не будут.

✅ Проверка входа по ключу

Подключитесь снова. Вы должны получить консоль без запроса пароля root:

PowerShell
ssh root@VPS_IP

Чтобы точно увидеть используемый метод, добавьте -v и найдите Server accepts key и Authenticated to ... using publickey:

PowerShell
ssh -v root@VPS_IP

Не переходите дальше, пока это не работает, и держите эту сессию открытой.

🚫 Отключение входа по паролю на сервере

В Ubuntu и Debian каталог /etc/ssh/sshd_config.d/ может уже содержать файл (например, 50-cloud-init.conf), разрешающий пароли. SSH берёт первое прочитанное значение, поэтому создайте файл, который идёт раньше по порядку. Выполните от root на 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

В AlmaLinux/Rocky служба называется sshd: используйте systemctl reload sshd. Убедитесь, что основной sshd_config содержит в начале строку Include /etc/ssh/sshd_config.d/*.conf (так по умолчанию). Если синтаксис верен, sshd -t ничего не выводит.

Из нового окна проверьте, что пароли теперь отклоняются, а ключ по-прежнему работает:

PowerShell
ssh -o PubkeyAuthentication=no root@VPS_IP

Ожидаемый ответ — Permission denied (publickey).

🛠️ Устранение неполадок

Permission denied (publickey). Ключа нет в authorized_keys нужной учётной записи, он вставлен в несколько строк или неверны права. На сервере выполните chmod 700 ~/.ssh и chmod 600 ~/.ssh/authorized_keys и убедитесь, что строка начинается с ssh-ed25519.

WARNING: UNPROTECTED PRIVATE KEY FILE. Другие учётные записи Windows могут прочитать ваш закрытый ключ. Ограничьте доступ только вашим пользователем:

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

Error connecting to agent: No such file or directory. Служба ssh-agent не запущена; запустите её, как показано выше.

Доступ потерян после изменения. Откройте консоль VPS в личном кабинете, удалите /etc/ssh/sshd_config.d/10-keys-only.conf, выполните sshd -t и перезагрузите службу SSH.


🚀 Ваш компьютер с Windows теперь входит на VPS по ключу ed25519, а пароли отключены. Сохраните копию закрытого ключа в надёжном месте.

Следите за последними предложениями, скидками и специальными акциями.

Смотреть акции

Мы используем файлы cookie

Аналитические cookie улучшают работу сайта. Данные не продаются третьим лицам. Подробнее в политике конфиденциальности.