Установка и настройка SSH на Debian 13, 12, 11: подробное руководство

SSH (Secure Shell) — это стандартный протокол для безопасного удалённого управления серверами и передачей файлов. В отличие от Telnet или FTP, которые передают логины и пароли в открытом виде, SSH шифрует всё соединение. Это позволяет безопасно работать с сервером через интернет. Главные сложности для новичка: после установки нужно убедиться, что сервис запущен и слушает порт, а также правильно настроить фаервол, чтобы случайно не заблокировать себе доступ (особенно важно при удалённой настройке). Кроме того, в Debian по умолчанию установлен только клиент (openssh-client), а сервер (openssh-server) нужно ставить отдельно.

💡 В этом руководстве вы установите SSH-сервер на Debian, настроите базовую безопасность (смена порта, отключение root-логина, ключи), защитите сервер с помощью UFW и Fail2Ban, а также разберёте типичные проблемы.

В этой статье вы узнаете:

  • Как установить SSH-сервер на Debian
  • Как проверить, что сервис работает и слушает порт
  • Как настроить UFW для безопасного доступа по SSH
  • Как усилить безопасность SSH: сменить порт, отключить root-логин, разрешить только конкретных пользователей
  • Как настроить вход по SSH-ключам (без пароля)
  • Как защититься от брутфорса с помощью Fail2Ban
  • Как решить типичные проблемы: соединение refused, проблемы с ключами, блокировка Fail2Ban

Для кого: системные администраторы, владельцы VPS и домашних серверов, а также все, кто хочет настроить безопасный удалённый доступ к Debian 11, 12 или 13.

Оглавление

1. 🔧 Предварительные требования

Перед установкой убедитесь, что:

  • У вас установлена Debian 11, 12 или 13
  • Подключение к интернету стабильно
  • У вас есть права sudo

⚠️ ВАЖНО: Проверьте права sudo перед установкой

Если вы не уверены, есть ли у вашего пользователя права администратора, выполните в терминале:

sudo whoami

Что делает: sudo выполняет команду от имени суперпользователя, whoami показывает имя текущего пользователя.

Зачем: Эта команда проверяет, есть ли у вас права sudo. Без них вы не сможете устанавливать пакеты.

✅ Если выводит root — всё в порядке, можете продолжать.

❌ Если выводит is not in the sudoers file — сначала пройдите наше руководство по настройке sudo.

1.1 Обновление системы

Перед установкой всегда обновляйте список пакетов:

sudo apt update && sudo apt upgrade -y

Что делает:

  • sudo — права суперпользователя
  • apt update — обновляет список доступных пакетов из репозиториев
  • && — выполняет следующую команду только если предыдущая успешна
  • apt upgrade -y — обновляет все установленные пакеты до последних версий

Зачем: Это стандартная практика безопасности перед установкой нового ПО.

2. 📦 Установка SSH-сервера

В Debian по умолчанию установлен только SSH-клиент (openssh-client). Сервер нужно установить отдельно.

2.1 Установка пакета openssh-server

sudo apt install openssh-server -y

Что делает: Устанавливает SSH-сервер (демон sshd), который позволяет подключаться к вашей машине удалённо.

2.2 Проверка статуса пакетов

Убедимся, что все необходимые пакеты установлены корректно:

dpkg-query -W -f='${db:Status-Abbrev} ${binary:Package}\n' openssh-server openssh-client openssh-sftp-server

Что означает вывод:

  • ii — «installed ok installed» (пакет установлен корректно)

Ожидаемый вывод:

ii openssh-client
ii openssh-server
ii openssh-sftp-server

2.3 Проверка версии SSH (клиент, для информации)

ssh -V

Какие версии в разных Debian:

Версия DebianВерсия OpenSSH
Debian 13 (Trixie)10.0p1
Debian 12 (Bookworm)9.2p1
Debian 11 (Bullseye)8.4p1

2.4 Проверка, что сервис запущен

После установки SSH-сервер запускается автоматически.

systemctl status ssh

Ожидаемый вывод в терминале (сокращённо):

● ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/lib/systemd/system/ssh.service; enabled)
     Active: active (running)

Что важно:

  • Active: active (running) — сервис работает
  • enabled — запускается автоматически при загрузке системы

💡 Важно про имя сервиса: В Debian правильное имя сервиса — ssh.service. Команда systemctl status sshd тоже может работать (как алиас), но для единообразия используйте ssh.

