Перейти к содержимому

Клиент командной строки (CLI)

webshield — официальный клиент командной строки для API WebShield. Он управляет доменами и DNS-записями, настройками проксируемых хостов, публикует статические сайты (включая инкрементальную публикацию из CI), показывает статистику и потребление.

Исходный код и релизы: github.com/webshieldpro/webshield-cli.

Установщик определяет ОС и архитектуру, скачивает последний релиз, проверяет контрольную сумму SHA-256 и устанавливает бинарный файл в ~/.local/bin:

Окно терминала
curl -fsSL https://raw.githubusercontent.com/webshieldpro/webshield-cli/main/install.sh | sh

Готовые сборки для Linux (x86_64, aarch64 — статические, без зависимостей) и Windows доступны на странице релизов. Также можно собрать из исходного кода при наличии Rust:

Окно терминала
git clone https://github.com/webshieldpro/webshield-cli
cd webshield-cli
cargo build --release
mv target/release/webshield ~/.local/bin/

Скрипты автодополнения вложены в каждый релизный архив; бинарный файл также генерирует их для bash, zsh, fish, PowerShell, elvish и nushell:

Окно терминала
# bash
webshield completion bash > ~/.local/share/bash-completion/completions/webshield
# zsh (каталог должен быть в $fpath)
webshield completion zsh > ~/.zfunc/_webshield
# fish
webshield completion fish > ~/.config/fish/completions/webshield.fish

CLI использует персональный API-токен (wsk_…). Создайте его в личном кабинете в разделе Настройки → API-токены с нужными правами — см. API-токены. Для CI рекомендуется узкий токен, привязанный к одному домену или сайту.

Окно терминала
webshield auth login # запросит токен и сохранит его в профиль
webshield auth status # покажет активный профиль и проверит доступ

Другие способы передать токен: флаг --token или переменная окружения WS_TOKEN (удобно в CI). Профили хранятся в ~/.config/webshield/config.toml; поддерживается несколько профилей через --profile (или WS_PROFILE) — как в aws или gh.

Окно терминала
webshield domains list # список доменов и статус делегирования
webshield domains add example.com # добавить домен (существующие записи импортируются сканированием)
webshield domains add example.com --import none
webshield domains check example.com # проверить делегирование на NS WebShield
webshield domains remove example.com
Окно терминала
webshield dns list example.com
webshield dns list example.com --type A
webshield dns add example.com www A 203.0.113.10 # добавить значение в набор
webshield dns set example.com @ A 203.0.113.10 # сделать набор ровно таким
webshield dns remove example.com www A 203.0.113.10 # удалить одно значение
webshield dns remove example.com www TXT # удалить весь набор записей
webshield dns add example.com www CNAME foo.example.com # точка в конце добавляется автоматически
webshield dns add example.com @ MX "10 mail.example.com" --ttl 3600

Семантика для многозначных типов (A, AAAA, TXT, MX): add добавляет значения к существующему набору, set делает набор ровно равным указанным значениям, remove удаляет только перечисленные значения (без значений — весь набор). CNAME/NS одиночные и всегда заменяются целиком.

Окно терминала
webshield dns dnssec status example.com # DS-записи для регистратора
webshield dns dnssec enable example.com
webshield dns dnssec disable example.com # заблокировано, пока DS виден в родительской зоне

Шаги на стороне регистратора — см. DNSSEC.

Окно терминала
webshield sites list
webshield sites create www.example.com --domain example.com
webshield sites publish www.example.com --dir ./public # инкрементальная публикация
webshield sites publish --site-id 6 --dir ./public # по id (для узких токенов sites:publish)
webshield sites publish www.example.com --dir ./public --dry-run # только показать план
webshield sites publish-from-bucket www.example.com --bucket web --path public/ # из вашего S3-бакета
webshield sites files www.example.com

publish-from-bucket публикует сайт прямо из одного из ваших бакетов объектного хранилища (сначала залейте туда сайт любым S3-инструментом). Команда запускает асинхронную публикацию и ждёт её завершения.

publish вычисляет разницу с сервером (по хешу содержимого), загружает только изменённые файлы, удаляет исчезнувшие и атомарно публикует новую версию — безопасно запускать из CI на каждую сборку. Минимальный шаг GitHub Actions:

- name: Publish site
env:
WS_TOKEN: ${{ secrets.WS_PUBLISH_TOKEN }}
run: |
curl -fsSL https://raw.githubusercontent.com/webshieldpro/webshield-cli/main/install.sh | sh
~/.local/bin/webshield sites publish www.example.com --dir ./public

Подробнее о режимах размещения и токенах для CI — Размещение статического сайта.

Окно терминала
webshield proxy list
webshield proxy get app.example.com
webshield proxy set app.example.com --domain example.com --ssl true --bot-protection true
webshield proxy set old.example.com --domain example.com \
--mode redirect --redirect-target example.com
webshield proxy remove app.example.com

proxy set создаёт конфигурацию хоста или частично обновляет существующую; булевы флаги отправляются только при явном указании, остальные настройки не затрагиваются.

Окно терминала
webshield stats summary example.com --range 7d # сводка трафика и запросов
webshield stats bans example.com # активные баны и проверки
webshield billing balance
webshield billing usage example.com # трафик относительно лимита тарифа
webshield billing tariffs example.com

Каждая команда поддерживает машиночитаемый вывод:

Окно терминала
webshield -o json domains list | jq -r '.[].name'

Язык интерфейса выбирается флагом --lang en|ru (или WS_LANG); по умолчанию — системная локаль. Флаг --yes отключает запросы подтверждения для необратимых операций.