Обзор ИИ-агента aish в SELECTOS

Тенденции последних лет таковы, что нейросети и их агенты внедряются в большинство сфер современной жизни. Я расскажу про одного из таких ИИ-агентов - aish, который интегрирован в операционную систему SELECTOS провайдера Selectel. Покажу, как его запустить и какие задачи на сервере можно решать с его помощью.

Что такое SELECTOS

Для начала кратко расскажу, что это за система - SELECTOS. Все дальнейшие работы будут происходить на ней, поэтому надо немного пояснить. Провайдер Selectel создал серверную операционную систему общего назначения на базе дистрибутива Debian. Она может быть установлена как на виртуальные машины, так и непосредственно железные серверы.

В плане настройки и управления это всё тот же Debian. Специально изучать не надо. Собрана она была в первую очередь для решения прикладных задач самого провайдера:

  • Интеграция с собственными сервисами
  • Некоторые оптимизации под своё железо и сеть
  • Собственный репозиторий пакетов с нужными версиями, иногда более свежими, чем в репозитории той версии Debian, которая была взята за основу
  • Включение в реестр отечественного ПО

SELECTOS распространяется бесплатно и может быть использована в том числе в коммерческих целях без ограничений. Бесплатная версия включает в себя основной репозиторий пакетов с регулярными обновлениями безопасности и системного ПО.

При желании можно приобрести корпоративную лицензию. Она включает в себя гарантии SLA, приоритетную доставку патчей безопасности, консультации инженеров по установке, настройке и эксплуатации, сопровождение в процессе внедрения, разбор инцидентов и некоторые другие вещи.

AI-агент aish

Aish (AI-shell) - утилита для управления операционной системой в режиме командной строки. Она представляет из себя чат, куда вы пишите в формате обычного текста запросы к ИИ, получаете рекомендации команд на исполнение и наблюдаете результат исполнения. По сути это консольный ИИ-агент.

ИИ агент aish

Утилита входит в состав открытого репозитория SELECTOS и доступна всем пользователям ОС. Отмечу основные особенности aish:

  • модель, обеспечивающая работу агента, развёрнута локально в инфраструктуре Selectel, данные не выходят за её пределы, при желании можно подключить свою модель, либо другую публичную
  • агент принимает задачи на разговорном человеческом языке, формирует команды на исполнение, сам их не выполняет, ждёт подтверждения, может вносить изменения в систему
  • в агент по умолчанию загружен контекст сервера, не нужны дополнительные пояснения
  • на момент написания статьи действовали лимиты бесплатной версии - 10 сообщений в минуту, 60 - в час, 150 - в день
На момент написания статьи aish находится в режиме public preview и не рекомендуется к использованию в production-окружениях.

Я потестировал агента в различных ситуациях, о которых расскажу далее, а пока кратко поясню кому и для каких задач он может быть полезен:

  • Малый и средний бизнес, где нет полной автоматизации процессов. Администраторы заходят на сервера и в ручном или полуручном режиме что-то настраивают. ИИ-агент aish закрывает задачи уровня junior, middle. Например, он может настроить файрвол, установить и настроить веб сервер, проверить, что запущено на сервере, настроить подключенный новый пустой диск, написать скрипт для бэкапа и т.д.
  • Крупный бизнес, если надо разобраться в каких-то проблемах на конкретном сервере. Агент может проанализировать логи, выполнить какие-то дополнительные действия для сбора данных, проанализировать их, разобраться в причинах тормозов и т.д.

Поработав с aish, как мне кажется, понял его основное назначение и применение. Он в первую очередь заменяет ручную работу в консоли. То есть он все команды придумывает и выполняет вместо вас. Это решение в первую очередь для работы в консоли конкретного сервера. Особенно поможет тем, у кого мало опыта с Linux. У кого есть какое-то базовое понимание работы в консоли, но нет глубоких знаний в конкретных областях. Далее на примерах будет понятно, что я имею ввиду.

Начальная настройка сервера с ИИ-агентом aish

Покажу на конкретных примерах, что умеет aish и как с ним работать. Для этого выполнил чистую установку SELECTOS 2.0 Hele. Останавливаться на этом не буду. Там всё то же самое, что и в обычной Debian. Дистрибутив можно свободно загрузить как в виде ISO-образа, так и готового QCOW2-образа для системы виртуализации.

После этого установил агента:

# apt install aish

Начал с простого, что я обычно сам делаю при настройке ОС. Попросил вернуть текстовые логи в формате syslog. В современных ОС используются бинарные логи systemd, но я предпочитаю возвращать и обычные текстовые. Отправил запрос агенту, предварительно запустив его:

# aish

Настрой запись системных логов в текстовом формате syslog.

Для начала агент предложил выполнить проверку, чтобы узнать, какая служба логирования сейчас активна:

# systemctl status rsyslog 2>/dev/null || systemctl status systemd-journald 2>/dev/null

Выяснил, что только systemd-journald. После этого предложил установить rsyslog:

# apt-get update && apt-get install -y rsyslog

И в конце проверил, что служба rsyslog запущена, логи пишутся.

Задачу успешно решил. К слову добавлю, что я из любопытства несколько раз прогонял эту задачу и каждый раз ход выполнения, предварительные и последующие проверки были разные, как это обычно бывает с современными LLM. Отсюда сразу сделаю важный вывод:

Как можно более подробно описывайте свою задачу, если хотите получить предсказуемый и повторяемый результат. Уточняйте, что и как вы хотите сделать, каким способом, если вам нужен конкретный, а решить задачу можно по-разному.

Далее я попросил настроить nftables, заблокировав все соединения, кроме SSH:

Установи на сервер nftables и разреши доступ к серверу по ssh. Всё остальное запрети.

Поставленная задача решена в лоб корректно. Что просил, то и получил. Итоговый набор правил:

table inet filter {
        chain input {
                type filter hook input priority filter; policy drop;
                ct state established,related accept
                iif "lo" accept
                tcp dport 22 ct state new,untracked accept
        }
}

В данном случае агент сам додумал, что надо разрешить уже установленные соединения и локальный интерфейс lo. Хотя это не всегда так с агентами работает. Если явно не прописать, может и не добавить сам. Лучше всё максимально конкретизировать, чтобы не было сюрпризов. Например, тут разрешён только TCP порт 22 на вход. Всё остальное, в том числе и протокол icmp заблокированы. В локальной сети чаще всего такой запрет не нужен, поэтому попросим агента разрешить ещё и icmp:

Добавь разрешающее правило для протокола icmp

Проверил с другого хоста, всё в порядке. Правила корректно отрабатывают.

Для примера начальной настройки сервера выполним ещё одну проверку:

Проверь, настроена ли синхронизация времени на сервере. Если настроена, то расскажи, с помощью чего. А если не настроена, то настрой.

Тут всё в порядке, никаких настроек делать не надо. Всё уже работает.

Настройка нового диска

Попробуем задачу немного посложнее. Для этого добавил новый диск в виртуальную машину. Ничего вообще не делал, попросил агента настроить новый диск, отформатировав его в ext4 и смонтировав в /mnt/data:

К виртуальной машине добавил новый диск. Проверь, что он подключен, отформатируй его в файловую систему ext4 и подключи в точку монтирования /mnt/data. Настрой автоматическое монтирование при загрузке через systemd mount.

Агент последовательно выполнил следующие команды:

# lsblk
# blkid
# mkfs.ext4 -L data /dev/sdb
# mkdir -p /mnt/data && mount /dev/sdb /mnt/data
# blkid -s UUID -o value /dev/sdb

Далее создал файл /etc/systemd/system/mnt-data.mount следующего содержания:

[Unit]
Description=Mount /mnt/data
After=local-fs.target
Before=local-fs.target

[Mount]
What=/dev/disk/by-uuid/88df6e7d-3003-4da5-992a-bdee59da4227
Where=/mnt/data
Type=ext4
Options=defaults

[Install]
WantedBy=local-fs.target multi-user.target graphical.target

Я перезагрузил сервер, убедился, что всё сделано корректно.

Отмечу по этой задаче один момент. Агент сделал в лоб то, что его просили. Он создал файловую систему на новом диске. При этом не создал на нём ни одного раздела. Формально, это и не нужно. Но бывают, хоть и редко, ситуации, когда это приводит к проблемам. Я не буду на этой теме останавливаться подробно. Просто поясню, что на диске лучше создать primary раздел, даже если он будет всего один и на весь диск, и уже на этом разделе создавать файловую систему. Агенту это не уточнили, он и не сделал. Если бы я не сделал уточнения про systemd mount, то автомонтирование могло быть настроено через файл /etc/fstab, как более популярное решение. Так что при любых раскладах в работе с LLM важно включаться самому и вникать в суть вещей, а не отдавать всё на откуп ИИ.

Установка сервера мониторинга Zabbix

