Единица 9 / 11

Генерирање на скрипти и автоматизација: Bash, Python и PowerShell

Добивки:

  • Способност да се разберат силните страни на Bash, Python и PowerShell и вештачката интелигенција да произведува безбедни, заштитени нацрти на скрипти
  • Можност за додавање заштитни огради на скрипти како што се set -euo pipefail, проверка на празна променлива, режим на суво работење и логирање
  • Способност да се читаат деструктивни наредби и да се испробаат во изолирана средина и прво со суво, и да се примени дисциплината да не се вметнува тајната во сценариото.

Духот на DevOps е сумиран во една реченица: „Автоматизирајте ја работата што ја работите двапати“. Секоја повторлива задача што се прави рачно - чистење на дневник, преземање резервни копии, проверка на здравјето на серверот, сериска обработка на датотеки - бара време и на крајот е оштетена од човечка грешка. Скриптите ги преземаат овие работи: мали програми кои извршуваат серија команди на секвенцијален, сигурен и повторлив начин. Професионалецот на DevOps често користи три јазици: Bash (за скрипти на школка на Linux/Unix), Python (за сложена логика, повикување API, манипулација со податоци) и PowerShell (за управување со Windows и облак).

Вештачката интелигенција е можеби онаму каде што ја нуди најпрактичната вредност во генерирањето скрипти: производство на работен нацрт од опис на една реченица, решавање на мистериозна грешка, преведување на скрипта на друг јазик. Но, скриптата е опасна кога се извршува слепо - погрешно rm, Remove-Item -Recurse ќе ги избрише датотеките неповратно. Затоа мотото на оваа единица е: Оставете ја вештачката интелигенција да го напише сценариото, вие прочитајте го, прво пробајте го во безбеден режим, а потоа стартувајте го.

Кој јазик да се избере и кога? Грубо правило: ако работата се состои од извршување на неколку системски команди по ред (копирање датотека, рестартирање на услугата, преземање архива) Bash е најприроден избор бидејќи Linux е сеприсутен на серверите. Ако работата вклучува логика на одлучување, циклус, трансформација на податоци, барање API или JSON обработка - односно логика која надминува 20 линии - Python се издвојува по својата читливост и богати библиотеки; Комплексната Bash скрипта брзо станува неразбирлива, додека Python останува лесен за одржување. Ако работата вклучува управување со сервери на Windows, Active Directory или Azure, PowerShell е природно опкружување бидејќи неговата објектно-ориентирана природа длабоко се интегрира со овие платформи. Одредувањето на јазикот што го избравте и зошто кога барате скрипта до вештачката интелигенција, осигурува дека излезот е соодветен и идиоматски за вашата околина.

Чекор по чекор: безбедно генерирање скрипти

  1. Опишете ја задачата и околината. Што ќе направи, кој ОС/школка, какви ограничувања?
  2. Побарајте заштитни огради. Во bash, поставете -euo pipefail (стоп при грешка, стоп на недефинирана променлива), барање за потврда за опасни операции, поместете се прво наместо бришење.
  3. Побарајте режим на суво работење. Оставете го сценариото да пишува што да прави со --dry-run, но не правете го тоа.
  4. Прочитајте и разберете. Потврдете што прави секој ред, особено операциите за бришење/преместување/мрежа.
  5. Пробајте го во изолирана средина. Во папката за тестирање, стартувајте ја со примерок податоци.
  6. Додај во сеча. Нека скриптата снима што прави за да може да се гледа подоцна.

Основи на безбедно скриптирање

Сценариото за производство треба да ги содржи овие заштитни огради:

  • Запирање во случај на грешка. Баш: сет -euo pipefail. PowerShell: $ErrorActionPreference = „Стоп“. Ако еден чекор не успее, следните не треба да работат.
  • Идемпотенција (повторливост). Ако сценариото работи двапати, не треба да предизвика двојна штета; „Ако веќе го имате, прескокнете го“ логика.
  • Одобрување и суво работење. За деструктивни операции „сигурен си?“ или знамето --dry-run.
  • Влезна валидација. Дали параметрите се очекувани? Празна променлива може да го претвори rm -rf „$DIR“/ во rm -rf / катастрофа.
  • Сеча. Евиденција за тоа што е направено и кога.
