Обзор
SSH (Secure Shell) — это стандартный сетевой протокол, необходимый для удаленного управления серверами Linux. В этой статье мы шаг за шагом рассмотрим настройку сервера OpenSSH в среде Ubuntu, аутентификацию по открытым ключам без пароля, проброс портов (SSH port forwarding) для практических сетевых задач, а также ключевые рекомендации по усилению безопасности.
1. Установка сервера OpenSSH и активация службы
Чтобы предоставить службу удаленного доступа в системе Ubuntu, обновите список пакетов до актуального состояния и установите пакет openssh-server.

Выполните команду systemctl enable --now ssh, чтобы включить автозапуск службы SSH при загрузке системы и запустить ее немедленно.

Убедитесь, что демон службы SSH (sshd) находится в активном состоянии (active (running)) и работает корректно.

Выполните команду ss -tulpn | grep :22, чтобы проверить, ожидает ли стандартный порт SSH 22 входящие сетевые подключения в состоянии прослушивания (LISTEN).

2. Создание и регистрация пары SSH-ключей для входа без пароля
Создайте каталог ~/.ssh для безопасного хранения файлов SSH-ключей и установите права доступа 700, чтобы доступ имел только владелец.

Выполните команду test -f ~/.ssh/id_ed25519 || ssh-keygen -t ed25519 -N '' -f ~/.ssh/id_ed25519, чтобы создать новую пару ключей на основе надежного и производительного алгоритма Ed25519, если она еще не создана.
В результате выполнения команды можно убедиться, что закрытый ключ (id_ed25519) и открытый ключ (id_ed25519.pub) успешно созданы.

Добавьте содержимое созданного открытого ключа в файл списка разрешенных ключей авторизации ~/.ssh/authorized_keys.

Ограничьте права доступа к файлу authorized_keys, установив значение 600, чтобы обеспечить безопасность списка авторизованных ключей и пройти строгую проверку прав доступа демоном SSH.

Попробуйте подключиться к локальному loopback-адресу (127.0.0.1), указав созданный закрытый ключ Ed25519, и проверьте, корректно ли работает аутентификация по ключу.
В выводе команды отобразится сообщение об успешном локальном входе по ключу без запроса пароля.

3. Практическое сетевое туннелирование: проброс портов через SSH
Обновите список пакетов и установите пакеты curl и python3 для запуска веб-сервера и тестирования HTTP-запросов.

Выполните команду mkdir -p /tmp/webroot && echo '<h1>SSH Tunnel Test OK</h1>' > /tmp/webroot/index.html, чтобы создать каталог веб-документов для проверки проброса портов и подготовить тестовый HTML-файл.

Выполните команду python3 -m http.server 8080 --directory /tmp/webroot >/dev/null 2>&1 &, чтобы запустить в фоновом режиме простой веб-сервер на порту 8080, выступающий в роли внутренней службы.

Запустите в фоновом режиме локальный проброс портов, перенаправляющий входящие запросы с локального порта 9090 на порт 8080 целевого сервера через защищенный SSH-туннель.
После выполнения команды туннель проброса портов безопасно создается в фоновом режиме, не занимая сеанс терминала.

Отправьте HTTP-запрос на локальный порт 9090, проброшенный через SSH-туннель, чтобы проверить корректность перенаправления соединения на внутренний веб-сервер.
В ответе отобразится содержимое <h1>SSH Tunnel Test OK</h1> от внутреннего веб-сервера на порту 8080, что подтверждает безупречную работу проброса портов.

После завершения тестирования проброса портов выполните команду pkill -f 'http.server 8080', чтобы безопасно завершить фоновый процесс тестового веб-сервера.

4. Настройка усиления безопасности SSH-сервера на практике (sshd_config)
Создайте резервную копию файла конфигурации с помощью команды sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak, чтобы сохранить исходные настройки на случай непредвиденных сбоев при их изменении.

Для усиления безопасности выполните команду sudo sed -i 's/^#*PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config, чтобы полностью заблокировать прямой удаленный вход под учетной записью root.

Выполните команду sudo sshd -t, чтобы заранее безопасно проверить отредактированный файл конфигурации SSH-сервера на наличие синтаксических ошибок и опечаток.
Отсутствие сообщений об ошибках после выполнения команды подтверждает корректность синтаксиса конфигурации.

Выполните команду grep -E '^(PermitRootLogin|PasswordAuthentication)' /etc/ssh/sshd_config || echo '설정 검증 완료', чтобы убедиться, что параметр блокировки входа root (PermitRootLogin no) применился правильно.
В результате выполнения команды строка PermitRootLogin no будет успешно найдена, что подтверждает применение настроек безопасности.

В этом материале мы разобрали ключевые практические аспекты работы с SSH в Ubuntu: от базового подключения и проброса портов до обязательных настроек безопасности.
Рекомендуем последовательно применить описанные правила безопасности, чтобы создать надежную и эффективную среду управления сервером.