2.5 Проверка, что SSH слушает порт

sudo ss -tlnp | grep sshd

Что делает: ss — утилита для просмотра сетевых соединений. -tlnp показывает TCP-порты в режиме прослушивания.

Ожидаемый вывод в терминале:

LISTEN 0      128          0.0.0.0:22        0.0.0.0:*    users:(("sshd",pid=1234,fd=3))
LISTEN 0      128             [::]:22           [::]:*    users:(("sshd",pid=1234,fd=4))

Что означает: Две строки — для IPv4 (0.0.0.0:22) и IPv6 ([::]:22). LISTEN означает, что порт открыт и ждёт подключений.

3. 🔥 Настройка фаервола (UFW) для SSH

⚠️ Критическое предупреждение: Если вы настраиваете SSH удалённо (по существующему SSH-соединению), этот раздел критически важен. Если вы запретите SSH в UFW до того, как включите фаервол, вы потеряете доступ к серверу. Порядок действий строгий.

3.1 Установка UFW (если не установлен)

sudo apt install ufw -y

3.2 Разрешить SSH в UFW (перед включением фаервола!)

sudo ufw allow 22/tcp

Что делает: Добавляет правило, разрешающее входящие подключения на TCP-порт 22 (стандартный порт SSH).

💡 Если вы планируете сменить порт SSH (например, на 2222): Сначала разрешите новый порт, потом меняйте порт в конфигурации SSH. Например:

sudo ufw allow 2222/tcp

3.3 Включение UFW

sudo ufw enable

Что делает: Активирует фаервол. Правила, добавленные ранее, начнут действовать.

3.4 Проверка правил

sudo ufw status

Ожидаемый вывод в терминале:

Status: active

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere
22/tcp (v6)                ALLOW       Anywhere (v6)

4. 🔐 Базовая настройка безопасности SSH

Конфигурационный файл SSH находится по пути /etc/ssh/sshd_config. Будьте внимательны: не перепутайте с ssh_config (это файл клиента).

4.1 Редактирование конфигурации

sudo nano /etc/ssh/sshd_config

4.2 Рекомендуемые изменения

НастройкаЗначениеЗачем
Port 22(сменить на любой
от 1024 до 65535)
Уменьшает количество атак
автоматических сканеров
PermitRootLoginnoЗапрещает прямой вход под
root (только через sudo)
PasswordAuthenticationnoОтключает вход по паролю
(только по ключам). Сначала
настройте ключи!
PubkeyAuthenticationyesВключает вход по SSH-ключам
AllowUsersuser1 user2Разрешает вход только
указанным пользователям
DenyUsersuser3Запрещает вход конкретным
пользователям

Как изменить порт: Найдите строку #Port 22, раскомментируйте и замените:

Port 2222

⚠️ Важно: Если вы меняете порт, не забудьте:

  1. Разрешить новый порт в UFW: sudo ufw allow 2222/tcp
  2. Перезапустить SSH: sudo systemctl restart ssh
  3. Не закрывайте текущую сессию, пока не проверите подключение на новом порту в другом окне терминала.

4.3 Применение изменений

После редактирования файла сохраните его (Ctrl+O, Enter, Ctrl+X) и перезапустите SSH:

sudo systemctl restart ssh

4.4 Проверка конфигурации на ошибки

Перед перезапуском SSH полезно проверить конфигурацию на синтаксические ошибки:

sudo /usr/sbin/sshd -t

Ожидаемый вывод: Пустой (нет новостей — хорошие новости). Если есть ошибка, она будет показана.

4.5 ☝️ Важные изменения в Debian 13 (Trixie)

Если вы обновляетесь с Debian 11 или 12 до Debian 13, учтите два изменения в OpenSSH:

SSH больше не читает ~/.pam_environment

Начиная с Debian 13, OpenSSH игнорирует файл ~/.pam_environment. Если вы использовали его для настройки переменных окружения в SSH-сессиях (например, PATH, JAVA_HOME), перенесите их в ~/.bash_profile или ~/.bashrc.

DSA-ключи больше не поддерживаются

Debian 13 полностью удалил поддержку DSA-ключей. Если вы всё ещё используете DSA-ключи для подключения к старым системам, сгенерируйте новые ключи Ed25519 до обновления:

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

Затем скопируйте публичный ключ на удалённые серверы с помощью ssh-copy-id.

