infra/@beget-s3.storage/docs/AUTOMATION_ATTEMPTS.md

ОТЧЁТ О ПОПЫТКАХ АВТОМАТИЗАЦИИ BEGET S3

Дата: 2025-11-16
Задача: Получить S3 ключи из панели Beget автоматически
Результат: ❌ Автоматизация невозможна


ПОПЫТКА №1: curl + cookies

Метод:

curl -c cookies.txt "https://cp.beget.com/"
curl -b cookies.txt -c cookies.txt \
  -X POST "https://cp.beget.com/login" \
  -d "login=kondurov&passwd=$BEGET_PASSWORD"  # см. .credentials.md

Результат: ❌ Ошибка
Причина:

<script>
function set_cookie(){
  var now = new Date();
  var time = now.getTime();
  time += 19360000 * 1000;
  now.setTime(time);
  document.cookie='beget=begetok'+'; expires='+now.toGMTString()+'; path=/';
}
set_cookie();
location.reload();
</script>

Beget требует выполнения JavaScript для установки cookie и перезагрузки страницы.
curl НЕ ВЫПОЛНЯЕТ JavaScript.


Метод:

curl -b "beget=begetok" "https://cp.beget.com/"

Результат: ❌ Та же ошибка
Причина: Недостаточно просто установить cookie, панель проверяет:
- User-Agent браузера
- Время установки cookie
- JavaScript выполнение
- Возможно, другие fingerprint-параметры


ПОПЫТКА №3: Python Playwright (headless)

Метод:

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(headless=True)
    page = browser.new_page()
    page.goto("https://cp.beget.com/")
    page.wait_for_load_state("networkidle")

    login_field = page.query_selector('input[name="login"]')
    password_field = page.query_selector('input[name="passwd"]')

Результат: ❌ Страница пустая
Полученный HTML:

<html><head></head><body></body></html>

Причина:
- Панель Beget блокирует headless браузеры
- JavaScript не загружается в headless режиме
- Возможна защита от автоматизации (CloudFlare, или похожая)


ПОПЫТКА №4: WebFetch инструмент

Метод:

WebFetch("https://cp.beget.com/", "...")

Результат: ❌ Только JavaScript код установки cookie
Причина: WebFetch тоже не выполняет динамический JavaScript с перезагрузкой


ВЫВОДЫ

Почему автоматизация невозможна

  1. JavaScript защита
    - Панель требует выполнения JS для установки cookie
    - После установки cookie требуется перезагрузка страницы
    - Это цикл: cookie → reload → проверка → контент

  2. Headless detection
    - Playwright headless mode блокируется
    - Возможно проверяется navigator.webdriver
    - Возможна защита от автоматизации

  3. Fingerprinting
    - Панель может проверять браузерный fingerprint
    - User-Agent, WebGL, Canvas, шрифты и т.д.

Что можно было бы попробовать (но не стоит)

  1. Playwright в НЕ-headless режиме
    - Требует графического окружения (X11)
    - На сервере без GUI не работает
    - Можно через Xvfb, но сложно и ненадёжно

  2. Selenium с реальным браузером
    - Та же проблема с GUI
    - Медленнее Playwright
    - Может блокироваться webdriver detection

  3. Puppeteer с stealth plugin
    - Обход headless detection
    - Но всё равно нужен GUI или Xvfb
    - Сложная настройка

  4. Запрос к Beget API напрямую
    - Beget API (https://api.beget.com) НЕ предоставляет методов для S3
    - API для управления хостингом, не S3


РЕКОМЕНДАЦИЯ

✅ РУЧНОЕ ПОЛУЧЕНИЕ КЛЮЧЕЙ (5 минут)

Инструкция создана: $WORKSPACE/infra/infra-s3-beget/docs/MANUAL_SETUP.md

Шаги:
1. Открыть https://cp.beget.com/ в браузере
2. Войти (kondurov / см. .credentials.md)
3. Найти раздел "S3"
4. Создать ключ "nomenclature-exchange"
5. Скопировать Access Key ID и Secret Access Key
6. Передать мне

Время: 5 минут
Сложность: Минимальная

✅ АЛЬТЕРНАТИВА: SSH РЕШЕНИЕ (уже работает)

Путь: $WORKSPACE/infra/infra-file-exchange/

Готовые скрипты:
- scripts/mount_remote.sh - Linux (SSHFS)
- solution/sync_windows.ps1 - Windows (PowerShell + SCP)
- solution/sync_server.sh - Server (автообработка)

Преимущества:
- Работает СЕЙЧАС
- Не нужны дополнительные ключи
- Простая настройка

Недостатки vs S3:
- Нет версионирования
- Нет автоархивирования
- Требует SSH доступ (уже есть)


ИТОГ

Автоматизация доступа к панели Beget для получения S3 ключей технически невозможна без:
- Реального браузера с GUI
- Сложной настройки обхода защиты (Xvfb + stealth plugin)
- Нарушения ToS хостинга (автоматизация может быть запрещена)

Решение: Ручное получение ключей (5 минут) или использование готового SSH решения.


Попытки: 4
Время затрачено: ~30 минут
Статус: Невозможно автоматизировать
Рекомендация: Ручное получение