🔐 Настройка SSH и ключевой аутентификации в Ubuntu Server

📌 Цель занятия: Научиться безопасно подключаться к серверу с помощью SSH-ключей, настроить конфигурацию SSH-сервера и понять принципы безопасной удалённой работы.

📚 Часть 1: Основы SSH

Что такое SSH?

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

Параметр Значение Описание
Порт по умолчанию 22 Можно изменить для безопасности
Протокол TCP Гарантирует доставку пакетов
Шифрование AES, ChaCha20 Защищает данные от перехвата
Аутентификация Пароль / Ключи Ключи надёжнее паролей
⚠️ Важно: Никогда не используйте пароль для подключения к продакшен-серверам! SSH-ключи обеспечивают значительно более высокий уровень безопасности.

📚 Часть 2: Генерация SSH-ключей

Типы ключей

Тип Команда Рекомендация
RSA ssh-keygen -t rsa Устаревший, но совместимый
ED25519 ssh-keygen -t ed25519 ✅ Рекомендуется (быстрый и безопасный)
ECDSA ssh-keygen -t ecdsa Альтернатива ED25519

Пошаговая инструкция

# Генерация пары ключей (выполняется на ЛОКАЛЬНОЙ машине)
ssh-keygen -t ed25519 -C "LOGIN@ubuntu-server"

# Система спросит:
Enter file in which to save the key (/home/LOGIN/.ssh/id_ed25519):
# Нажмите Enter для использования пути по умолчанию

Enter passphrase (empty for no passphrase):
# Введите парольную фразу для дополнительной защиты (рекомендуется)

Enter same passphrase again:
# Повторите парольную фразу
✅ Результат: В папке ~/.ssh/ появятся два файла:

📚 Часть 3: Копирование ключа на сервер

Способ 1: ssh-copy-id (рекомендуется)

ssh-copy-id -i ~/.ssh/id_ed25519.pub student@31.163.204.186 -p 2222

# Введите пароль пользователя при первом подключении
Number of key(s) added: 1

# Проверка подключения без пароля
ssh student@31.163.204.186 -p 2222

Способ 2: Ручное копирование

# 1. Показать содержимое публичного ключа
cat ~/.ssh/id_ed25519.pub

# 2. Скопировать вывод (весь ключ от "ssh-ed25519" до конца)

# 3. Подключиться к серверу по паролю
ssh student@31.163.204.186 -p 2222

# 4. На сервере создать папку .ssh если её нет
mkdir -p ~/.ssh

# 5. Добавить ключ в файл authorized_keys
echo "ВАШ_КЛЮЧ" >> ~/.ssh/authorized_keys

# 6. Установить правильные права (критически важно!)
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chown -R $USER:$USER ~/.ssh
⚠️ Критично: Если права на .ssh или authorized_keys установлены неправильно, SSH-сервер отклонит ключевую аутентификацию в целях безопасности!

📚 Часть 4: Настройка SSH-сервера

Конфигурационный файл

Основной файл конфигурации: /etc/ssh/sshd_config

# Редактирование конфигурации (требуется sudo)
sudo nano /etc/ssh/sshd_config

Основные параметры для настройки

Параметр Значение Описание
Port 2222 Изменить порт для безопасности
PermitRootLogin no Запретить вход root напрямую
PasswordAuthentication no Отключить вход по паролю (после настройки ключей!)
PubkeyAuthentication yes Разрешить аутентификацию по ключам
AllowUsers student LOGIN Разрешить только определённых пользователей
MaxAuthTries 3 Ограничить количество попыток входа

Пример безопасной конфигурации

# Порт (не стандартный 22)
Port 2222

# Запрет входа для root
PermitRootLogin no

# Только ключевая аутентификация
PasswordAuthentication no
PubkeyAuthentication yes

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

# Защита от перебора паролей
MaxAuthTries 3
LoginGraceTime 60

📚 Часть 5: Перезапуск и проверка

# Проверка конфигурации на ошибки
sudo sshd -t

# Перезапуск SSH-сервера
sudo systemctl restart sshd

# Проверка статуса службы
sudo systemctl status sshd

# Просмотр логов подключения
sudo journalctl -u sshd -f
⚠️ Важно: Перед отключением парольной аутентификации убедитесь, что ключевая работает! Иначе вы можете потерять доступ к серверу.

📚 Часть 6: Практическое задание

🎯 Задание: «Безопасный доступ к серверу»

  1. Генерация ключей
    • Сгенерируйте пару SSH-ключей типа ED25519 на своей локальной машине
    • Используйте комментарий с вашим логином: -C "LOGIN@ubuntu"
    • Установите парольную фразу (passphrase)
  2. Копирование ключа
    • Скопируйте публичный ключ на сервер через ssh-copy-id
    • Проверьте подключение без ввода пароля
  3. Настройка прав
    • Проверьте права на папку ~/.ssh (должно быть 700)
    • Проверьте права на файл authorized_keys (должно быть 600)
    • Исправьте права при необходимости
  4. Конфигурация сервера
    • Отредактируйте /etc/ssh/sshd_config
    • Измените порт на 2222 (или другой нестандартный)
    • Запретите вход для root: PermitRootLogin no
    • Добавьте своего пользователя в AllowUsers
  5. Проверка и документирование
    • Перезапустите SSH-службу
    • Подключитесь на новый порт
    • Сделайте скриншот успешного подключения
    • Сохраните конфигурацию в файл отчёта

📚 Часть 7: Контрольный чек-лист

📚 Часть 8: Типичные ошибки и решения

Ошибка Причина Решение
Permission denied (publickey) Неправильные права на .ssh chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys
Connection refused Неверный порт или служба не запущена Проверить порт и sudo systemctl status sshd
Host key verification failed Изменился ключ сервера Удалить старый ключ из ~/.ssh/known_hosts
Authentication failed Ключ не в authorized_keys Проверить содержимое файла и права доступа

📚 Часть 9: Дополнительные команды

# Проверить какие ключи загружены в агент
ssh-add -l

# Добавить ключ в агент
ssh-add ~/.ssh/id_ed25519

# Удалить все ключи из агента
ssh-add -D

# Тестирование подключения с отладкой
ssh -v student@31.163.204.186 -p 2222

# Просмотр попыток входа в логи
sudo grep "sshd" /var/log/auth.log
💡 Совет: Используйте ssh -v для отладки проблем с подключением. Флаг -v показывает подробный процесс аутентификации.

📚 Часть 10: Домашнее задание

📝 Индивидуальная работа

Задача: Настроить SSH-доступ для дополнительного пользователя

  1. Создайте нового пользователя LOGIN_admin
  2. Сгенерируйте для него отдельную пару ключей
  3. Добавьте пользователя в группу sudo
  4. Настройте подключение по ключу для этого пользователя
  5. Проверьте возможность выполнения команд с sudo
  6. Задокументируйте все шаги в отчёте

Критерии оценки: