Pterohost docs

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.

АлгоритмРазмер ключаРекомендация
Ed25519256 битПредпочтительный вариант
RSA4096 битСовместимость со старыми системами
ECDSA256-521 битДопустим, но Ed25519 лучше
DSA1024 битУстарел, не использовать

Команда генерации

На локальной машине (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):

  1. Посмотрите содержимое публичного ключа:
cat ~/.ssh/id_ed25519.pub

Вывод выглядит так (одна строка):

ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBt8... my-game-server
  1. Подключитесь к серверу по паролю и выполните:
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

ПараметрОписание
HostNameIP или 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 хостинг