Совет: Најопасната грешка во Bash е бришењето со празна променлива. rm -rf „$DIR“ се обидува да го избрише root директориумот ако $DIR е празен. поставете -u (стоп на недефинирана променлива) и проверка на [ -n „$DIR“ ] пред бришењето е спас. Експлицитно побарајте ги овие заштити кога барате скрипти од вештачката интелигенција.

Безбедност: тајни и деструктивни команди

Две големи опасности:

  1. Вградување на тајната во сценариото. Лозинката не смее да биде обичен текст во скриптата за токени; Мора да се чита од променливата на околината или од сводот. Скриптите одат во Git; закопана тајна е трајно истекување.
  2. Деструктивни команди. rm -rf, Remove-Item -Recurse -Force, DROP TABLE, terraform уништување - кога ќе ги видите овие во скрипта, застанете и размислете двапати. Никогаш не пробувајте прво со деструктивната команда генерирана од вештачката интелигенција во прод.
Внимание: Кога ќе ѝ кажете на вештачката интелигенција да „напише скрипта што ги чисти овие датотеки“, внимателно прочитајте го опсегот на пронаоѓањето ... -избриши или rm командата што ја произведува. Мачка (*) или погрешна патека ќе избрише повеќе отколку што сакате да избришете. Секогаш стартувајте ја скриптата прво со режимот „листа за бришење“ наместо бришење.

Споредба на три јазици

критериум

баш

Пајтон

PowerShell

Каде е најдобро

Линукс школка, команден синџир

Комплексна логика, API, податоци

Управување со облак на Windows

Крива на учење

Средно (заробено)

лесно

средно

Ракување со грешки

сет -euo pipefail

пробај/освен

пробај/фати, -ErrorAction

преносливост

Unix/Linux/mac

насекаде

Крос-платформа (PS 7+)

кога

Кратко, системот работи

Логика подолга од 20 линии

Windows/AD/Azure

три мини футроли

Случај 1 - 2 часа занает во 5 минути. Еден инженер трошеше 2 часа собирајќи и архивирајќи дневници од 40 сервери секоја недела. Тој имал вештачка интелигенција да ја опише задачата и да постави -euo pipefail + заштита при суво работење и да генерира Bash скрипта. Прво ја потврди скриптата со суво извршување, а потоа ја поврза со закажаната задача (cron). Неделната работа се намалува на 5 минути и се елиминира човечката грешка.