5. 🔑 Настройка входа по SSH-ключам (без пароля)

Вход по ключам безопаснее, чем по паролю. Ключ невозможно подобрать перебором.

5.1 Генерация ключевой пары (на клиентской машине, откуда будете подключаться)

ssh-keygen -t ed25519 -C "ваш_email@example.com"

Что делает: Генерирует пару ключей (приватный и публичный). Алгоритм Ed25519 — современный и безопасный.

Что вас спросят:

  • Где сохранить ключ (нажмите Enter для пути по умолчанию ~/.ssh/id_ed25519)
  • Пароль для ключа (passphrase) — опционально, но рекомендуется. Если установить пароль, то при каждом использовании ключа его нужно будет вводить (или использовать ssh-agent).

Результат: В директории ~/.ssh/ появятся два файла:

  • id_ed25519приватный ключ (никому не давайте!)
  • id_ed25519.pubпубличный ключ (его нужно скопировать на сервер)

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

Способ А (рекомендуемый):

ssh-copy-id username@ip_address

Что делает: Копирует ваш публичный ключ в файл ~/.ssh/authorized_keys на сервере. Вы должны ввести пароль пользователя (пока парольный доступ ещё включён).

Способ Б (вручную): Если ssh-copy-id недоступен (например, на Windows), скопируйте содержимое ~/.ssh/id_ed25519.pub и добавьте его на сервере в файл ~/.ssh/authorized_keys.

5.3 Проверка входа по ключу

ssh username@ip_address

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

5.4 Отключение входа по паролю (после проверки ключей!)

⚠️ Только после того, как вы убедились, что вход по ключу работает, можно отключить вход по паролю.

sudo nano /etc/ssh/sshd_config

Найдите и измените:

PasswordAuthentication no

Сохраните и перезапустите SSH:

sudo systemctl restart ssh

⚠️ Важно: Не закрывайте текущую сессию, пока не проверите подключение в новом окне терминала. Если что-то пойдёт не так, у вас будет активное соединение, чтобы всё откатить.

6. 🛡️ Защита SSH с помощью Fail2Ban

Fail2Ban отслеживает неудачные попытки входа в логах и временно блокирует IP-адреса, с которых слишком много неудачных попыток. Это одна из важнейших мер защиты для любого SSH-сервера, доступного из интернета.

Полная инструкция по установке и настройке Fail2Ban (включая защиту SSH, Apache, Nginx, почтовых служб, управление банами и решение проблем) уже есть на нашем сайте:

👉 Установка и настройка Fail2Ban на Debian

Кратко для SSH: после установки Fail2Ban джейл sshd уже включён по умолчанию. Вы можете усилить его, добавив в /etc/fail2ban/jail.local:

