# sshd_config: минимум для стенда

Индекс LLMS: [llms.txt](/llms.txt)

---

SSH-доступ к стенду обычно открывают по-быстрому, а потом удивляются брутфорсу в логах. Базовый sshd_config, который отсекает типовые проблемы, укладывается в пять параметров и двадцать минут.

## Зачем менять умолчания

Дистрибутивные sshd идут с permissive-настройками: root-вход по паролю, без ограничений пользователей, три попытки авторизации. На стенде это терпимо, пока не появится в логах:

```
Failed password for root from 1.2.3.4 port 42341 ssh2
Failed password for root from 1.2.3.4 port 42342 ssh2
Failed password for root from 1.2.3.4 port 42343 ssh2
```

Локальная сеть не означает доверенную. Конфигурация по умолчанию — это риск и шум в мониторинге.

## Проверка текущих значений

Перед правкой смотрим, что уже установлено:

```bash
sshd -T | grep -E '^(permitrootlogin|passwordauthentication|maxauthtries|allowusers)'
```

Вывод покажет реальные значения, с которыми sshd стартует, включая параметры из Match-блоков.

## Четыре параметра для стенда

| Параметр | Значение | Зачем |
|---|---|---|
| `PermitRootLogin` | `no` | Root не должен входить напрямую |
| `AllowUsers` | `devops admin` | Белый список, остальные отклоняются |
| `PasswordAuthentication` | `no` | Только ключи, пароли отключены |
| `MaxAuthTries` | `3` | Блокировка после трёх ошибок |

> [!WARNING]
> Изменения применяются после `systemctl reload sshd`. Вносите правки через `ssh -t user@host "sudo nano /etc/ssh/sshd_config"`, чтобы не потерять сессию при ошибке.

## PermitRootLogin

Прямой вход под root — первое, что брутят. Отключаем:

```bash
sudo sed -i 's/^PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config
```

Если нужен root-доступ — заходите под обычным пользователем и поднимайтесь через `sudo`. Это логирует ваши действия в auth.log.

## AllowUsers

Белый список отсекает всех, кого не добавили явно. Если пользователь не в списке, sshd отдаёт `Permission denied` до запроса пароля.

```bash
echo "AllowUsers devops admin monitoring" | sudo tee -a /etc/ssh/sshd_config
```

> [!NOTE]
> Указывайте пользователей через пробел. Для групп используйте `AllowGroups`. Оба параметра поддерживают шаблоны: `AllowUsers devops@10.0.0.*` ограничит вход по сети.

## PasswordAuthentication

Ключи не брутфорсятся в принципе. Переключаем:

```bash
sudo sed -i 's/^PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config
```

Перед отключением убедитесь, что ваш публичный ключ в `~/.ssh/authorized_keys` на стенде есть. Иначе закроете себе вход.

## MaxAuthTries

Защита от брутфорса. После трёх неудачных попыток соединение рвётся:

```
MaxAuthTries 3
```

Значение меньше единицы отключает ограничение. Ставьте 3–5 в зависимости от надёжности вашей сети.

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

После правки всегда проверяйте синтаксис:

```bash
sudo sshd -t
```

Пустой вывод означает, что sshd запустится с новыми параметрами. Любая ошибка выводится на экран.

Затем применяйте:

```bash
sudo systemctl reload sshd
```

## Типичные ошибки

**Правка не того файла.** В некоторых дистрибутивах sshd_config лежит в `/etc/ssh/sshd_config.d/`. Подключаемые файлы читаются в алфавитном порядке. Дефолтный `/etc/ssh/sshd_config` может перезаписываться при обновлении пакета — лучше класть кастомные параметры в `.conf`-файл с осмысленным именем.

**Пробелы после параметра.** Синтаксис требует пробела между ключом и значением:

```
# Неправильно
PermitRootLogin= no

# Правильно
PermitRootLogin no
```

**Комментарии вместо параметров.** Строка `#PasswordAuthentication no` — это комментарий, sshd её игнорирует. Убирайте `#` или добавляйте новую строку.

**Match-блок перекрывает глобальные настройки.** Если в конце файла есть `Match User root`, он может вернуть `PermitRootLogin yes` для конкретного пользователя. Проверяйте вывод `sshd -T`.

## Дополнительно

Для стенда этого достаточно. В продакшене добавляют `ClientAliveInterval 300`, `ClientAliveCountMax 2` для keepalive и `X11Forwarding no`, если графика не нужна. Но на развертывание минимального baseline хватит четырёх параметров и пары команд.
