SSH-доступ к игровому серверу по ключу
Как настроить SSH-ключи для игрового сервера: генерация, копирование, вход без пароля, отключение парольной аутентификации и частые ошибки.
Кратко: SSH-ключи заменяют пароль при подключении к серверу - вход становится быстрее и значительно безопаснее. Сгенерируйте ключ командой
ssh-keygen -t ed25519, скопируйте его на сервер черезssh-copy-id, и можно заходить без ввода пароля.
SSH-доступ к игровому серверу по ключу
Парольный вход по SSH - это удобно на старте, но небезопасно в эксплуатации. Боты непрерывно перебирают пароли на стандартном 22 порту, и слабые учётные данные взламываются за часы. SSH-ключи решают проблему радикально: приватный ключ хранится только у вас, на сервер уходит лишь публичная часть, и даже при перехвате трафика злоумышленник не получит ничего полезного. В 2026 году это стандартная практика для любого выделенного или виртуального сервера с игровым проектом.
Pterohost - игровой хостинг с NVMe-дисками, DDoS-защитой и поддержкой 24/7. Настроить SSH-ключи можно сразу после заказа через панель. Промокод 4START даёт -20% на первый заказ. Заказать Minecraft хостинг
Как работают SSH-ключи
SSH использует асимметричную криптографию. Вы генерируете пару: приватный ключ (остаётся у вас) и публичный ключ (копируется на сервер). При подключении сервер отправляет зашифрованный вызов, который можно расшифровать только с помощью приватного ключа. Если расшифровка успешна - вы авторизованы.
Схема взаимодействия:
Клиент Сервер
| |
|---- запрос на вход --------->|
|<--- зашифрованный вызов -----|
|---- ответ (приват. ключ) --->|
|<--- доступ разрешён ---------|
Плюсы по сравнению с паролем:
- Невозможно подобрать брутфорсом (ключ 256+ бит).
- Приватный ключ никогда не передаётся по сети.
- Можно добавить passphrase для двойной защиты.
- Удобство: один ключ для десятков серверов.
Генерация SSH-ключа
Выбор алгоритма
В 2026 году рекомендуется Ed25519 - современный алгоритм на основе эллиптических кривых. Ключ всего 256 бит, но надёжнее RSA-2048.
| Алгоритм | Размер ключа | Рекомендация |
|---|---|---|
| Ed25519 | 256 бит | Предпочтительный вариант |
| RSA | 4096 бит | Совместимость со старыми системами |
| ECDSA | 256-521 бит | Допустим, но Ed25519 лучше |
| DSA | 1024 бит | Устарел, не использовать |
Команда генерации
На локальной машине (Windows, Linux, macOS):
ssh-keygen -t ed25519 -C "my-game-server"
Флаги:
-t ed25519- алгоритм-C "my-game-server"- комментарий (метка ключа, видна в authorized_keys)
Вывод после запуска:
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/user/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user/.ssh/id_ed25519
Your public key has been saved in /home/user/.ssh/id_ed25519.pub
Нажмите Enter для пути по умолчанию. Passphrase можно оставить пустым или задать - это пароль для доступа к самому файлу ключа.
В результате создаются два файла:
~/.ssh/id_ed25519- приватный ключ (600, только для вас)~/.ssh/id_ed25519.pub- публичный ключ (644, можно показывать)
Никогда не копируйте приватный ключ на сервер и не вставляйте его в веб-формы.
Если нужен RSA (для совместимости)
ssh-keygen -t rsa -b 4096 -C "my-game-server"
Файлы: ~/.ssh/id_rsa и ~/.ssh/id_rsa.pub.
Копирование ключа на сервер
Способ 1: ssh-copy-id (рекомендуется)
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server-ip
Или с нестандартным портом:
ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 2222 user@server-ip
Команда автоматически добавит ключ в ~/.ssh/authorized_keys на сервере с правильными правами доступа.
Способ 2: ручное копирование
Если ssh-copy-id недоступен (например на Windows без WSL):
- Посмотрите содержимое публичного ключа:
cat ~/.ssh/id_ed25519.pub
Вывод выглядит так (одна строка):
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBt8... my-game-server
- Подключитесь к серверу по паролю и выполните:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBt8... my-game-server" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
Способ 3: через SCP
# скопировать ключ
scp ~/.ssh/id_ed25519.pub user@server-ip:/tmp/my_key.pub
# на сервере
cat /tmp/my_key.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
rm /tmp/my_key.pub
Проверка входа по ключу
После копирования ключа проверьте вход:
ssh -i ~/.ssh/id_ed25519 user@server-ip
Или если ключ стандартный (id_ed25519 / id_rsa):
ssh user@server-ip
Успешное подключение без запроса пароля означает, что ключ работает. Только после этой проверки можно отключать парольный вход.
Чтобы включить подробный вывод для отладки:
ssh -v user@server-ip # базовый отладочный вывод
ssh -vvv user@server-ip # максимально подробный
Отключение парольной аутентификации
Это критически важный шаг для безопасности. Выполняйте его только после того, как убедились, что вход по ключу работает.
Откройте конфигурацию SSH-сервера:
nano /etc/ssh/sshd_config
Найдите и измените (или добавьте) следующие строки:
# Отключить вход по паролю
PasswordAuthentication no
ChallengeResponseAuthentication no
# Разрешить только ключевую аутентификацию
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
# Отключить пустые пароли
PermitEmptyPasswords no
# Рекомендуется: запретить прямой вход root (использовать sudo-пользователя)
# PermitRootLogin no
После изменений перезапустите sshd:
systemctl restart sshd
Или на старых системах:
service ssh restart
Не закрывайте текущую сессию сразу после перезапуска. Откройте новое терминальное окно и проверьте вход. Если что-то пошло не так - у вас будет открытая сессия для исправления.
Проверка текущих настроек sshd
sshd -T | grep -E 'passwordauth|pubkeyauth|permitrootlogin'
Ожидаемый вывод:
passwordauthentication no
pubkeyauthentication yes
permitrootlogin prohibit-password
Файл ~/.ssh/config - алиасы для серверов
Файл ~/.ssh/config позволяет задать короткие имена для серверов и сохранить параметры подключения. Создаётся на клиентской машине.
# Основной игровой сервер Minecraft
Host mc-server
HostName 185.12.34.56
User root
Port 22
IdentityFile ~/.ssh/id_ed25519
ServerAliveInterval 60
ServerAliveCountMax 3
# Тестовый сервер на нестандартном порту
Host mc-test
HostName 185.12.34.57
User gameadmin
Port 2222
IdentityFile ~/.ssh/id_ed25519
# Сервер с ProxyJump (доступ через бастион)
Host internal-mc
HostName 10.0.0.5
User root
ProxyJump mc-server
После настройки подключение выглядит так:
ssh mc-server # вместо: ssh root@185.12.34.56
ssh mc-test # вместо: ssh -p 2222 gameadmin@185.12.34.57
scp file.jar mc-server:/opt/minecraft/plugins/
Параметры ~/.ssh/config
| Параметр | Описание |
|---|---|
HostName | IP или DNS сервера |
User | Имя пользователя |
Port | Порт (по умолчанию 22) |
IdentityFile | Путь к приватному ключу |
ServerAliveInterval | Интервал keepalive-пакетов (секунды) |
ServerAliveCountMax | Число keepalive до разрыва |
ForwardAgent | Пробросить ssh-agent (для ProxyJump) |
StrictHostKeyChecking | Проверка fingerprint сервера |
Права на файл конфига:
chmod 600 ~/.ssh/config
Управление несколькими ключами
При работе с несколькими серверами или аккаунтами удобно иметь отдельные ключи:
# Генерация именованных ключей
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_minecraft -C "minecraft-prod"
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_rust -C "rust-server"
В ~/.ssh/config указываем нужный ключ для каждого хоста:
Host mc-prod
HostName 185.12.34.56
User root
IdentityFile ~/.ssh/id_ed25519_minecraft
Host rust-prod
HostName 185.12.34.57
User root
IdentityFile ~/.ssh/id_ed25519_rust
ssh-agent - кэширование ключей с passphrase
Если ключ защищён паролем (passphrase), вводить его при каждом подключении неудобно. SSH-agent держит расшифрованный ключ в памяти:
# Запустить агента
eval $(ssh-agent -s)
# Добавить ключ (один раз введёте passphrase)
ssh-add ~/.ssh/id_ed25519
# Проверить загруженные ключи
ssh-add -l
В Linux можно настроить автозапуск в ~/.bashrc или ~/.zshrc:
if [ -z "$SSH_AUTH_SOCK" ]; then
eval $(ssh-agent -s)
ssh-add ~/.ssh/id_ed25519 2>/dev/null
fi
Частые ошибки и их решение
Permission denied (publickey)
Самая распространённая ошибка. Причины и решения:
1. Неправильные права на файлы:
# На сервере
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chown -R $USER:$USER ~/.ssh
# На клиенте
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub
2. Ключ не добавлен в authorized_keys:
# Проверить на сервере
cat ~/.ssh/authorized_keys
# Должна быть строка с вашим публичным ключом
3. PubkeyAuthentication выключен на сервере:
grep PubkeyAuthentication /etc/ssh/sshd_config
# Должно быть: PubkeyAuthentication yes
4. SELinux блокирует доступ (на CentOS/RHEL):
restorecon -Rv ~/.ssh
Connection refused
ssh: connect to host 185.12.34.56 port 22: Connection refused
Возможные причины:
- SSH-сервис не запущен:
systemctl status sshd - Нестандартный порт: проверьте
Portв/etc/ssh/sshd_config - Файрвол блокирует порт:
ufw statusилиiptables -L
# Проверить, слушает ли sshd
ss -tlnp | grep ssh
# Открыть порт в ufw
ufw allow 22/tcp
Host key verification failed
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
Это происходит при смене сервера или переустановке ОС. Удалите старый fingerprint:
ssh-keygen -R server-ip
Или вручную удалите строку в ~/.ssh/known_hosts.
Too many authentication failures
SSH пробует все ключи подряд. Если их больше 6, сервер отказывает. Укажите ключ явно:
ssh -o IdentitiesOnly=yes -i ~/.ssh/id_ed25519 user@server-ip
Или в ~/.ssh/config:
Host server-ip
IdentityFile ~/.ssh/id_ed25519
IdentitiesOnly yes
Долгое ожидание подключения
Если SSH долго не соединяется, попробуйте:
# Отключить DNS-резолвинг на сервере (ускоряет подключение)
# В /etc/ssh/sshd_config:
UseDNS no
Дополнительная безопасность SSH
Смена стандартного порта
Изменение порта с 22 на нестандартный снижает число автоматических атак:
# /etc/ssh/sshd_config
Port 2222
systemctl restart sshd
# Подключение: ssh -p 2222 user@server-ip
Если используется ufw - откройте новый порт до смены:
ufw allow 2222/tcp
ufw delete allow 22/tcp
Ограничение пользователей
# /etc/ssh/sshd_config
AllowUsers gameadmin deploy
DenyUsers root guest
Fail2ban для защиты от брутфорса
Даже с ключами полезно установить fail2ban для блокировки IP после неудачных попыток:
apt install fail2ban
systemctl enable --now fail2ban
Конфигурация /etc/fail2ban/jail.local:
[sshd]
enabled = true
port = 22
maxretry = 5
bantime = 3600
findtime = 600
Проверка активных SSH-сессий
# Кто сейчас подключён
who
w
# История входов
last -n 20
# Неудачные попытки входа
journalctl -u sshd | grep "Failed"
Работа с ключами на Windows
На Windows рекомендуется использовать Windows Terminal с встроенным OpenSSH (доступен с Windows 10 версии 1809):
# Проверить наличие OpenSSH
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
# Установить если нужно
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
После установки команды ssh, ssh-keygen, ssh-copy-id доступны в PowerShell и CMD. Ключи хранятся в C:\Users\username\.ssh\.
Альтернативы: PuTTY (использует формат .ppk, нужна конвертация) и MobaXterm (встроенный SSH-клиент).
Конвертация ключа PuTTY в OpenSSH
# Из ppk в OpenSSH (через puttygen на Linux)
puttygen mykey.ppk -O private-openssh -o ~/.ssh/id_rsa
# Или через ssh-keygen (OpenSSH 7.8+)
ssh-keygen -p -N "" -m pem -f mykey.ppk
Связанные материалы
Для управления файлами на сервере без SSH-клиента пригодится подключение по SFTP/FTP - можно использовать графические клиенты типа FileZilla. Если вы переносите готовый игровой сервер на хостинг, читайте перенос сервера на хостинг. Для подключения к базе данных сервера напрямую из консоли - смотрите подключение к MySQL.
Заключение
SSH-ключи - это обязательный минимум безопасности для любого игрового сервера. Генерация ключа занимает 30 секунд, копирование на сервер - ещё минуту, а в итоге вы получаете защиту от брутфорса и удобный вход без пароля. Главное правило: сначала убедитесь, что ключ работает, и только потом отключайте парольный вход. Файл ~/.ssh/config с алиасами значительно упрощает работу при управлении несколькими серверами. Настройте fail2ban как дополнительный уровень защиты.
Pterohost - хостинг игровых серверов с NVMe-хранилищем, защитой от DDoS и круглосуточной поддержкой. Подключайтесь по SSH-ключу с первой минуты после заказа. Промокод 4START даёт -20% на первый заказ. Заказать Minecraft хостинг