[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
maxretry = 3
bantime = 1h
findtime = 10m

Что делают эти параметры:

  • maxretry = 3 — бан после 3 неудачных попыток (вместо 5 по умолчанию)
  • bantime = 1h — бан на 1 час (вместо 10 минут)
  • findtime = 10m — окно в 10 минут для подсчёта попыток

После изменений перезапустите Fail2Ban:

sudo systemctl restart fail2ban

⚠️ Важно: Если вы изменили порт SSH с 22 на другой, замените port = ssh на port = 2222 (укажите ваш порт).

7. ⚠️ Решение типичных проблем

7.1 Ошибка: Connection refused

Симптом: ssh username@ip выдаёт Connection refused.

Причина: SSH-сервер не запущен, или фаервол блокирует порт, или вы подключаетесь не к тому порту.

Пошаговое решение:

Шаг 1: На сервере проверьте статус SSH:

sudo systemctl status ssh

Если сервис не запущен — запустите:

sudo systemctl start ssh

Шаг 2: Проверьте, слушает ли SSH порт:

sudo ss -tlnp | grep sshd

Если нет вывода — проблема в самом SSH.

Шаг 3: Проверьте UFW:

sudo ufw status

Если порт 22 (или ваш кастомный порт) не разрешён — добавьте правило.

Шаг 4: Если вы меняли порт, подключайтесь с указанием порта:

ssh -p 2222 username@ip

7.2 Ошибка: Permission denied (publickey)

Симптом: Сервер не принимает ключ, хотя ключи настроены.

Причина: Неправильные права на файлы ~/.ssh/authorized_keys или ~/.ssh, или ключ не добавлен.

Пошаговое решение:

Шаг 1: Проверьте права на сервере:

ls -ld ~/.ssh
ls -l ~/.ssh/authorized_keys

Правильные права:

  • .sshdrwx------ (700)
  • authorized_keys-rw------- (600)

Исправление прав:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

Шаг 2: Убедитесь, что ваш публичный ключ есть в authorized_keys:

cat ~/.ssh/authorized_keys

Шаг 3: Проверьте, что в /etc/ssh/sshd_config включена аутентификация по ключам:

PubkeyAuthentication yes

7.3 Ошибка: Connection timed out

Симптом: SSH не отвечает, команда зависает и через время выдаёт Connection timed out.

Причина: Фаервол на сервере (или на стороне сети) блокирует пакеты, или сервер недоступен.

Пошаговое решение:

Шаг 1: Проверьте, что сервер вообще доступен по ICMP (ping):

ping ip_адрес_сервера

Если пинг не идёт — проблема с сетью или сервер выключен.

Шаг 2: Если пинг идёт, а SSH нет — скорее всего, UFW блокирует порт. Подключитесь к серверу другим способом (консоль VPS, физический доступ) и проверьте UFW.

7.4 IP заблокирован Fail2Ban

Симптом: Раньше подключались, а теперь вдруг не подключаетесь. В логах клиента — Connection refused или Connection closed.

Причина: Fail2Ban заблокировал ваш IP из-за слишком большого количества неудачных попыток.

Пошаговое решение:

Шаг 1: На сервере (или через другую сессию) проверьте, забанен ли ваш IP:

sudo fail2ban-client status sshd

Шаг 2: Разблокируйте IP:

sudo fail2ban-client set sshd unbanip ваш_ip_адрес

Шаг 3: Подождите, пока истечёт время бана (по умолчанию 10 минут).

7.5 Ошибка: REMOTE HOST IDENTIFICATION HAS CHANGED

Симптом: При подключении появляется сообщение, что ключ хоста изменился.

Причина: Вы переустановили сервер, или сервер сменил SSH-ключи, или вы подключаетесь к другому серверу с тем же IP.

Решение: Удалите старый ключ из known_hosts:

ssh-keygen -R ip_адрес_сервера

8. 🚪 Удаление SSH-сервера

Если вам больше не нужен удалённый доступ к этой машине:

sudo systemctl stop ssh
sudo apt remove openssh-server -y
sudo apt autoremove -y

Если вы хотите удалить и конфигурационные файлы:

sudo apt purge openssh-server -y

Проверка удаления:

dpkg-query -W -f='${db:Status-Abbrev} ${binary:Package}\n' openssh-server 2>/dev/null || echo "openssh-server не установлен"

Ожидаемый вывод: openssh-server не установлен

9. 📝 Чек-лист: всё готово к работе

  • [ ] Система обновлена (sudo apt update && sudo apt upgrade -y)
  • [ ] Пакет openssh-server установлен (проверка: dpkg-query показывает ii)
  • [ ] Сервис активен: systemctl is-active sshactive
  • [ ] SSH слушает порт: sudo ss -tlnp | grep sshd показывает LISTEN 0.0.0.0:22
  • [ ] UFW разрешает SSH: sudo ufw status показывает 22/tcp ALLOW
  • Сменён порт SSH и проверен в новом терминале
  • Настроен вход по ключам, отключён вход по паролю
  • Установлен и настроен Fail2Ban
  • [ ] Изменения в Debian 13 учтены (DSA-ключи, ~/.pam_environment)

Заключение

Вы установили и настроили SSH-сервер на Debian. Теперь вы можете удалённо управлять системой безопасно. Главные моменты, которые нужно запомнить: перед включением UFW обязательно разрешите SSH, иначе потеряете доступ. Если меняете порт — сначала разрешите новый порт в UFW, потом меняйте конфигурацию. И самое главное — прежде чем отключать вход по паролю, убедитесь, что вход по ключам работает. Если вы обновляетесь до Debian 13 — учтите изменения с DSA-ключами и ~/.pam_environment.

Что дальше:

  • Настройте SSH-алиасы в ~/.ssh/config для быстрого подключения к разным серверам
  • Изучите возможности SSH-туннелей (проброс портов, SSH-шлюзы)
  • Настройте регулярное обновление системы через unattended-upgrades
  • Для дополнительной безопасности рассмотрите использование fail2ban с кастомными джейлами (например, для защиты веб-форм)

Связанные статьи: