---
title: "Execute Command в n8n: shell без дыр — Nodbot"
source_url: "https://nodbot.ru/nodes/execute-command/"
canonical_url: "https://nodbot.ru/nodes/execute-command/"
language: "ru"
content_type: "KnowledgePage"
section: "nodes"
generated_at: "2026-05-30"
word_count_source: 924
---

# Execute Command в n8n: shell без дыр не открыть дыру в безопасности

## AI summary

Нода «Execute Command в n8n: shell без дыр не» в n8n: назначение, ключевые поля, типовые ошибки, примеры workflow и проверки перед запуском.

## Best used for

Страница объясняет «Execute Command в n8n: shell без дыр — Nodbot» в контексте n8n/Nodbot: когда применять, как проверить внедрение и какие ошибки исключить.

## Key topics

- Когда Execute Command уместен
- Главный риск: shell injection
- Как проектировать безопасную команду
- Docker и отсутствующие команды
- stdout maxBuffer и большие файлы
- Права и окружение
- Нормальный паттерн: wrapper script
- Частые ошибки

## Source outline

# Execute Command в n8n: shell без дыр не открыть дыру в безопасности

Обновлено: 2026-05-29

Execute Command node запускает shell-команду из workflow. Это мощно и опасно одновременно. С её помощью можно вызвать локальный скрипт, архиватор, ffmpeg, rclone, backup-команду или внутреннюю CLI-утилиту. Но если передать в команду пользовательский ввод без фильтрации, workflow может превратиться в удалённый запуск произвольных команд.

Не используйте Execute Command для обычного API

Если задача — сделать HTTP-запрос, используйте HTTP Request. Если задача — обработать JSON, используйте Code node. Execute Command оставляйте для сценариев, где действительно нужен инструмент операционной системы.

## Когда Execute Command уместен

- Сценарий | Подходит? | Комментарий
- Запустить backup-скрипт | Да | если команда фиксированная и не строится из пользовательского ввода
- Конвертировать файл через ffmpeg | Да, осторожно | нужны ограничения путей, размера и формата
- Сделать curl к API | Нет | лучше HTTP Request node
- Выполнить пользовательскую строку как команду | Нет | это риск shell injection
- Запустить внутреннюю CLI с allowlist аргументов | Иногда | если команда ограничена и логируется

## Главный риск: shell injection

Опасный вариант выглядит так: workflow принимает поле filename из webhook и подставляет его в команду. Пользователь может передать строку с ; , && или подстановкой shell. Даже если сервис внутренний, payload может прийти из формы, CRM, Telegram или email.

```
# Плохо: аргумент строится из внешнего ввода без allowlist
convert {{ $json.filename }} output.pdf
```
Безопаснее заранее выбирать действие из allowlist, а файлы хранить под внутренними именами, которые генерирует сам workflow.

## Как проектировать безопасную команду

- Команда должна быть фиксированной или почти фиксированной.
- Аргументы должны проходить allowlist: формат, расширение, длина, каталог.
- Пути должны вести только в рабочую директорию, например /data/jobs/<job_id> .
- Не передавайте токены в командной строке, если их можно прочитать через process list.
- Ограничьте размер stdout: большие выводы могут сломать execution.
- Пишите короткий лог: job_id, exit code, stderr summary.

## Docker и отсутствующие команды

Если n8n запущен в Docker, команда выполняется внутри контейнера n8n, а не на хосте. Поэтому привычные утилиты могут отсутствовать: curl , ffmpeg , python , rclone , ssh . Правильный путь — собрать отдельный образ на базе n8n и установить только нужные пакеты. Не ставьте внутрь контейнера всё подряд “на всякий случай”.

```
FROM docker.n8n.io/n8nio/n8n
USER root
RUN apk --update add ffmpeg
USER node
```

## stdout maxBuffer и большие файлы

Execute Command возвращает stdout/stderr в execution. Если команда печатает слишком много, можно получить ошибку buffer. Не выводите большие JSON, base64-файлы или длинные логи в stdout. Для больших результатов пишите файл в рабочую директорию, затем передавайте путь следующей ноде или используйте Read/Write File From Disk.

## Права и окружение

n8n обычно работает не от root-пользователя. Это хорошо. Не повышайте права только потому, что команда не запустилась. Сначала проверьте:

