Забудьте о классическом принте "Hello World". Для агентской CLI настоящий "привет мир" – это автономное исследование системы и решение первой реальной задачи. В этой главе мы проведем ваш первый сеанс связи.
После установки введите простую команду:
gemini "Кто ты и что ты видишь в этой системе?"
Что произойдет под капотом?
1. Агент проанализирует переменные окружения.
2. Запустит `whoami`, `hostname` и, возможно, `ls`.
3. Ответит: "Я – агент Gemini. Я нахожусь на узле `vPSrasil`, у меня есть доступ к Docker и файлам в `/home/noc`. Я вижу 3 активных проекта…"
Допустим, вы забыли, какие контейнеры запущены на удаленном узле 1.3.
Запрос: "Зайди на 1.3 и перечисли все Docker-контейнеры, которые потребляют больше 200Мб памяти."
Лог действий агента:
`run_command("ssh 1.3 'docker stats –no-stream –format \"{{.Name}}\t{{.MemUsage}}\"'")`
Анализ вывода (например, `gitlab-ee 2.4GB`, `nginx 15MB`).
Ответ: "На узле 1.3 только контейнер `gitlab-ee` превышает лимит…"
Попробуем найти ошибку в логах Nginx, которая случилась 10 минут назад.
Запрос: "Найди в логах /var/log/nginx/error.log все упоминания 'upstream timed out' за последние 15 минут и скажи, какой IP был источником."
Инструменты, которые использует агент:
`run_command("date -d '15 minutes ago' +'%Y/%m/%d %H:%M:%S'")`
`grep_search` или `awk` для фильтрации лога по времени.
Извлечение IP из строки лога.
Gemini CLI поддерживает два режима:
1. CLI Mode (`gemini "task"`): Запустил, получил результат, вышел. Идеально для скриптов Bash.
2. REPL Mode (`gemini`): Живой диалог. Контекст сохраняется между командами. Вы можете сказать "А теперь перезапусти этот сервис", и агент поймет, о каком сервисе шла речь ранее.
Никогда не доверяйте агенту на 100% в первый день. Используйте флаг `–dry-run` или просто внимательно читайте "Thought" блок. Если агент хочет выполнить `rm -rf`, а вы просили "почистить логи", остановите его.
> [!TIP]
> Начните с команд "Read-only". Попросите агента объяснить структуру вашего проекта или проанализировать `docker-compose.yml`.
––
Ключевые мысли главы:
Агентский Hello World – это **действие**, а не текст.
**SSH + Docker + Grep*– святая троица первого запуска.
Используйте **REPL*для сложных многошаговых задач.
Для агента Gemini CLI протокол SSH – это не просто способ зайти на сервер. Это фундамент его "сенсорной системы", позволяющий ему дотягиваться до самых удаленных узлов вашей сети. В этой секции мы разберем, как сделать SSH-туннели максимально надежными и прозрачными для ИИ.
В классическом администрировании SSH используется интерактивно. Для агента SSH – это механизм удаленного вызова процедур (Remote Procedure Call).
Типичный сценарий:
Вы просите агента: "Проверь статус БД на сервере 1.3".
Агент не просто заходит туда. Он выполняет цепочку:
`Local -> Jump Host (1.1) -> Target (1.3)`.
Когда ваша сеть сегментирована, агент должен знать, как проходить через "шлюзы".
Использование директивы `ProxyJump` в `~/.ssh/config` – лучший способ сделать это для агента.
Пример конфигурации для ИИ-агента:
Host backend-node
HostName 10.252.1.3
ProxyJump gateway-node
User noc
IdentityFile ~/.ssh/id_ed25519_agent
Благодаря этой записи, агент в промпте может просто написать: `ssh backend-node "uptime"`. Ему не нужно знать всю топологию сети, SSH-клиент сделает это за него. Это экономит контекстное окно модели!
Иногда агенту нужно получить доступ к сервису, который доступен только локально на удаленном узле (например, административный порт Redis).
**Local Forwarding:*`ssh -L 6379:localhost:6379 backend-node`. Агент "прокидывает" порт себе и может работать с Redis так, будто он запущен локально.
**Использование агентом:*Агент сам понимает, когда нужно поднять туннель: "Сервис доступен только на 127.0.0.1 удаленного узла. Я создам временный SSH-туннель для анализа".
Автономному агенту нельзя вводить пароли. Использование SSH-ключей (ED25519) – единственный путь.
Важно: Чтобы агент мог переходить с одного сервера на другой без копирования приватных ключей везде, используйте `ForwardAgent yes`. Это позволяет агенту использовать свои локальные ключи на любом удаленном сервере.
SSH-сессии могут "подвисать". Агент может ждать вывода вечно.
Настройки для надежности:
ServerAliveInterval 60
ServerAliveCountMax 3
Эти опции заставляют SSH-клиент завершаться, если сервер перестал отвечать, что позволяет агенту получить ошибку и перепланировать свои действия (например, попробовать другой маршрут).
Передаче файлов между узлами агент отдает приоритет `scp` или `rsync`. Для него это атомарная операция.
> "Я вижу, что патч готов на Gateway. Я перенесу его на Backend через scp и применю там".
––
Резюме раздела:
SSH для Gemini CLI – это не просто протокол, это его "нервная система". Чем чище и прозрачнее настроен ваш SSH-конфиг, тем быстрее и эффективнее агент будет перемещаться по вашей инфраструктуре. В следующей секции мы перейдем к созданию еще более глубокой и безопасной связи – меш-сети WireGuard.
В то время как SSH идеален для точечных "уколов", для полноценной жизни агенту нужна целостная сетевая среда. WireGuard – это современный протокол VPN, который работает быстрее всех конкурентов и имеет минимальную поверхность атаки. В этой секции мы научим агента Gemini CLI управлять меш-сетью.
В отличие от OpenVPN c его сложным процессом рукопожатия и медленным переключением, WireGuard работает по принципу Peer-to-Peer. Он не держит постоянного соединения, когда нет трафика.
**Для агента это означает:*Минимальные задержки (Latency). Агент получает ответ от удаленного узла так же быстро, как от соседа по стойке.
**Безопасность:*Если агент видит, что VPN-интерфейс `wg0` упал, он блокирует все свои сетевые попытки до восстановления связи.
Главная проблема администрирования – сложная адресация. Агенту сложно помнить, что сервер `A` доступен через `10.0.1.5`, а сервер `B` через `192.168.50.22`.
Решение через WireGuard: Все узлы объединяются в одну подсеть (например, `10.8.0.0/24`).
Агент теперь может обращаться к узлам по простым IP: `10.8.0.1`, `10.8.0.3` и т.д. Это упрощает его логику планирования почти в 10 раз.
Агент может сам управлять расширением вашей сети.
> "Я вижу новый узел 1.5. Я сгенерирую для него пару ключей WireGuard, добавлю его публичный ключ в конфиг шлюза и пришлю вам команду для настройки узла".
Код, который может сгенерировать агент:
wg genkey | tee privatekey | wg pubkey > publickey
Агент понимает структуру `wg0.conf` и может безошибочно вносить в него изменения с помощью `sed` или `awk`.
Если вы хотите, чтобы агент имел доступ к интернету через защищенный узел, он должен настроить форвардинг трафика.
**Задача агента:*"Настрой `wg0` так, чтобы весь трафик на `8.8.8.8` шел через туннель".
**Действие агента:*Проверка `/proc/sys/net/ipv4/ip_forward` и настройка таблиц роутинга.
WireGuard позволяет агенту менять свои IP-адреса на лету (например, если вы переносите Gateway с одного провайдера на другой). Трафик не рвется. Агент просто продолжает выполнять свою задачу в фоне, даже если его внешний IP изменился 10 раз за сессию.
Агент в фоне может периодически выполнять `wg show` и анализировать время синхронизации (Latest Handshake). Если он видит, что узел молчит более 3 минут, он может инициировать процедуру рестарта VPN или поднять тревогу.
––
Резюме раздела:
WireGuard превращает разрозненные серверы в единый, защищенный "цифровой организм". Для Gemini CLI это означает упрощение навигации и гарантированную безопасность коммуникаций. В следующей секции мы разберем, как защитить этот организм от внешнего мира с помощью мощных фаерволов IPTables и NFTables.
Безопасность сетевой ткани (которую мы построили в прошлых секциях) бесполезна, если её периметр не защищен фаерволом. В этой секции мы научим агента Gemini CLI работать с "низкоуровневой гвардией" ядра Linux – IPTables и современным NFTables.
Для обычного человека правила фаервола – это запутанные цепочки команд. Для агента это набор логических условий.
Агент воспринимает задачу так: "Запрети всё по умолчанию (DROP), кроме порта 22 для моего IP и порта 51820 для WireGuard".
Несмотря на возраст, IPTables остается самым распространенным инструментом. Агент использует его для быстрых манипуляций.
Сценарий блокировки атаки:
Если агент видит в логах Nginx атаку типа "грубая сила" (Brute-force), он может мгновенно выполнить:
iptables -A INPUT -s [ATTACKER_IP] -j DROP
Это происходит на порядок быстрее, чем если бы это делал человек. Агент "чувствует" атаку через логи и реагирует на уровне ядра.
NFTables – это замена IPTables с более чистым синтаксисом и высокой производительностью.
Агент отдает предпочтение NFTables, если он доступен в системе, так как его конфиги более структурированы и легче поддаются автоматическому анализу.
Агент может "прочитать" текущее состояние сети одним взглядом:
`nft list ruleset` для агента – это JSON-подобная структура знаний, по которой он понимает, какие "дыры" открыты в вашей системе.
Агент учитывает состояние соединений (Stateful Inspection). Он знает, что если он инициировал исходящий запрос к API Gemini, то ответ должен быть пропущен фаерволом автоматически.
**Правило агента:*"Разреши входящий трафик для уже установленных соединений (RELATED, ESTABLISHED)".
Главный риск – агент может заблокировать сам себя (и вас).
> "Я закрою порт 22, чтобы никто не ломался. Ой, я сам теперь не могу зайти по SSH".
Механизм защиты в Gemini CLI:
Перед применением правил фаервола агент обязан добавить правило "Безопасного окна" или использовать временное применение скрипта (например, через `cron`), который откатит правила назад через 60 секунд, если агент не подтвердит свою связность.
О проекте
О подписке
Другие проекты
