====== Генерация SSH-ключа на Windows ======
Шаг 1. Генерация SSH-ключа на Windows
ssh-keygen -t ed25519 -C "my-windows-pc"
Нажимайте Enter на следующие запросы:
Enter file in which to save the key: нажмите Enter,
чтобы сохранить в стандартную папку (C:\Users\ВашеИмя\.ssh\id_ed25519).
Enter passphrase: можете ввести кодовую фразу для дополнительной защиты самого файла ключа на ПК
или нажать Enter дважды, чтобы оставить без пароля (тогда вход будет полностью автоматическим).
В папке .ssh появятся два файла:
id_ed25519 — ваш приватный ключ (никому его не передавайте).
id_ed25519.pub — ваш публичный ключ (его нужно загрузить на сервер)
Шаг 2. Перенос публичного ключа на VPS
type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh user@IP_сервера "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
(Введите пароль от сервера в последний раз. Если вы уже меняли порт SSH,
добавьте флаг порта после ssh, например: ssh -p 48222 user@IP_сервера ...).
Проверка: Попробуйте зайти на сервер новой командой ssh user@IP_сервера.
Сервер должен пустить вас сразу, без запроса пароля ОС.
Шаг 3. Настройка лимитов (LoginGraceTime, MaxAuthTries, MaxStartups) на сервере
Подключитесь к серверу и откройте конфигурационный файл SSH-сервера:
sudo nano /etc/ssh/sshd_config
Найдите соответствующие директивы (если перед ними стоит символ #, удалите его)
или добавьте ваш блок в конец файла:
# Сколько секунд сервер ждет авторизации до принудительного разрыва (по умолчанию 120)
LoginGraceTime 20
# Максимум попыток предложить ключ за одно соединение (по умолчанию 6)
MaxAuthTries 3
# Защита от забивания канала пустыми подключениями (начать сбрасывать при 3 неавторизованных сессиях)
MaxStartups 3:50:10
# Полное отключение входа по паролю (вход только по ключам)
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
Важный нюанс про MaxAuthTries 3 на Windows:
Если со временем на вашем ПК в папке .ssh накопится больше 3 разных SSH-ключей,
SSH-клиент будет предлагать их серверу по очереди, и на 4-м ключе сервер разорвет соединение.
Поскольку у вас сейчас один ключ id_ed25519, лимит 3 будет работать идеально.
Шаг 4. Безопасная проверка и перезапуск
Проверьте синтаксис конфига перед перезапуском (если в файле опечатка,
команда укажет на строку с ошибкой; если всё чисто — ничего не выведет):
sudo sshd -t
Перезапустите службу SSH:
sudo systemctl restart ssh
Проверьте вход: Не закрывая текущее окно PowerShell, откройте второе окно PowerShell
и подключитесь к серверу, чтобы убедиться, что новые правила работают корректно.
1. Скопируйте публичный ключ из Xshell.
Откройте «Инструменты → Менеджер ключей пользователя», выберите id_ed25519,
нажмите «Свойства» и перейдите на вкладку «Открытый ключ».
Скопируйте строку ssh-ed25519 AAAA...
mkdir -p /root/.ssh
echo 'ssh-ed25519 AAAA...ваш_ключ...' >> /root/.ssh/authorized_keys
chmod 700 /root/.ssh
chmod 600 /root/.ssh/authorized_keys
chown -R root:root /root/.ssh
4. Проверьте настройки sshd:
sshd -T | grep -Ei 'permitrootlogin|pubkeyauthentication|authorizedkeysfile'
Должно быть pubkeyauthentication yes, а permitrootlogin равно yes
или without-password/prohibit-password. Значение no означает,
что вход под root запрещён.
Если что-то меняли, перезапустите службу: systemctl restart ssh
проверка отпечатков:
ssh-keygen -lf /root/.ssh/authorized_keys