SSH: настройка, безопасность и продвинутые техники — полный гайд | SecureFlow

SSH: настройка, безопасность и продвинутые техники — полный гайд

Постер статьи

Содержание

Введение

SSH (Secure Shell) — это сетевой протокол, предназначенный для защищённого подключения к удалённым серверам. SSH шифрует передаваемые данные, обеспечивая безопасное выполнение команд, управление файлами и настройку серверов.

Если вы системный администратор, DevOps или просто работаете с Linux-серверами, знание SSH обязательно.

SSH-1 и SSH-2: В чём разница?

Существует две версии SSH: SSH-1 и SSH-2. Первая устарела и содержит множество уязвимостей, поэтому её использовать не рекомендуется. В современном мире применяется исключительно SSH-2.

Характеристика SSH-1 SSH-2
Год выпуска 1995 2006
Безопасность Уязвим Значительно безопаснее
Стандартизация Нет RFC 4251–4256 (официально стандартизирован)
Алгоритмы Устаревшие RSA, DSA, ECDSA, Ed25519 и др.
Поддержка Не рекомендуется Текущий стандарт
Мультисессии Нет Поддерживается

Преимущества использования SSH

Безопасность передачи данных

SSH обеспечивает надёжную защиту данных, используя шифрование, аутентификацию и хэширование. В отличие от Telnet или FTP, передача логинов, паролей и файлов происходит в зашифрованном виде.

Удалённое администрирование серверов

SSH позволяет администрировать серверы удалённо: запускать команды, настраивать службы, копировать файлы (scp, rsync) и даже монтировать удалённую файловую систему (sshfs).

Как установить SSH-сервер и клиент

Установка OpenSSH-сервера

Если команда sudo недоступна, выполните:

su -

а все последующие команды выполняйте без sudo.

  • Ubuntu / Debian
    sudo apt install -y openssh-server
    
  • CentOS / RedOS
    sudo dnf install -y openssh-server
    
  • ALT Linux
    sudo apt-get install openssh-server
    

Запуск службы SSH

sudo systemctl enable --now ssh # Ubuntu/Debian
sudo systemctl enable --now sshd # CentOS/ALT Linux/RedOS

Подключение по SSH с клиента

ssh user@ip_address

Как альтернативу на Windows можно использовать Putty

Настройка подключения по SSH-ключам

Генерация SSH-ключей

На клиентской машине (вашем ПК или ноутбуке) создаётся пара ключей: приватный (~/.ssh/id_rsa) и публичный (~/.ssh/id_rsa.pub).

ssh-keygen -t rsa -b 4096 -C "ваш_email"

Можно также использовать Ed25519:

ssh-keygen -t ed25519 -C "your_email@example.com"

Основные опции:

  • -t — тип ключа (rsa, ed25519, ecdsa)
  • -b — длина ключа в битах (для RSA — обычно 4096)
  • -C — комментарий (часто указывают email)
  • -f — путь для сохранения ключа (по умолчанию ~/.ssh/id_rsa или id_ed25519)

По умолчанию ключи сохраняются в ~/.ssh. Можно задать пароль на приватный ключ для дополнительной защиты.

Добавление публичного ключа на сервер

Чтобы авторизоваться по ключу, нужно передать публичный ключ на сервер.

Удобный способ — команда ssh-copy-id:

ssh-copy-id user@server_ip

Если этой команды нет, можно сделать вручную:

cat ~/.ssh/id_rsa.pub | ssh user@server_ip "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

Проверка подключения

ssh user@server_ip

Если всё настроено правильно — вы войдете без ввода пароля (или только введёте пароль от ключа, если он установлен).

Управление несколькими ключами

Если вы используете несколько ключей (например, для GitHub, разных серверов и т.д.), удобно настраивать их в ~/.ssh/config.

Host myserver
    HostName 192.168.1.100
    User serveradmin
    IdentityFile ~/.ssh/id_rsa_myserver

Host github.com
    User git
    IdentityFile ~/.ssh/id_ed25519_github

Полезные параметры:

  • Host — алиас (псевдоним) подключения.
  • HostName — IP-адрес или доменное имя сервера.
  • User — имя пользователя.
  • IdentityFile — путь к приватному ключу.
  • Port — порт подключения.
  • Compression — сжатие данных, полезно при медленном соединении (yes / no).
  • ForwardAgent — проброс агента SSH (используется, например, для Git на сервере от вашего имени).

Теперь можно подключаться по команде:

ssh myserver

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

Отключить вход по паролю

Откройте /etc/ssh/sshd_config (в ALT Linux: /etc/openssh/sshd_config) и укажите:

PasswordAuthentication no

Перезапустите SSH:

sudo systemctl restart ssh  # Ubuntu/Debian
sudo systemctl restart sshd # CentOS/ALT Linux/RedOS

Также проверьте /etc/ssh/sshd_config.d/, где могут быть дополнительные настройки.

Конфигурация SSH Сервера

Для настройки SSH сервера нужно открыть файл конфигураций по пути /etc/ssh/sshd_config на ALT Linux /etc/openssh/sshd_config.

Любые изменения требуют перезапуска службы:

sudo systemctl restart ssh  # Ubuntu/Debian
sudo systemctl restart sshd # CentOS/ALT Linux/RedOS

Основные параметры

  • Port 22 — порт, на котором слушает SSH-сервер. Рекомендуется сменить на нестандартный (например, 2222) для защиты от сканеров.
  • PermitRootLogin no — запрещает вход под root. Безопаснее входить под обычным пользователем и использовать sudo.
  • PasswordAuthentication no — отключает вход по паролю, оставляя только авторизацию по ключу (более безопасно).

