В статье разберём:
- как сгенерировать SSH-ключ в Windows PowerShell (и что делать, если ключ уже существует);
- как загрузить публичный ключ на сервер и выдать правильные права;
- как отключить вход по паролю и оставить только вход по ключам;
- как проверить работу и что делать, если потеряли доступ.
Подготовка: что понадобится
-
Данные от VPS: IP-адрес, пользователь для входа (обычно
root
или ваш пользователь), порт SSH (по умолчанию 22). -
Windows 10/11 c OpenSSH: PowerShell уже содержит
ssh
иssh-keygen
. Проверьте:ssh -V ssh-keygen -h
-
(Опционально) На macOS команды те же самые — выполняются в «Терминале».

Генерация SSH-ключа в Windows PowerShell
Создадим пару ключей (приватный + публичный). Запустите PowerShell от своего пользователя и выполните:
ssh-keygen -t rsa -b 4096 -C "vps_key_2025"
-
Где сохранить — по умолчанию:
C:\Users\ВАШ_ПОЛЬЗОВАТЕЛЬ\.ssh\id_rsa
. Можно просто нажать Enter. -
Passphrase — парольная фраза к ключу (очень рекомендуется). Если не хотите вводить её при каждом подключении — используйте агент ключей
ssh-agent
.

Если ключ уже существует (сообщение вида id_rsa already exists
):
-
нажмите N (не перезаписывать) и укажите новое имя, например
id_rsa_vps
; -
или используйте имеющийся ключ (если он уже добавлен на сервер).

Загрузка публичного ключа на сервер
На Windows нет штатного ssh-copy-id
, поэтому используем PowerShell для передачи публичного ключа на VPS.
Вариант A. Стандартный порт 22:
Get-Content $env:USERPROFILE\.ssh\id_rsa.pub | ssh root@123.45.67.89 "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
Вариант B. Нестандартный порт (например, 2222):
Get-Content $env:USERPROFILE\.ssh\id_rsa.pub | ssh -p 2222 root@123.45.67.89 "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

Если подключаетесь НЕ под root (например, под admin
), команда такая же — ключ попадёт в /home/admin/.ssh/authorized_keys
и будет работать для пользователя admin
.
Проверяем вход по ключу
Проверьте, что теперь можете входить без пароля (будет запрошена только passphrase к ключу, если вы её задавали):
ssh root@123.45.67.89
# или с портом
ssh -p 2222 root@123.45.67.89

Если вход успешен — можно отключать пароли на сервере.
Включаем режим «только по ключам» (отключаем пароли)
-
Откройте конфигурацию SSH на сервере:
sudo nano /etc/ssh/sshd_config
-
Убедитесь, что включена аутентификация по ключам:
PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys
-
Полностью запретите вход по паролю. В новых версиях OpenSSH используйте KbdInteractiveAuthentication, в старых — ChallengeResponseAuthentication:
PasswordAuthentication no KbdInteractiveAuthentication no # ChallengeResponseAuthentication no
-
(Рекомендуется) Запретить root по паролю, оставив только ключи (или вообще запретить root):
PermitRootLogin prohibit-password # или более жёстко: # PermitRootLogin no
-
Сохраните файл в nano: Ctrl+O → Enter → Ctrl+X.
-
Проверьте синтаксис конфигурации (если тишина — всё ок):
sudo sshd -t -f /etc/ssh/sshd_config
-
Перезапустите службу SSH (в Ubuntu/Debian юнит называется
ssh
):sudo systemctl restart ssh


Важно: не закрывайте текущее подключение до тех пор, пока не проверите новое в отдельном окне PowerShell.
Права на каталоги и ключи (если вход не работает)
Если после настроек видите Permission denied (publickey), проверьте права каталога и файла ключей на сервере:
# для текущего пользователя (например, admin):
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
# если ключ загружали от root в чужой home:
chown -R admin:admin /home/admin/.ssh
(Опционально) Удобное подключение через alias в SSH config (Windows)
Чтобы не вводить каждый раз IP/порт/логин, создайте файл %USERPROFILE%\.ssh\config
и добавьте профиль:
Host my-vps
HostName 123.45.67.89
User root
Port 2222
IdentityFile C:\Users\ВАШ_ПОЛЬЗОВАТЕЛЬ\.ssh\id_rsa
Теперь вход выполняется командой:
ssh my-vps

Частые ошибки и быстрые решения
-
Permission denied (publickey) — сервер не принимает ваш ключ.
# проверьте, что публичный ключ действительно в authorized_keys # проверьте права: chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
-
Connection refused — служба SSH не запущена или порт закрыт.
sudo systemctl status ssh sudo systemctl restart ssh # откройте порт в фаерволе, если нужно: sudo ufw allow 22/tcp # или ваш порт sudo ufw reload
-
Host key verification failed — переустанавливали ОС/VPS, ключ хоста изменился.
ssh-keygen -R 123.45.67.89
-
Ключ в authorized_keys на нескольких строках — публичный ключ должен быть одной длинной строкой.
Восстановление доступа, если потеряли ключ
-
Откройте веб-консоль в панели хостинга (VNC/Web Console).
-
Разрешите временно вход по паролю:
sudo nano /etc/ssh/sshd_config # измените: PasswordAuthentication yes
Сохраните файл в nano: Ctrl+O → Enter → Ctrl+X, затем перезапустите SSH:
sudo systemctl restart ssh
-
Добавьте новый публичный ключ и снова отключите пароли (
PasswordAuthentication no
).
Итоги
-
Сгенерировали ключ в PowerShell и (при необходимости) задали passphrase.
-
Загрузили публичный ключ на сервер и выставили корректные права.
-
Отключили вход по паролю в
sshd_config
, оставили только ключи. -
Проверили подключение и разобрали частые ошибки.