Случај 2 - избегната нулта променлива катастрофа. Имаше rm -rf „$TARGET“/* во скриптата за чистење произведена од вештачката интелигенција, но ако TARGET не беше доделен некаде, таа остана празна. Тоа го сфатил додека студирал како инженер; постави -u и [ -n „$TARGET“ ] || додадена контрола на излезот 1. За време на тестирањето, променливата остана нула и скриптата запре безбедно наместо катастрофално.

Случај 3 - зафатен е вграден токен. За погодност, вештачката интелигенција додаде TOKEN = „ghp_realtoken“ линија во скрипта на Python што бара API (како пример). Инженерот го отстрани ова и го промени во читање од променливата на околината со os.environ["TOKEN"] и го откажа и обнови токенот. Ако сценариото отиде во Git, токенот ќе биде јавен.

Четири шаблони за копирање

1) Безбедна скрипта на Bash:

Напишете Bash скрипта: [TASK]. Задолжителни правила: - `поставете -euo pipefail` на почетокот.- Проверете дали променливата не е празна каде и да се брише/се движи. Читање од променливата на околината. - Печатете информативен дневник на секој чекор. Коментирајте го сценариото и означете ја најопасната линија.

2) Опис/контрола на скриптата:

Опишете ја следнава скрипта линија по ред и проверете ја безбедноста: вградена тајна, деструктивна команда (rm/Remove-Item/DROP), невалиден влез, недостаток на справување со грешки? Напишете го секој ризик по важност и поправка. Скрипта: [CODE]

3) Превод на јазик:

Преведете ја таа скрипта [SOURCE LANGUAGE] во [TARGET LANGUAGE]. Чувајте го однесувањето дословно, користете идиоматско справување со грешките на целниот јазик, преместете ги сите вградени тајни во променлива на околината. Забележете ги точките што може да се однесуваат поинаку. Скрипта: [CODE]

4) Планирана задача (крон/закажана задача):

Користете ја оваа скрипта [ФРЕКВЕНЦИЈА: на пр. Напишете дефиниција за распоред ([cron / systemd timer / Windows Task Scheduler]) што ќе работи [во 02:00 секоја вечер]. Додајте како да ме предупредите за неуспех (код за најава/излез/известување) и како да спречите преклопување.

Слаб промпт / Силен промпт

Слаб: „Напишете скрипта што ги брише старите датотеки“.

Резултат: rm скрипта без опсег, незаштитена, сува-рунирана; Ако работи во погрешна папка, ќе се избрише неповратно.

Силно: "Напишете баш скрипта за бришење датотеки .log постари од 30 дена под /var/log/app. Користете set -euo pipefail, запрете ако целниот директориум е празен, наведете што да избришете со --dry-run first, евидентирајте ја секоја трансакција, не вградувајте ја тајната. Означете ја најопасната линија."

Разлика: второто барање го дава целосниот опсег, заштитните огради и очекувањата за суво возење; Излезот може да се работи безбедно.

Вообичаени грешки

  • Водење на сценариото без да го прочитате. Бришењето/преместувањето на редови особено води до катастрофа.
  • Не проверува празни променливи. Класична катастрофа на бришење на root директориумот со rm -rf „$X“/.
  • прескокнете `set -euo pipefail` / `-ErrorAction Stop`. Чекор пука, сценариото слепо продолжува.
  • Вградување на тајната во сценариото. Постојано истекување до Git.
  • Деструктивен процес без суво работење. Прво „покажи ми што да правам“, потоа направете го тоа.
  • Правејќи го првиот обид во прод. Трчање без изолирана средина за тестирање.

Сумирано

DevOps е уметност на автоматизација; Повторливата работа е делегирана на скриптите Bash, Python и PowerShell. Вештачката интелигенција е многу корисна за изготвување скрипти, дебагирање и преведување јазици - но безбедната скрипта треба да вклучува штитници за грешки како set -euo pipefail, проверка на нула променлива, режим на суво извршување, вградена тајност и евиденција. Ваша одговорност е да ја прочитате и тестирате секоја скрипта, особено оние што содржат деструктивни команди, во изолирана средина и прво на суво.

Задача за апликација

Изберете повторлива задача (архивирање на дневници, резервна копија, чистење). (1) Нека AI генерира заштитена скрипта со шаблонот „Secure Bash скрипта“. (2) Проверете ја истата скрипта за безбедност како шаблонот „Опис/ревизија на скрипта“ и пронајдете ја најопасната линија што вештачката интелигенција ја означила. (3) Потврдете го неговото однесување со извршување на скриптата со примероци од датотеки во тест папка, прво со --dry-run.

листа за проверка

  • [ ] Ја напишав задачата што не ја сакам, ОС/школка и заштитните огради.
  • [ ] Скриптата има грешка при запирање како set -euo pipefail / -ErrorAction Stop.
  • [ ] Додадов празна променлива и проверка на влезот пред бришење/преместување.
  • [ ] Постои --dry-run/потврден механизам за деструктивни операции.
  • [ ] Нема тајна вградена во сценариото; вредностите доаѓаат од променливата/случајот на околината.
  • [ ] Првиот тест го направив во изолирана средина за тестирање со суво.