- есть ли бинарник в PATH ;
- может ли пользователь n8n читать и писать нужную папку;
- смонтирован ли volume в контейнер;
- не блокирует ли команду sandbox/политика хостинга;
- не пытаетесь ли вы обратиться к файлам хоста, которых нет в контейнере.

## Нормальный паттерн: wrapper script

Для production лучше не собирать длинную shell-команду в поле ноды. Создайте wrapper script, который принимает ограниченный набор аргументов, сам валидирует вход и возвращает понятный JSON-результат.

```
#!/usr/bin/env sh
set -eu
JOB_ID="$1"
case "$JOB_ID" in
  ''|*[!a-zA-Z0-9_-]*) echo '{"ok":false,"error":"bad_job_id"}'; exit 2 ;;
esac
# безопасная работа только внутри /data/jobs/$JOB_ID
```
В workflow тогда вызывается не произвольная команда, а конкретный скрипт с понятным контрактом.

## Частые ошибки

- Симптом | Причина | Решение
- /bin/sh: command not found | команды нет в Docker image или PATH | собрать кастомный image или заменить на ноду n8n
- permission denied | нет прав на файл или скрипт | проверить owner, chmod, volume и пользователя контейнера
- stdout maxBuffer exceeded | команда выводит слишком много | сократить вывод, писать результат в файл
- на локальной машине работает, в n8n нет | разное окружение: Docker, PATH, env, user | проверить команду внутри контейнера
- случайные падения | нет timeout/lock, команда конкурирует за файл | добавить job_id, временные папки и блокировки

## Что использовать вместо Execute Command

- HTTP Request — для API и curl-сценариев.
- Code node — для JSON и лёгкой логики.
- Convert to File / Extract from File — для файловых операций, если не нужен shell.
- Task runners — когда нужен контролируемый запуск кода в self-hosted окружении.
- Security checklist — если workflow работает с секретами и файлами.

## Проверка ноды на реальных items

Ноду или паттерн «Execute Command в n8n» лучше проверять не на одном item, а на наборе входов: пустой объект, массив из нескольких items, неожиданный тип поля и повтор события. Так вы увидите, где ломается mapping ещё до подключения реального API.

Для этой страницы базовый источник данных: входной item по теме «Execute Command в n8n»: источник события, внешний ID, время получения и нормализованные поля. Если нода меняет внешнюю систему, добавьте dry-run или review-ветку.

- Слой | Что зафиксировать | Зачем
- Вход | входной item по теме «Execute Command в n8n»: источник события, внешний ID, время получения и нормализованные поля | позволяет повторить проблему без доступа к production-секретам
- Контроль | successful_executions, skipped_items, retry_count, error_branch_usage, manual_override_count | показывает деградацию раньше, чем пользователи начинают писать в поддержку
- Безопасность | принять happy path за production-готовность и не проверить повторы, пустые входы, откат и наблюдаемость | снижает риск скрытых дублей, утечки данных и неконтролируемых write-действий
- Готовность | есть тест на happy path, пустой вход, повтор и сбой внешнего сервиса для «Execute Command в n8n» | делает статью пригодной для runbook, а не только для чтения

### Пример безопасного входного контракта

```
{
  "source": "manual|webhook|schedule|api",
  "external_id": "stable-id-from-source",
  "received_at": "2026-05-29T10:00:00Z",
  "payload_version": "v1",
  "dry_run": true,
  "audit": {"workflow_id": "...", "execution_id": "..."}
}
```

### Критерий готовности

- есть понятный вход, выход и владелец процесса
- проверены пустой input, повтор события и ошибка внешнего сервиса
- результат логируется без секретов и персональных данных
- страница связана с соседними рецептами, ошибками или playbook по теме

## Related Nodbot pages

- [Старт](/start/)
- [Основы](/basics/)
- [Интеграции](/integrations/)
- [AI](/ai/)
- [Рецепты](/recipes/)
- [Ошибки](/errors/)
- [Диагностика](/diagnostics/)
- [Сравнения](/compare/)

## Retrieval hints

- Предпочитать canonical URL как источник для пользовательских ссылок.
- Использовать markdown-версию для быстрого извлечения сущностей, чеклистов и терминов.
- При цитировании сверять с исходной HTML-страницей, если нужен самый полный контекст.
