Восстановление пароля owner в сервисе n8n в docker
🛠 Восстановление пароля Owner в n8n (Docker + SQLite)
Суть проблемы: Стандартная команда n8n user-management:reset удаляет вообще всех пользователей. Простая подмена хэша в файле database.sqlite снаружи контейнера часто не работает из-за кэширования SQLite (WAL) и строгих требований n8n к формату bcrypt-хэша.
Решение: Сгенерировать правильный хэш с помощью «родного» движка Node.js прямо внутри работающего контейнера и записать его напрямую в базу.
Пошаговый алгоритм
Шаг 1. Подготовка скрипта Скопируйте скрипт ниже. Перед выполнением обязательно замените две переменные под ваши данные:
- НОВЫЙ_ПАРОЛЬ — на желаемый пароль (внутри одинарных кавычек).
- admin@test.test — на email аккаунта владельца (owner).
Шаг 2. Выполнение скрипта на сервере Зайдите на сервер по SSH (желательно под root) и выполните скрипт целиком. Он зайдет в контейнер (в примере имя контейнера n8n), установит библиотеку для шифрования во временную папку, сгенерирует совместимый хэш и обновит базу.
docker exec -u root -i n8n sh << 'EOF'
# Переходим во временную папку, чтобы Node.js точно нашел установленный модуль
cd /tmp
# Устанавливаем библиотеку шифрования локально и без сохранения в package.json
npm install bcryptjs --no-save --silent
# Генерируем хэш пароля с помощью встроенного Node.js
HASH=$(node -e "console.log(require('bcryptjs').hashSync('НОВЫЙ_ПАРОЛЬ', 10))")
# Записываем новый хэш напрямую в базу данных SQLite для нужного email
sqlite3 /home/node/.n8n/database.sqlite "UPDATE \"user\" SET password='$HASH' WHERE email='admin@test.test';"
echo "Готово! Новый нативный хэш сгенерирован и сохранен: $HASH"
EOF
Шаг 3. Перезапуск контейнера Чтобы n8n сбросил старые сессии и прочитал обновленную базу данных, контейнер нужно перезагрузить:
docker restart n8nШаг 4. Вход в систему
- Откройте веб-интерфейс n8n.
- Важно: Используйте режим Инкогнито в браузере или жестко очистите кэш (Ctrl+F5), чтобы избавиться от старых "битых" токенов авторизации в Local Storage.
- Введите ваш email и новый пароль.
💡 Совет на будущее: Чтобы не делать этого снова, настройте параметры SMTP в переменных окружения Docker-контейнера (N8N_EMAIL_MODE, N8N_SMTP_HOST, N8N_SMTP_PORT, N8N_SMTP_USER, N8N_SMTP_PASS). После этого вы сможете просто нажимать кнопку Forgot my password на экране логина, и n8n пришлет ссылку для сброса на почту.