MyNotes

Восстановление пароля 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), установит библиотеку для шифрования во временную папку, сгенерирует совместимый хэш и обновит базу.

bash
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 сбросил старые сессии и прочитал обновленную базу данных, контейнер нужно перезагрузить:

bash
docker restart n8n

Шаг 4. Вход в систему

  1. Откройте веб-интерфейс n8n.
  2. Важно: Используйте режим Инкогнито в браузере или жестко очистите кэш (Ctrl+F5), чтобы избавиться от старых "битых" токенов авторизации в Local Storage.
  3. Введите ваш email и новый пароль.

💡 Совет на будущее: Чтобы не делать этого снова, настройте параметры SMTP в переменных окружения Docker-контейнера (N8N_EMAIL_MODE, N8N_SMTP_HOST, N8N_SMTP_PORT, N8N_SMTP_USER, N8N_SMTP_PASS). После этого вы сможете просто нажимать кнопку Forgot my password на экране логина, и n8n пришлет ссылку для сброса на почту.