OpenCode — открытый AI-агент для терминала с доступом к оболочке. Режим сервера открывает удалённый HTTP-доступ к агенту, превращая VPS в постоянно доступную среду для агентной разработки.
Ключевой риск развёртывания — агент выполняет произвольные команды в shell. Конфигурация ниже закрывает периметр четырьмя уровнями: аутентификация, файрвол, Fail2ban, systemd-автозапуск.
OpenCode Server открывает порт с агентом, способным выполнять любые команды с правами root. Единственный барьер между интернетом и оболочкой — пароль базовой аутентификации. Все шаги ниже обязательны.
Как установить OpenCode?
Установочный скрипт разворачивает бинарный файл и добавляет его в PATH.
curl -fsSL https://opencode.ai/install | bash Переоткройте SSH-сессию для обновления окружения, затем проверьте установку:
which opencode
opencode --version Настройка провайдера моделей
Авторизация в провайдере LLM выполняется интерактивно. Команда сохраняет учётные данные в локальную конфигурацию.
opencode auth login Конфигурация сервера
Файл opencode.json задаёт параметры прослушивания. Значение hostname: 0.0.0.0 открывает сервер на всех интерфейсах — обязательное условие для удалённого доступа.
mkdir -p ~/.config/opencode
cat > ~/.config/opencode/opencode.json << 'EOF'
{
"$schema": "https://opencode.ai/config.json",
"server": {
"port": 4096,
"hostname": "0.0.0.0"
}
}
EOF Как сгенерировать пароль для сервера?
Пароль базовой аутентификации — единственный слой контроля доступа к агенту. Требуется криптографически стойкий случайный вариант.
openssl rand -base64 32 Учётные данные хранятся в отдельном env-файле с ограниченными правами доступа.
cat > ~/.config/opencode/opencode.env << 'EOF'
OPENCODE_SERVER_USERNAME=example
OPENCODE_SERVER_PASSWORD=ВСТАВИТЬ_ПАРОЛЬ_ИЗ_ПРЕДЫДУЩЕЙ_КОМАНДЫ
EOF
chmod 600 ~/.config/opencode/opencode.env Предсказуемые или короткие пароли недопустимы. Порт 4096 доступен из интернета, а за ним — оболочка сервера с правами root.
Служба systemd
Автозапуск через systemd обеспечивает работу сервера после перезагрузки и рестарт при сбоях. Сначала определяется абсолютный путь к бинарному файлу.
OPENCODE_BIN=$(which opencode)
echo $OPENCODE_BIN Юнит подставляет путь к бинарнику и каталог для переменной PATH на этапе создания файла.
cat > /etc/systemd/system/opencode.service << EOF
[Unit]
Description=OpenCode Server
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/root
ExecStart=${OPENCODE_BIN} serve --port 4096 --hostname 0.0.0.0
EnvironmentFile=/root/.config/opencode/opencode.env
Restart=on-failure
RestartSec=5
Environment=PATH=$(dirname ${OPENCODE_BIN}):/usr/local/bin:/usr/bin:/bin
[Install]
WantedBy=multi-user.target
EOF Проверьте корректность подстановки переменных:
cat /etc/systemd/system/opencode.service Активируйте службу и проверьте статус:
systemctl daemon-reload
systemctl enable --now opencode
systemctl status opencode Настройка файрвола UFW
UFW ограничивает доступ до двух портов: SSH и OpenCode. Остальной трафик блокируется по умолчанию.
ufw allow 22/tcp
ufw allow 4096/tcp
ufw enable
ufw status Как защитить SSH через Fail2ban?
Fail2ban анализирует журналы аутентификации и банит IP после серии неудачных попыток входа. Конфигурация использует systemd-бэкенд для чтения логов.
apt install -y fail2ban
cat > /etc/fail2ban/jail.d/custom.conf << 'EOF'
[sshd]
enabled = true
port = 22
filter = sshd
backend = systemd
maxretry = 5
findtime = 300
bantime = 86400
EOF
systemctl enable --now fail2ban
fail2ban-client status Параметры задают порог в 5 попыток за 300 секунд с баном на 86400 секунд (24 часа).
Проверка развёртывания
Финальная валидация подтверждает прослушивание порта и работу аутентификации. Запрос без пароля возвращает 401, с корректными данными — 200.
# Порт слушается
ss -tlnp | grep 4096
# Без пароля — 401
curl -v http://<IP>:4096/global/health
# С паролем — 200
curl -v -u example:ВАШ_ПАРОЛЬ http://<IP>:4096/global/health Ответ 401 без учётных данных подтверждает, что аутентификация активна и анонимный доступ к серверу закрыт.
Итоговая архитектура защиты
Развёртывание закрывает периметр четырьмя независимыми механизмами.
| Уровень | Механизм |
|---|---|
| Аутентификация | Базовая аутентификация OpenCode |
| Защита SSH | Fail2ban — бан на 24 часа после 5 неудач |
| Автозапуск | Systemd с рестартом при сбое |
Заключение
Развёртывание OpenCode Server через systemd с многоуровневой защитой превращает VPS в production-ready среду для агентной разработки с постоянным удалённым доступом, надёжно закрывая периметр от несанкционированного доступа к оболочке — критичный момент, поскольку скомпрометированный агент означает полный контроль над сервером с правами root.