Попробуем решить многоступенчатую прикладную задачу с помощью aish. Установим сервер мониторинга Zabbix. Я сформулировал такой запрос:

Установи сервер мониторинга Zabbix с использованием СУБД MariaDB и веб сервера Nginx с Php-fpm.

Агент последовательно выполнял необходимые действия. Я со всем соглашался. Никаких правок не вносил. На выходе всё получилось. Он развернул актуальную на момент написания статьи LTS версию 7.0

У меня не проброшены порты для этой виртуальной машины. И нахожусь я с ней в разных локальных сетях. Для меня проброшен только 22-й порт, а 80-й недоступен. Прошу агента помочь мне подключиться, не изменяя настроек на сервере.

Подключаюсь со своей машины, заменив user и server_ip на свои значения. Всё получилось.

Завершаю установку. Причём все проверки следующего этапа прошли успешно. То есть aish нормально подготовил окружение для запуска Zabbix Server. Единственное, что я сделал руками - отмотал окно чата агента с установкой и посмотрел имя базы данных, пользователя и пароль. Я изначально в запросе явно их не указал, агент сам придумал:

  • DBName=zabbix
  • DBUser=zabbix
  • DBPassword=ZabbixDBpass123

В самом конце установки получил ошибку, что установщик не может сохранить файл конфигурации в директории /etc/zabbix/. Передал ошибку агенту, он её быстро исправил.

Установка успешно завершена.

Получил настроенный Zabbix Server. Дальше можно развивать тему с раскаткой агентов. Я уже не стал этим заниматься.

На самом деле неплохо получилось. Я изначально не верил, что агент полностью всё установит сам. Думал, где-то ошибки будут, и нужно будет вмешаться. Не знаю, какая там модель используется у Selectel, но работает она более-менее разумно. Я тестировал этого агента полгода назад, он был заметно глупее.

Напоминаю, что всё это доступно бесплатно всем пользователям SELECTOS, в том числе и без подписки. То есть это по сути бесплатный агент.

Настройка резервного копирования

Рассмотрим пример настройки резервного копирования с помощью aish. Для этого возьмём базу данных MariaDB, выполним её дамп и положим на удалённый сервер.

Формулирую запрос:

Создай скрипт в директории /root/bin для бэкапа базы данных Zabbix в Mariadb. Параметры доступа возьми в локальных настройках Zabbix Server. Бэкап нужно сделать методом дампа базы данных. Полученный дамп сожми архиватором, в имени файла оставь метку времени и загрузи файл на удалённый сервер по SSH. Адрес сервера 10.100.1.19, пользователь root, удалённая директория /mnt/backup. Доступ на сервер по ключу в ~/.ssh. Примени наиболее распространённые практики для решения подобной задачи с помощью bash. Добавь необходимые проверки и локальное логирование.

Смотрю текст скрипта:

#!/usr/bin/env bash
set -euo pipefail

# === Configuration ===
DB_NAME="zabbix"
DB_USER="zabbix"
DB_PASS="ZabbixDBpass123"
DB_HOST="localhost"
DB_PORT="3306"

REMOTE_USER="root"
REMOTE_HOST="10.100.1.19"
REMOTE_DIR="/mnt/backup"

BACKUP_DIR="/var/backups/zabbix"
LOG_FILE="/var/log/zabbix-db-backup.log"
TMP_BACKUP="/tmp"

TIMESTAMP=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="BACKUPDIR/{DB_NAME}_${TIMESTAMP}.sql.gz"
SSH_KEY="${HOME}/.ssh/id_ed25519"

# === Logging ===
log() {
    local level="$1"
    shift
    echo "[(date'+%Y-%m-%d%H:%M:%S')][{level}] *"|tee-a"{LOG_FILE}"
}

# === Pre-flight checks ===
log "INFO" "Starting Zabbix DB backup"

command -v mariadb-dump >/dev/null 2>&1 || { log "ERROR" "mariadb-dump not found"; exit 1; }
command -v sshpass >/dev/null 2>&1 || command -v rsync >/dev/null 2>&1 || true

mkdir -p "${BACKUP_DIR}"
touch "${LOG_FILE}"

if [[ ! -f "${SSH_KEY}" ]]; then
    log "ERROR" "SSH key ${SSH_KEY} not found"
    exit 1
fi

# === Dump database ===
log "INFO" "Dumping database ${DB_NAME}..."

