Найти в Дзене
Евгений Лощаков

Настройка удалённого входа через SSH на платформе Debian

SSH (Secure Shell) — это криптографический сетевой протокол для безопасного удалённого управления операционными системами и туннелирования TCP-соединений. Архитектура клиент-сервер: Процесс установления соединения: Системное администрирование: Передача файлов: Туннелирование и проброс портов: Автоматизация: Безопасность: Функциональность: # Проверка, установлен ли SSH-сервер systemctl status ssh # Поиск установленных пакетов SSH dpkg -l | grep ssh # Обновление списка пакетов sudo apt update # Установка OpenSSH-сервера sudo apt install -y openssh-server # Проверка установки sudo systemctl status ssh # Установка SSH-клиента (обычно уже установлен) sudo apt install -y openssh-client # Проверка версии SSH ssh -V Расположение конфигурации: sudo nano /etc/ssh/sshd_config # ==================== ОСНОВНЫЕ НАСТРОЙКИ ==================== # Порт SSH (меняем со стандартного 22) Port 2222 # Адреса для прослушивания ListenAddress 0.0.0.0 ListenAddress :: # ==================== АУТЕНТИФИКАЦИЯ ========
Оглавление

🔹 Теоретическая часть: Основы SSH

1.1. Что такое SSH?

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

Историческая справка:

  • 1995 год — создан Туомо Тайниненом для замены небезопасных telnet, rlogin, rsh
  • SSH-1 — первая версия (имела уязвимости)
  • SSH-2 — текущая версия (стандарт с 2006 года)
  • OpenSSH — самая популярная реализация с открытым исходным кодом

1.2. Принцип работы SSH

Архитектура клиент-сервер:

  • SSH-сервер — принимает подключения (порт 22)
  • SSH-клиент — устанавливает соединение
  • Шифрование — все данные передаются в зашифрованном виде

Процесс установления соединения:

  1. Клиент инициирует TCP-соединение
  2. Сервер представляет свой открытый ключ
  3. Клиент проверяет подлинность сервера
  4. Стороны согласовывают параметры шифрования
  5. Устанавливается безопасный канал

1.3. Области применения SSH

Системное администрирование:

  • Удалённое управление серверами
  • Выполнение команд и скриптов
  • Мониторинг системных ресурсов
  • Управление сетевым оборудованием

Передача файлов:

  • SCP (Secure Copy) — копирование файлов
  • SFTP (SSH File Transfer Protocol) — безопасный FTP
  • RSYNC over SSH — синхронизация файлов

Туннелирование и проброс портов:

  • Доступ к внутренним службам
  • Обход firewall ограничений
  • Создание VPN-подобных соединений

Автоматизация:

  • Беспарольный вход для скриптов
  • Резервное копирование
  • DevOps и CI/CD процессы

1.4. Преимущества SSH

Безопасность:

  • ✅ Сильное шифрование (AES, ChaCha20)
  • ✅ Аутентификация по ключам
  • ✅ Защита от перехвата трафика
  • ✅ Проверка целостности данных

Функциональность:

  • ✅ Сжатие данных для ускорения
  • ✅ Проброс X11-приложений
  • ✅ Мультиплексирование соединений
  • ✅ Агент пересылки ключей

🔹 Практическая часть: Установка и настройка SSH на Debian

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

2.1. Проверка установленного SSH

# Проверка, установлен ли SSH-сервер

systemctl status ssh

# Поиск установленных пакетов SSH

dpkg -l | grep ssh

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

# Обновление списка пакетов

sudo apt update

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

sudo apt install -y openssh-server

# Проверка установки

sudo systemctl status ssh

2.3. Установка SSH-клиента

# Установка SSH-клиента (обычно уже установлен)

sudo apt install -y openssh-client

# Проверка версии SSH

ssh -V

-2

🔹 3. Базовая настройка SSH-сервера

3.1. Основной конфигурационный файл

Расположение конфигурации:

sudo nano /etc/ssh/sshd_config

3.2. Безопасная базовая конфигурация

# ==================== ОСНОВНЫЕ НАСТРОЙКИ ====================

# Порт SSH (меняем со стандартного 22)

Port 2222

# Адреса для прослушивания

ListenAddress 0.0.0.0

ListenAddress ::

# ==================== АУТЕНТИФИКАЦИЯ ====================

# Разрешить аутентификацию по паролю (временно)

PasswordAuthentication yes

# Разрешить аутентификацию по ключам

PubkeyAuthentication yes

# Запретить вход под root

PermitRootLogin no

# Максимальное количество попыток аутентификации

MaxAuthTries 3

# Время ожидания аутентификации

LoginGraceTime 60

# ==================== ПОЛЬЗОВАТЕЛИ И ГРУППЫ ====================

# Разрешенные пользователи

AllowUsers admin deploy

# Запрещенные пользователи

DenyUsers test guest

