Настраиваем SSH-доступ с использованием ключей в Ubuntu 22.04

Настраиваем SSH-доступ с использованием ключей в Ubuntu 22.04

Настройка SSH-доступа по ключам в Ubuntu 22.04 — обязательный шаг для защиты VPS или выделенного сервера от атак. Из нашей статьи вы узнаете, как заменить пароли на криптографические ключи с нужными параметрами, как настроить подключение на стороне сервера и клиента и как подключить двухфакторную аутентификацию.

Ubuntu логотип

Протокол SSH (Secure Shell) давно стал стандартом для безопасного подключения к Linux-серверам, но выбор метода аутентификации вызывает вопросы. Привычный вход по паролю хоть и кажется интуитивно понятным, но уже не соответствует современным требованиям информационной безопасности. Пароли уязвимы по своей природе: их можно подобрать брутфорсом, перехватить при передаче или случайно раскрыть.

Аутентификация по ключу предлагает принципиально иной подход — вместо запоминаемых символов используются криптографические ключи, работающие на основе асимметричного шифрования. Публичный ключ, размещённый на сервере, выступает как «замок», а приватный, хранящийся у пользователя, — как уникальный «ключ» к нему. Даже если злоумышленник получит публичную часть, он не сможет восстановить приватную.

Из этой статьи вы узнаете, как настроить SSH-доступ с ключами в Ubuntu 22.04 и усилить защиту сервера. Мы разберём не только базовые шаги, но и тонкости — от выбора алгоритмов шифрования до интеграции с Google Authenticator.

Аренда VPS/VDS от 219 руб/месяц

Преимущества VPS в AdminVPS:

✓ Бесплатное администрирование

✓ Только быстрые NVMe-диски

✓ Защита от DDoS-атак

✓ Быстрая техподдержка

Аренда VPS/VDS виртуального сервера от AdminVPS — это прозрачная и честная услуга с доступной ценой

Генерируем SSH-ключи на Ubuntu

Начнём с создания ключевой пары на клиентской машине. Команда ssh-keygen создаст пару ключей — публичный (открытый) и приватный. Разберёмся, какие дополнительные флаги можно указать, чтобы получить ключи с нужными параметрами.

Вот список:

  • -t задаёт тип ключа или криптографический алгоритм. Для Ubuntu 22.04 актуальны алгоритмы Ed25519 и RSA 4096 бит. Первый предпочтительнее благодаря меньшему размеру ключа при сопоставимой криптостойкости (256 бит против 4096 у RSA).
  • Флаг -a 100 указывает количество раундов формирования ключа (KDF), повышая устойчивость к брутфорсу. Чем выше значение, тем больше вычислительных ресурсов потребуется для подбора методом brute-force. Рекомендуем устанавливать от 100 до 500.
  •  -C "комментарий" добавляет произвольный комментарий к публичному ключу. Вы можете указать его назначение, контактную или любую другую информацию. Комментарий будет виден в файле ~/.ssh/id_ed25519.pub после основного содержимого.

Команда выполняется с правами суперпользователя:

ssh-keygen -t ed25519 -a 100 -f ~/.ssh/id_ed25519 -C "комментарий для идентификации"

Для устаревших систем, где Ed25519 не поддерживается, выберите RSA 4096 бит:

ssh-keygen -t rsa -b 4096 -a 100 -f ~/.ssh/id_rsa -C "резервный RSA-4096"

Будут созданы два файла ключей: id_ed25519 (приватный) и id_ed25519.pub (публичный) или id_rsa и id_rsa.pub.

В процессе вы сможете задать парольную фразу для доступа к ключам. По умолчанию оба они сохраняются в ~/.ssh/. Обратите внимание: права доступа к директории должны быть 700, а к файлам приватных ключей — 600. Проверьте это командой:

chmod 700 ~/.ssh && chmod 600 ~/.ssh/id_ed25519 ~/.ssh/id_rsa

Здесь:

  • 700 — полный доступ только для владельца директории (чтение, запись, выполнение);
  • 600 — только владелец может читать и записывать файл ключа, что важно для безопасности: при более широких правах OpenSSH откажется использовать приватный ключ.

