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) | Уменьшает количество атак автоматических сканеров |
PermitRootLogin | no | Запрещает прямой вход под root (только через sudo) |
PasswordAuthentication | no | Отключает вход по паролю (только по ключам). Сначала настройте ключи! |
PubkeyAuthentication | yes | Включает вход по SSH-ключам |
AllowUsers | user1 user2 | Разрешает вход только указанным пользователям |
DenyUsers | user3 | Запрещает вход конкретным пользователям |
Как изменить порт: Найдите строку #Port 22, раскомментируйте и замените:
Port 2222
⚠️ Важно: Если вы меняете порт, не забудьте:
- Разрешить новый порт в UFW (
sudo ufw allow 2222/tcp) - Перезапустить SSH (
sudo systemctl restart ssh) - Не закрывайте текущую сессию, пока не проверите подключение на новом порту в другом окне терминала.
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
✅ Правильные права:
.ssh—drwx------(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с кастомными джеилами (например, для защиты веб-форм)