Настройка SSH ключей для безопасного подключения
Пошаговая настройка современной аутентификации SSH по ключам Ed25519 с отключением паролей для максимальной безопасности.
Когда используется:
- Первоначальная настройка доступа к серверам
- Подключение новых серверов к VS Code через Remote-SSH
- Замена устаревших RSA ключей на Ed25519
- Усиление безопасности существующих подключений
Краткий контекст: Настройка включает генерацию ключей, их установку на сервер, конфигурацию клиента и сервера. Подходит для Ubuntu/Debian серверов.
🔧 Настройка на стороне клиента (Ubuntu)
🔑 Шаг 1: Генерация SSH ключа
ssh-keygen -t ed25519 -a 100 -f ~/.ssh/<host>-ed25519 -C "user@<host>-$(date +%F)"
Расшифровка параметров:
ssh-keygen— создание пары ключей (приватный + публичный)-t ed25519— современный тип ключа (быстрый, безопасный)-a 100— количество итераций KDF для защиты приватного ключа-f ~/.ssh/<host>-ed25519— имя файлов ключей-C "комментарий"— метка для идентификации ключа
При генерации обязательно задайте passphrase для защиты приватного ключа
🔐 Шаг 2: Загрузка ключа в SSH агент (опционально)
# Запуск SSH агента
eval "$(ssh-agent -s)"
# Добавление ключа в агент
ssh-add ~/.ssh/<host>-ed25519
Зачем нужно:
- Агент держит ключ в памяти
- Не нужно вводить passphrase при каждом подключении
📤 Шаг 3: Установка публичного ключа на сервер
ssh-copy-id -i ~/.ssh/<host>-ed25519.pub user@HOST
Что происходит:
- Подключение к серверу по паролю (последний раз!)
- Автоматическое добавление ключа в
~/.ssh/authorized_keys - Установка правильных прав доступа
⚙️ Шаг 4: Настройка SSH конфигурации на клиенте
Создайте/отредактируйте на своём ПК ~/.ssh/config:
nano ~/.ssh/config
Добавьте блок для сервера:
Host myhost # удобный алиас для подключения
HostName 203.0.113.10 # реальный IP/DNS сервера
User ubuntu # имя пользователя на сервере
Port 22 # порт SSH (по умолчанию 22)
IdentityFile ~/.ssh/<host>-ed25519 # путь к приватному ключу
IdentitiesOnly yes # использовать только указанные ключи
StrictHostKeyChecking accept-new # автоматически принимать новые ключи хостов
Объяснение параметров:
Host— алиас для командыssh myhostHostName— реальный адрес сервераUser— логин на удаленном сервереIdentityFile— путь к приватному ключуIdentitiesOnly yes— предотвращает ошибку "Too many authentication failures"StrictHostKeyChecking accept-new— безопасное принятие новых host keys
✅ Тест подключения
ssh myhost
Должно подключиться без пароля (только passphrase если задавали).
🖥️ Настройка на стороне сервера
⚙️ Конфигурация SSH демона
Отредактируйте конфигурацию SSH:
sudo nano /etc/ssh/sshd_config
Обязательные параметры:
# Разрешение аутентификации по ключам
PubkeyAuthentication yes
# КРИТИЧНО: Отключение паролей (только после проверки ключей!)
PasswordAuthentication no
# Путь к файлу с авторизованными ключами
AuthorizedKeysFile %h/.ssh/authorized_keys
# Запрет root входа по паролю (лучше полный запрет: no)
PermitRootLogin prohibit-password
🔍 Проверка и применение конфигурации
# Проверка синтаксиса конфигурации
sudo sshd -t
# Применение изменений (без обрыва сессий)
sudo systemctl reload ssh
ВАЖНО: Отключайте PasswordAuthentication no только после успешной проверки подключения по ключу!
📋 Проверка прав доступа на сервере
# Правильные права для SSH директории и файлов
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chown "$USER:$USER" ~/.ssh -R
🔍 Диагностика проблем
📊 Просмотр логов сервера:
# Мониторинг SSH логов в реальном времени
sudo journalctl -u ssh -f
# Альтернативно
sudo tail -f /var/log/auth.log
🐛 Отладка клиента:
# Подробный вывод отладки
ssh -vvv myhost
🔧 Проверка статуса SSH:
# Статус SSH службы
sudo systemctl status ssh
# Проверка портов
sudo netstat -tlnp | grep :22
💡 Полезные советы
- Используйте Ed25519 вместо RSA - современнее и быстрее
- Всегда ставьте passphrase на приватные ключи
- Используйте SSH агент для удобства работы
- Создавайте отдельные ключи для разных серверов
- Делайте резервные копии ключей в надежном месте
- Тестируйте подключение перед отключением паролей
⚠️ Частые ошибки
| Ошибка | Причина | Решение |
|---|---|---|
Permission denied (publickey) |
Ключ не установлен или неправильные права | Проверить authorized_keys и права (700/600) |
Too many authentication failures |
SSH предлагает много ключей | Добавить IdentitiesOnly yes в config |
Could not load host key |
Ошибка в sshd_config | Проверить синтаксис: sudo sshd -t |
Connection refused |
SSH служба не запущена | sudo systemctl start ssh |
| VS Code не видит конфиг | Неправильный путь или синтаксис | Проверить ~/.ssh/config синтаксис |
| Постоянно спрашивает passphrase | Ключ не в агенте | ssh-add ~/.ssh/key-name |
🚀 Подключение к VS Code
После настройки SSH конфигурации:
- Откройте VS Code
- Установите расширение Remote - SSH
- Нажмите
Ctrl+Shift+P - Выберите Remote-SSH: Connect to Host...
- Выберите ваш
myhostиз списка - VS Code подключится автоматически!
🔄 Добавление новых серверов
Для каждого нового сервера повторите:
# 1. Генерация нового ключа
ssh-keygen -t ed25519 -a 100 -f ~/.ssh/<newhost>-ed25519 -C "user@<newhost>-$(date +%F)"
# 2. Копирование на сервер
ssh-copy-id -i ~/.ssh/<newhost>-ed25519.pub user@NEWHOST
# 3. Добавление блока в ~/.ssh/config
🛡️ Безопасность
Рекомендуемые дополнительные настройки sshd_config:
# Отключение пустых паролей
PermitEmptyPasswords no
# Ограничение количества попыток
MaxAuthTries 3
# Тайм-аут аутентификации
LoginGraceTime 60
# Отключение X11 forwarding (если не нужен)
X11Forwarding no
# Ограничение пользователей (опционально)
AllowUsers ubuntu my-user
# Изменение порта (опционально)
Port 2222
После изменения порта обновите конфиг клиента:
Host myhost
Port 2222
# остальные параметры...
🎯 Результат
После выполнения инструкции у вас будет:
- ✅ Безопасное подключение по ключам Ed25519
- ✅ Отключена аутентификация по паролям
- ✅ Удобная работа через SSH алиасы
- ✅ Интеграция с VS Code Remote-SSH
- ✅ Защищенная инфраструктура