if ! mariadb-dump \
    --host="${DB_HOST}" \
    --port="${DB_PORT}" \
    --user="${DB_USER}" \
    --password="${DB_PASS}" \
    --single-transaction \
    --routines \
    --triggers \
    --events \
    --quick \
    --lock-tables=false \
    "DBNAME"2>>"{LOG_FILE}" | gzip > "${BACKUP_FILE}"; then
    log "ERROR" "Database dump failed"
    rm -f "${BACKUP_FILE}"
    exit 1
fi

if [[ ! -s "${BACKUP_FILE}" ]]; then
    log "ERROR" "Backup file is empty"
    rm -f "${BACKUP_FILE}"
    exit 1
fi

FILE_SIZE=(stat-c%s"{BACKUP_FILE}")
log "INFO" "Dump created: BACKUPFILE({FILE_SIZE} bytes)"

# === Upload via SCP ===
log "INFO" "Uploading to REMOTEUSER@{REMOTE_HOST}:${REMOTE_DIR}..."

if ! scp \
    -i "${SSH_KEY}" \
    -o StrictHostKeyChecking=accept-new \
    -o BatchMode=yes \
    "${BACKUP_FILE}" \
    "REMOTEUSER@{REMOTE_HOST}:${REMOTE_DIR}/"; then
    log "ERROR" "SCP upload failed"
    exit 1
fi

log "INFO" "Upload successful"

# === Cleanup local backup ===
rm -f "${BACKUP_FILE}"
log "INFO" "Local backup removed"

log "INFO" "Backup completed successfully"
exit 0

Навскидку всё нормально сделано. Прошу самостоятельно проверить работу:

Дамп на месте.

Я его посмотрел, база там живая, ошибок нет. Логирование тоже отработало:

Дальше можно развивать эту идею на приёмнике. К примеру, делать проверку дампа, ротировать архивные копии, удаляя старые, разворачивать дамп и т.д. Всё это aish сможет помочь сделать. Достаточно ему на словах объяснить, что вы хотите.

Заключение

Я давно работаю с LLM в том числе в агентском режиме. То, что я здесь продемонстрировал, может произвести впечатление на того, кто с этой технологией не знаком. Советую начинать изучать, не откладывая. Технологии заметно продвинулись вперёд. Практически все базовые задачи можно решать в автоматическом режиме с помощью ИИ-агентов. Это сильно упрощает вход в профессию, подтягивает новичков до некоторого среднего уровня практически сразу, пока они не столкнутся с какими-то проблемами, где агент их поводит по кругу.

В своих примерах я показал простые, базовые вещи для демонстрации возможностей агента aish для новичков. С его помощью вручную запускать задачи на серверах не обязательно. Можно идти дальше и сразу же просить его создать локальный git репозиторий, написать роль ansible для базовой настройки сервера, перечислить шаги, которые должны там выполняться. Далее дать ему доступ к какому-то тестовому серверу, где он сможет запускать и отлаживать написанные роли ансибла. Он же после завершения отладки сможет написать инструкцию, как использовать всё то, что он понаписал.

То есть буквально делаете вот так:

Используете полностью человекоподоный язык для взаимодействия с агентом. Он вам всё расскажет, покажет, организует. Если что-то не понимаете - спрашивайте. На сегодняшний день - это лучший тренажёр для погружения в профессию. Самое главное - вникайте в то, что делает агент, проверяйте, а не бездумно исполняйте. Тогда он станет вашим верным помощником и учителем. Плейбук он написал нормально и с первого раза. В принципе, не удивительно, он очень простой. Но если вы никогда их не писали, то это будет огромное подспорье в автоматизации процессов.

В таком виде SELECTOS и её бесплатный (по крайней мере пока) агент aish - отличный инструмент для погружения в технологию ИИ-агентов. Не нужно ничего настраивать, подключать, разбираться с доступом к моделям, особенно иностранным. Можно сразу брать и делать в готовой системе.

Реклама, ООО «Селектел - Лаб», ИНН 7810951536, erid: 2SDnjd8gQHh

Автор Zerox

Владимир, системный администратор, автор сайта. Люблю настраивать сервера, изучать что-то новое, делиться знаниями, писать интересные и полезные статьи. Открыт к диалогу и сотрудничеству. Если вам интересно узнать обо мне побольше, то можете послушать интервью. Запись на моем канале - https://t.me/srv_admin/425 или на сайте в контактах.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Нажимая кнопку "Отправить комментарий" Я даю согласие на обработку персональных данных.
Много интересного в канале автора в Telegram →
This is default text for notification bar