# Разрешенные группы

AllowGroups ssh-users

# ==================== БЕЗОПАСНОСТЬ ====================

# Протокол SSH (только SSH2)

Protocol 2

# Отключение ненужных методов аутентификации

ChallengeResponseAuthentication no

KerberosAuthentication no

GSSAPIAuthentication no

# Отключение X11 форвардинга (если не нужен)

X11Forwarding no

# ==================== ДОПОЛНИТЕЛЬНЫЕ НАСТРОЙКИ ====================

# Максимальное количество сессий

MaxSessions 10

# Разрешить проброс TCP

AllowTcpForwarding no

# Сообщение при входе

Banner /etc/ssh/banner

# Логирование

SyslogFacility AUTH

LogLevel INFO

3.3. Создание файла banner

Создаём файл banner, в котором будет прописано необходимое содержимое.

sudo nano /etc/ssh/banner

Содержание banner:

╔═══════════════════════════════════════════════╗

║ ПРЕДУПРЕЖДЕНИЕ ║

║ ║

║ Это частная компьютерная система. ║

║ Несанкционированный доступ запрещен. ║

║ Все действия логируются. ║

║ ║

║ Сервер: $(hostname) ║

║ Время: $(date) ║

║ ║

╚═══════════════════════════════════════════════╝

Установка прав:

sudo chmod 644 /etc/ssh/banner

🔹 4. Пояснение параметров конфигурации

4.1. Параметры сети и подключения

-3

4.2. Параметры аутентификации

Параметр: PasswordAuthentication

Значение yes/no

Описание Аутентификация по паролю

Рекомендация no (после настройки ключей)

Параметр: PubkeyAuthentication

Значение yes/no

Описание Аутентификация по ключам

Рекомендация yes (основной метод)

Параметр: PermitRootLogin

Значение no

Описание Запрет входа root

Рекомендация no (всегда запрещать)

Параметр: MaxAuthTries

Значение 3

Описание Максимум попыток входа

Рекомендация 3-5 для защиты от брутфорса

4.3. Параметры пользователей

-4

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

-5

🔹 5. Настройка аутентификации по ключам

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

# Генерация ключа RSA 4096 бит

ssh-keygen -t rsa -b 4096 -C "admin@$(hostname)" -f ~/.ssh/id_rsa

# Генерация ключа Ed25519 (более современный)

ssh-keygen -t ed25519 -C "admin@$(hostname)" -f ~/.ssh/id_ed25519

# Просмотр сгенерированных ключей

ls -la ~/.ssh/

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

Метод 1: Использование ssh-copy-id

ssh-copy-id -i ~/.ssh/id_rsa.pub admin@server-ip -p 2222

Метод 2: Ручное копирование

# На клиенте - показать публичный ключ

cat ~/.ssh/id_rsa.pub

# На сервере - добавить ключ в authorized_keys

mkdir -p ~/.ssh

chmod 700 ~/.ssh

echo "публичный_ключ_здесь" >> ~/.ssh/authorized_keys

chmod 600 ~/.ssh/authorized_keys

5.3. Настройка прав доступа

Проверка прав на сервере:

# Правильные права для .ssh директории

chmod 700 ~/.ssh

chmod 600 ~/.ssh/authorized_keys

chmod 600 ~/.ssh/config

chmod 644 ~/.ssh/known_hosts

# Владелец должен быть пользователем

chown -R $USER:$USER ~/.ssh

🔹 6. Запуск и управление службой SSH

6.1. Проверка конфигурации

# Проверка синтаксиса конфигурации

sudo sshd -t

# Подробная проверка с выводом

sudo sshd -T

6.2. Управление службой

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

sudo systemctl start ssh

# Остановка службы

sudo systemctl stop ssh

# Перезапуск службы

sudo systemctl restart ssh

# Перезагрузка конфигурации (без разрыва существующих соединений)

sudo systemctl reload ssh

# Включение автозапуска

sudo systemctl enable ssh

# Проверка статуса

sudo systemctl status ssh

6.3. Настройка firewall

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

sudo apt install -y ufw

# Разрешение SSH на кастомном порту

sudo ufw allow 2222/tcp

# Запрет стандартного порта SSH

sudo ufw deny 22/tcp

# Включение firewall

sudo ufw enable

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

sudo ufw status verbose

🔹 7. Тестирование подключения

7.1. Подключение с клиента

Базовое подключение:

ssh admin@server-ip -p 2222

Подключение с указанием ключа:

ssh -i ~/.ssh/id_rsa admin@server-ip -p 2222

Подключение с дополнительными опциями:

ssh -o ConnectTimeout=10 -o ServerAliveInterval=60 admin@server-ip -p 2222

7.2. Отладка подключения

Подробный вывод:

ssh -vvv admin@server-ip -p 2222

Тестирование конкретного ключа:

ssh -i ~/.ssh/id_rsa -o IdentitiesOnly=yes admin@server-ip -p 2222

🔹 8. Расширенные настройки безопасности

8.1. Настройка fail2ban для защиты от брутфорса

# Установка fail2ban

sudo apt install -y fail2ban

# Создание конфигурации для SSH

sudo nano /etc/fail2ban/jail.local

Конфигурация fail2ban:

[sshd]

enabled = true

port = 2222

filter = sshd

logpath = /var/log/auth.log

maxretry = 3

bantime = 3600

findtime = 600

Запуск fail2ban

sudo systemctl enable fail2ban

sudo systemctl start fail2ban

# Проверка статуса

sudo fail2ban-client status sshd

8.2. Двухфакторная аутентификация (2FA)

# Установка Google Authenticator

sudo apt install -y libpam-google-authenticator

# Настройка для пользователя

google-authenticator

# Настройка PAM

sudo nano /etc/pam.d/sshd

Добавить в конец файла:

auth required pam_google_authenticator.so

Настройка SSH для 2FA:

sudo nano /etc/ssh/sshd_config

# Включение 2FA

AuthenticationMethods publickey,keyboard-interactive

8.3. Ограничение по IP-адресам

# Разрешение доступа только с определенных подсетей

echo "sshd: 192.168.1.0/24" >> /etc/hosts.allow

echo "sshd: ALL" >> /etc/hosts.deny

🔹 9. Полезные команды и скрипты

9.1. Мониторинг SSH-сессий

# Текущие подключения

sudo netstat -tulpn | grep :2222

sudo ss -tulpn | grep :2222

# Активные сессии

sudo who

sudo w

# Логи SSH

sudo tail -f /var/log/auth.log | grep sshd

9.2. Скрипт для автоматической настройки SSH

#!/bin/bash

# setup-secure-ssh.sh

SSH_PORT=${1:-2222}

ALLOW_USERS="admin"

echo "Настройка безопасного SSH..."

# Резервное копирование конфигурации

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup.$(date +%Y%m%d)

# Базовая безопасная конфигурация

sudo tee /etc/ssh/sshd_config > /dev/null << EOF

Port $SSH_PORT

ListenAddress 0.0.0.0

Protocol 2

HostKey /etc/ssh/ssh_host_rsa_key

HostKey /etc/ssh/ssh_host_ed25519_key

# Аутентификация

PubkeyAuthentication yes

PasswordAuthentication no

PermitRootLogin no

MaxAuthTries 3

LoginGraceTime 60

# Пользователи

AllowUsers $ALLOW_USERS

# Безопасность

X11Forwarding no

PrintMotd no

PrintLastLog yes

TCPKeepAlive yes

ClientAliveInterval 300

ClientAliveCountMax 3

# Логирование

SyslogFacility AUTH

LogLevel INFO

EOF

# Перезапуск SSH

sudo systemctl restart ssh

sudo systemctl enable ssh

echo "SSH настроен на порту $SSH_PORT"

echo "Разрешены пользователи: $ALLOW_USERS"

9.3. Настройка клиента SSH

Файл конфигурации клиента:

nano ~/.ssh/config

Пример конфигурации:

-6

🔹 10. Устранение неисправностей

10.1. Частые проблемы и решения

-7

10.2. Команды диагностики

# Проверка открытых портов

sudo netstat -tulpn | grep ssh

sudo ss -tulpn | grep ssh

# Проверка логов в реальном времени

sudo journalctl -u ssh -f

# Проверка брандмауэра

sudo ufw status

# Тестирование подключения локально

ssh localhost -p 2222

🔹 Заключение

Итоги настройки:

Установлен и настроен безопасный SSH-сервер
Настроена аутентификация по ключам вместо паролей
Реализованы механизмы защиты от брутфорс-атак
Настроено логирование и мониторинг подключений
Создана отказоустойчивая конфигурация

Ключевые принципы безопасности:

  • Не используйте стандартный порт 22
  • Запретите вход пользователя root
  • Используйте аутентификацию по ключам
  • Ограничьте список разрешенных пользователей
  • Настройте firewall и fail2ban
  • Регулярно обновляйте систему

Рекомендации по эксплуатации:

  1. Регулярно обновляйте OpenSSH до актуальной версии
  2. Мониторьте логи на предмет подозрительной активности
  3. Регулярно меняйте SSH-ключи (раз в 6-12 месяцев)
  4. Используйте разные ключи для разных серверов
  5. Настройте резервное копирование конфигурации

Пример команды для ежедневной проверки:

# Скрипт для мониторинга SSH

#!/bin/bash

echo "=== SSH Status ==="

systemctl status ssh --no-pager -l

echo -e "\n=== Recent connections ==="

tail -20 /var/log/auth.log | grep sshd

Теперь ваш SSH-сервер на Debian настроен безопасно и готов к использованию для удалённого управления системой.