Ограничение доступа

  • AllowUsers user1 user2 — список пользователей, которым разрешён вход.
  • AllowGroups admins — только пользователи из указанной группы могут подключаться.
  • DenyUsers hacker — запрет для конкретных пользователей.

Параметры безопасности

  • MaxAuthTries 3 — максимальное количество попыток аутентификации.
  • LoginGraceTime 30 — время (в секундах), отведённое на вход до разрыва соединения.

Расширенные возможности SSH

SSH Multiplexing

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

Основные опции в ~/.ssh/config:

Host *
    ControlMaster auto
    ControlPath ~/.ssh/cm-%r@%h:%p
    ControlPersist 10m

Преимущество:

  • Быстрое открытие новых окон/сессий без повторного TCP-рукопожатия и аутентификации.

Параметры

  • ControlMaster auto — автоматически использовать существующий мастер-канал или создавать новый.
  • ControlPath — путь к файлу сокета (можно указать шаблон с переменными %h, %r, %p).
  • ControlPersist 10m — держать мастер-канал открытым 10 минут после закрытия последней сессии.

Jump-hosts и ProxyJump

Позволяют строить цепочку SSH-подключений через один или несколько промежуточных серверов.

Конфигурация в ~/.ssh/config:

Host internal-server
    HostName 10.0.0.5
    User appuser
    ProxyJump bastion.example.com

Host bastion.example.com
    User gateway
    IdentityFile ~/.ssh/id_ed25519_bastion

ProxyJump (или коротко -J) автоматически создаёт «сквозное» соединение: вы заходите на bastion, а оттуда — на internal-server.

Для многоуровневой цепочки можно перечислять несколько хостов через запятую:

ssh -J bastion1,proxy2 internal-server

SSH-туннели

SSH-туннели (port forwarding) позволяют безопасно проксировать TCP-соединения через SSH.

Локальные туннели (-L)

Перенаправляют порт с клиентской машины на удалённый хост:

ssh -L 8080:internal-db:5432 user@bastion

После подключения все обращения к localhost:8080 попадут на internal-db:5432 через bastion.

Удалённые туннели (-R)

Перенаправляют порт с сервера на клиент:

ssh -R 9000:localhost:3000 user@remote-server

На remote-server:9000 будут доступны сервисы, запущенные на localhost:3000 локальной машины.

Динамические туннели (-D)

Создают SOCKS-прокси на клиенте:

ssh -D 1080 user@bastion

Настроив в браузере SOCKS-прокси на localhost:1080, вы получите доступ ко всем ресурсам, доступным для bastion.

Практические сценарии

  • Доступ к внутренним базам данных и веб-панелям без VPN.
  • Безопасная работа в публичных сетях (Wi-Fi-кафе) через собственный сервер.
  • Прозрачный прокси-доступ к корпоративным ресурсам.

Отладка и решение проблем

Диагностика соединения

Для понимания, что именно происходит при попытке установить SSH-соединение, используйте режим подробного вывода:

  • ssh -v user@host
    Показывает базовые шаги рукопожатия, алгоритмы, попытки аутентификации.
  • ssh -vv user@host
    Дополнительная детализация: этапы сессии, параметры соединения.
  • ssh -vvv user@host
    Максимальный уровень логирования: подробные сообщения об ошибках протокола, используемых ключах и т. д.

Как пользоваться

ssh -vvv user@server_ip 2>&1 | tee ssh-debug.log

Отправьте вывод в файл ssh-debug.log и внимательно проанализируйте первые появившиеся ERROR/WARNING.

Частые ошибки и способы их устранения

Проблемы с правами файлов

Ошибка: Permissions are too open.
Причина: Неправильные права на папку ~/.ssh или файлы внутри.
Решение:

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

Несоответствие алгоритмов

Ошибка: no matching key exchange method found или no hostkey alg
Причина: Клиент и сервер не имеют общих поддерживаемых алгоритмов для обмена ключами или хост-key.
Решение:
Временно добавить в команду нужный алгоритм:

ssh -o KexAlgorithms=+diffie-hellman-group1-sha1 user@host

Либо в /etc/ssh/sshd_config (сервер) и/или ~/.ssh/config (клиент) прописать современные и совместимые алгоритмы:

KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256

HostKeyAlgorithms ssh-ed25519,ssh-rsa

После правок перезапустите SSH-демон:

sudo systemctl restart ssh  # Ubuntu/Debian
sudo systemctl restart sshd # CentOS/ALT Linux/RedOS

Заключение

Вы только что прошли весь путь от базовых понятий SSH до продвинутых техник работы с туннелями и мультиплексированием. Теперь вы:

  1. Понимаете, как работают SSH-1 и SSH-2 и почему стоит использовать только SSH-2.
  2. Умеете устанавливать и настраивать OpenSSH-сервера и клиентов на разных дистрибутивах, включая Windows.
  3. Владеете генерацией и управлением ключами (RSA, Ed25519), знаете, как настроить ssh-copy-id и вручную добавить публичный ключ.
  4. Настраиваете удобные алиасы и параметры в ~/.ssh/config для работы с несколькими серверами и ключами.
  5. Повысили безопасность: отключили вход по паролю, ограничили доступ, задали нестандартный порт и запретили вход под root.
  6. Освоили отладку (ssh -vvv) и умеете диагностировать ошибки на основе логов.

Подпишитесь и оставайтесь в курсе

Хотите ещё больше гайдов по настройке серверов и безопасности Linux?