Установка и настройка 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), который позволяет подключаться к вашей машине удалённо.

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

ssh -V

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

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

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

После установки 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 — что он запускается автоматически при загрузке системы.

2.3 Проверка, что 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

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 13, 12, 11: подробное руководство

Кратко для 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

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

  • [ ] SSH-сервер установлен (sudo apt install openssh-server)
  • [ ] Сервис активен (systemctl status ssh показывает active (running))
  • [ ] SSH слушает порт (sudo ss -tlnp | grep sshd показывает LISTEN)
  • [ ] UFW разрешает SSH (sudo ufw status показывает ALLOW для порта 22 или кастомного порта)
  • Сменён порт SSH, и подключение на новом порту работает
  • Вход по паролю отключён, вход по ключам работает
  • Fail2Ban установлен и активен (sudo fail2ban-client status sshd)

Заключение

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

Что дальше:

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