Передача ключа на сервер

Перенесём публичный ключ на сервер. Классический способ — с помощью утилиты ssh-copy-id. На клиентском устройстве:

ssh-copy-id -i ~/.ssh/id_*.pub user@host

Вместо id_*.pub и user@host введите ваши данные. В результате ключ будет записан в файл на сервере:

/root/.ssh/authorized_keys

То же самое можно сделать вручную — чтобы разобраться с процессом:

cat ~/.ssh/id_ed25519.pub | ssh user@host "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

Обратите внимание на последовательность команд в кавычках:

  1. создание .ssh с правильными правами;
  2. добавление ключа в authorized_keys;
  3. установка прав на сам файл.

Если права на authorized_keys шире, чем 600, OpenSSH проигнорирует ключи из этого файла! Поэтому обязательно проверьте их:

stat -c "%a %n" ~/.ssh/authorized_keys   # Должно быть 600

Конфигурация sshd на сервере

Теперь настроим sshd на сервере, чтобы мы могли подключаться по ssh с ключом, а не паролем. Основной файл настроек:

/etc/ssh/sshd_config

Нужно открыть его и изменить значение некоторых директив. Помните, что после любых изменений нужно перезагружать демон и проверять, есть ли ошибки:

systemctl reload sshd
systemctl status sshd

Рассмотрим ключевые параметры конфига:

Port 2222. Изменение стандартного порта 22 на нестандартный (например, 2222) снижает число автоматических атак, так как боты сканируют порт 22 по умолчанию. После изменения порта обновите настройки файрвола:

sudo ufw allow 2222/tcp
sudo ufw reload

Здесь:

  • PermitRootLogin prohibit-password — запрет входа пользователя root по паролю. Перед применением убедитесь, что в системе есть альтернативный пользователь с правом sudo.
  • PasswordAuthentication no — полное отключение парольной аутентификации; оставьте yes, пока не протестируете вход с ключом.
  • PubkeyAuthentication yes — включение аутентификации по ключу.
  • AuthenticationMethods publickey — перечислены методы аутентификации. Здесь — только ключи. Чтобы добавить 2FA, измените значение на publickey keyboard-interactive.
  • AllowUsers deploy admin — явное указание разрешённых пользователей.
  • ClientAliveInterval 300 и ClientAliveCountMax 3 — сервер будет посылать keepalive-запросы каждые 5 минут (указано в секундах) — всего будет три такие попытки, после чего неактивные сессии будут разорваны.
  • KexAlgorithms curve25519-sha256 — современные алгоритмы обмена ключами.
  • Ciphers chacha20-poly1305@openssh.com — приоритетный шифр.

Перед отключением парольной аутентификации убедитесь, что ключ работает:

ssh -i ~/.ssh/id_ed25519 user@host

И только если вы успешно вошли — меняйте значение PasswordAuthentication.

Особенности настройки ssh на Ubuntu 22.04:

  • По умолчанию используется OpenSSH 8.9p1.
  • Поддержка FIDO/U2F-ключей через ssh-keygen -t ed25519-sk.
  • Включён механизм systemd для управления сессиями.

Как усилить защиту с двухфакторной аутентификацией

Комбинируйте ключи с Google Authenticator. Установите пакет аутентификатора:

sudo apt install libpam-google-authenticator

Настройте для пользователя:

google-authenticator -t -d -f -r 3 -R 30 -w 3

Флаги:

  • -t — использовать Time-based OTP (пароли, зависящие от времени);
  • -d — отключить кеширование успешных аутентификаций;
  • -f — принудительно сохранить настройки без подтверждения;
  • -r 3 — разрешить 3 попытки ввода кода;
  • -R 30 — окно времени для попыток — 30 секунд;
  • -w 3 — создать 3 резервных кода для восстановления.

Не забудьте изменить значение:

AuthenticationMethods в /etc/ssh/sshd_config

А в файл:

/etc/pam.d/sshd

добавьте:

auth required pam_google_authenticator.so nullok

Как подключиться по ssh с ключом

Для соединения с сервером нужно знать:

  • IP-адрес или доменное имя хоста,
  • имя пользователя,
  • путь к приватному ключу,
  • порт, если он нестандартный.

Команда:

ssh -i ~/.ssh/id_ed25519 username@host -p 2222

Где:

  • -i — путь к приватному ключу (по умолчанию SSH ищет id_rsa или id_ed25519 в ~/.ssh/);
  • username@host — логин учётной записи на сервере и хост;
  • -p — порт сервера (если изменён со стандартного 22).

Тонкая настройка клиента ssh

Чтобы подключаться было проще, создайте и настройте конфиг клиента ~/.ssh/config с содержимым:

Host myserver
    HostName 192.168.1.10
    User deploy
    Port 2222
    IdentityFile ~/.ssh/id_ed25519
    IdentitiesOnly yes
    ServerAliveInterval 60
    Compression yes
    ControlMaster auto
    ControlPath ~/.ssh/control-%r@%h:%p
    ControlPersist 1h
    LogLevel ERROR

Эти параметры:

  • IdentitiesOnly yes — запрещает использовать ключи из SSH-агента, кроме явно указанных.
  • ServerAliveInterval — отправляет keepalive-пакеты каждые 60 секунд для поддержания соединения.
  • Compression — включает сжатие данных.
  • Control* — используют мультиплексирование сессий.
  • LogLevel ERROR — скрывает информационные сообщения, оставляя только ошибки.

Теперь подключение выполняется одной командой:

ssh myserver

Типичные проблемы и их решение

Ошибка «Permission denied (publickey)». Такая ошибка возникает, если сервер не принимает ключи для аутентификации. Проверьте следующее:

Права доступа к директории и ключам:

chmod 700 ~/.ssh chmod 600 ~/.ssh/id_*

Соответствие ключей: приватный ключ на клиенте должен соответствовать публичному на сервере:

~/.ssh/authorized_keys

SELinux/AppArmor: убедитесь, что политика не блокирует доступ:

sudo aa-status | grep ssh

Медленное подключение по SSH

Если соединение устанавливается с задержкой:

Отключите проверку DNS в sshd_config:

UseDNS no

Используйте только IPv4 (если IPv6 не используется):

ssh -4 user@host

Ключ не принимается после обновления системы

После обновления Ubuntu может измениться версия OpenSSH, и старые типы ключей больше не поддерживаются:

Для обратной совместимости добавьте в sshd_config:

PubkeyAcceptedKeyTypes +ssh-rsa

Это позволит принимать ключи старого формата RSA.

Убедитесь, что используемый алгоритм поддерживается текущей версией OpenSSH.

Рекомендации по безопасности

  • Регулярно меняйте ключи: установите cron-задачу для напоминания о смене каждые 6 месяцев.
  • Используйте аппаратные токены: ключи, хранящиеся на устройствах вроде YubiKey или OnlyKey, невозможно извлечь программно.
  • Сегментируйте доступ: создавайте разные ключи для производственных серверов, резервных копий, CI/CD-систем.
  • Позаботьтесь об аварийном доступе: создайте резервный ключ и храните его в зашифрованном виде (например, с помощью age или gpg).

Заключение

Вы настроили вход по SSH-ключу на Ubuntu 22.04 и теперь ваш сервер надёжно защищён. Но не оставляйте заботу о безопасности: регулярно обновляйте OpenSSH, мониторьте CVE-уязвимости и используйте инструменты для проверки конфигурации.

Аренда VPS/VDS от ₽449/месяц

✓ Тарифные планы VPS под любые потребности.

✓ Безлимитный трафик на всех тарифах.

✓ Дата-центры в Германии, Нидерландах и других локациях.

Наши технические специалисты помогут вам определиться с конфигурацией и настроят ваш VPN-сервер под ключ, если это будет необходимо.

Читайте в блоге:

Loading spinner
0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

VPN на VPS-сервере

Узнайте, как создать собственный VPN на VPS-сервере для защиты ваших конфиденциальных данных!

Что будем искать? Например,VPS-сервер

Мы в социальных сетях