Vienība 2 / 11

Automatizācijas skripti: droša Bash, PowerShell un Python ģenerēšana

Ieguvumi:

  • Spēja ražot Bash, PowerShell un Python automatizācijas skriptus ar skaidriem ierobežojumiem un drošības margas ar mākslīgo intelektu
  • Spēja pievienot katram skriptam tādus principus kā idempotence, sausā palaišana, kļūdu apstrāde un atcelšana, kā arī lietot ciklu "ģenerēt, nostiprināt, pārbaudīt".
  • Spēja saprast, ka radītā skripta izpilde nenozīmē, ka tā ir droša, un apgūt ieradumu uzņemties atbildību, lasot un pārbaudot destruktīvas rindas.

Automatizācijas skripti: droša Bash, PowerShell un Python ģenerēšana, izmantojot AI

Sistēmas administratora ļaunākais ienaidnieks ir atkārtots roku darbs: pieslēgšanās katrai mašīnai un žurnālu tīrīšana, viena un tā paša lietotāja atvēršana divdesmit serveros, viena un tā pati veselības pārbaude katru rītu. Šī atkārtošanās ir atvērta gan laika, gan cilvēka kļūdām. Automatizācijas skripts ir neliela programma, kas deleģē šīs iterācijas datoram — Linux pasaulē visbiežāk tiek rakstīta Bash (čaulas komandu valoda), Windows pasaulē PowerShell (Microsoft automatizācijas apvalks) un Python no platformas neatkarīgam darbam. AI neticami ātri izstrādā, izskaidro un uzlabo šo skriptu pirmo uzmetumu. Bet skripts nav teksts, tas ir spēks, kas darbojas jūsu sistēmā; Atšķirībā no Excel formulas, ja tā ir nepareiza, tā izdzēš failu, aptur pakalpojumu un pārtrauc piekļuvi. Tāpēc šīs vienības solījums ir šāds: AI raksta skriptu, jūs to izlasiet, pārbaudiet un vadāt, uzņemoties atbildību.

Šajā nodaļā jūs uzzināsit, kā ar AI izveidot drošus, lasāmus un izgūstamus skriptus; Dzīvības glābšanas principi, piemēram, idempotence (viena un tā paša skripta divreiz palaišana nerada bojājumus) un sausa darbība; un jūs uzzināsit pārbaudes, kas jāveic skriptam pirms tā laišanas ražošanā.

Kāpēc skriptu veidošana ar AI ir tik spēcīga?

Pat pieredzējis administrators var nezināt precīzu Bash cilpas sintaksi, PowerShell cmdlet (komandas) vai Python izmēģinājuma/izņemot bloku parametrus no galvas. AI acumirklī aizpilda šo robu: jūs izskaidrojat nolūku vienkāršā turku valodā, un tas veido darba kontūru. Turklāt jūs varat dot AI esošu skriptu un teikt "izskaidrojiet to", "pievienojiet kļūdu apstrādi", "padariet to lasāmāku". Tas saīsina mācīšanās līkni un paātrina jaunāko komandu dalībniekus.

Bet ar varu nāk arī atbildība. Lielāko daļu laika AI ģenerēts skripts pareizi ieraksta "laimīgo ceļu" (ja viss ir kārtībā); bet tas var palaist garām malas gadījumus (trūkst faila, pilns disks, pārtraukts tīkls) vai izdarīt bīstamus pieņēmumus. Tāpēc padomājiet par skriptu ģenerēšanu ar AI trīs posmos: ģenerējiet, sacietējiet, pārbaudiet.

Soli pa solim: droša skriptu ģenerēšana

  1. Skaidri uzrakstiet nodomu un ierobežojumu. Kura operētājsistēma, kura čaulas versija, kādi failu ceļi, kādas tiesības? Tāpat kā "Ubuntu 22.04, Bash 5, sudo nav root, darbojas tikai zem /opt/app/logs". Neskaidrs pieprasījums rada bīstamus pieņēmumus.
  2. Jautājiet pēc drošības margām. Pieprasīt skriptam "stop on error" (iestatīt -euo pipefail programmā Bash), pieprasīt destruktīvu darbību apstiprinājumu, dublēšanu pirms darbības un sausās darbības režīmu. Šīs aizsargmargas fiksē malas stāvokļus, kurus AI apiet.
  3. Rakstiet idempotents. Palaižot skriptu otrreiz, nevajadzētu radīt kļūdas vai bojājumus. Izveidojiet loģiku "izlaist, ja lietotājs jau pastāv", "izveidojiet direktoriju, ja tas neeksistē, nepieskarieties tam, ja tas pastāv". Tas ļauj automatizācijai atkal un atkal darboties droši.
  4. Izlasi un saproti. Izlasiet katru izveidoto rindiņu. Lūdziet AI atsevišķi atzīmēt destruktīvas komandas (rm, Remove-Item, DROP).
  5. Pārbaude ar sauso darbību. Vispirms palaidiet to režīmā "saku, kas jādara", nevis faktiskajās darbībās. Ja izvade ir tāda, kādu gaidāt, pārslēdzieties uz reālo režīmu — un vispirms testa iekārtā.
  6. Sagatavojiet savu atgriešanos. Vai skripts dublē? Vai jūs zināt, kā atjaunot dublējumu? Vai notiek mežizstrāde, vai vēlāk varat redzēt, ko tā dara?
Padoms. Katrā destruktora skriptā ir jāiekļauj mainīgais DRY_RUN=true un karodziņa --apply. Noklusējuma darbība ir rakstīt, kas notiks, neko neizdzēšot; Ļaujiet faktiskajai dzēšanai darboties tikai tad, ja ir skaidri norādīts --apply. Šis viens ieradums novērš katastrofas karjeras laikā.

trīs mini futrāļi

1. gadījums — Idempotence saglabāta 3 stundas. Administrators uzrakstīja skriptu, kas instalēja to pašu uzraudzības aģentu 25 serveros. Pirmā versija nebija idempotenta: tā izjauca konfigurāciju otrajā piegājienā, ja aģents jau bija instalēts. Inženieris lika AI pievienot loģiku "pārbaudiet, vai tas ir instalēts, izlaidiet, ja tas ir". Nākamajā apkopes logā skripts nejauši aktivizējās divas reizes, taču tas nenodarīja nekādu kaitējumu. Idempotence padarīja 25 serveru atkopšanu nevajadzīgu.

2. gadījums — ar sauso darbību tika saglabāts saknes direktorijs. Viena komanda saņēma Bash skriptu, kas iztīrīja vecās dublējumkopijas. Ja mainīgais bija tukšs, ceļš kļuva par /, nevis /backups/ — klasisks apdraudējums. Inženieris vispirms to palaida DRY_RUN režīmā, sastinga, kad izvadā ieraudzīja rindu, kas līdzīga rm -rf /, un pievienoja mainīgā pārbaudi (: "${BACKUP_DIR:?nevar būt tukšs}"). Sausajā skrējienā tika konstatēta kļūda, kas noslaucīja visu disku, pirms tas nonāk ražošanā.

3. gadījums — kļūdu pārvaldība neļāva tai kādu nakti pamosties. PowerShell skripts arhivēja žurnālus, kad disks bija pilns. Pirmā versija klusi neizdosies, ja tīkla daļa nebūtu pieejama, un turpinātu aizpildīt disku. AI tika pievienots "Pārbaudiet panākumus katrā darbībā, ja tas neizdodas, paziņojiet e-pastā un pārtrauciet". Pēc nedēļas stabs tika salauzts; Skripts apstājās un brīdināja, disks nebija pilns, neviens nepamodās 3 naktī.

Četras kopējamas veidnes

1) Droša Bash skripta ģenerēšana:

Jūsu loma: vecākais Linux automatizācijas inženieris. Uzrakstiet skriptu Ubuntu 22.04 / Bash 5. Mērķis: [mērķis]. Noteikumi:- Sāciet ar "set -euo pipefail".- Validējiet nepieciešamos mainīgos ar ": ${VAR:?}".- Veiciet destruktīvas darbības ar noklusējuma DRY_RUN=true; Ļaujiet reālajai lietojumprogrammai darboties tikai ar karogu --apply. - Reģistrējiet katru stdout darbību, pārtrauciet ar jēgpilnu kļūdu ziņojumu. - Padariet to idempotentu (lai tas neradītu bojājumus otrajā piegājienā). Pēc tam: atsevišķi atzīmējiet potenciāli destruktīvās līnijas un uzrakstiet 3 gadījumus, kas man jāpārbauda pirms ražošanas.

2) Esošā skripta nostiprināšana:

Sagatavojiet šādu skriptu ražošanai: (1) pievienojiet kļūdu apstrādi un reģistrēšanu, (2) padariet to idempotentu, (3) ievietojiet destruktīvas komandas aiz sausās palaišanas, (4) iegūstiet mainīgā cietā kodētos ceļus un noslēpumus. Īsi aprakstiet katru rindiņu, ko mainījāt, un kāpēc. Skripts: [skripts]

3) PowerShell drošā automatizācija:

Jūsu loma: Windows automatizācijas eksperts. Uzrakstiet ar PowerShell 5.1 saderīgu skriptu. Mērķis: [mērķis]. Noteikumi: - Sāciet ar "$ErrorActionPreference = 'Stop'". - Pievienojiet -WhatIf atbalstu destructor cmdlet (noklusējuma WhatIf). - Aptiniet katru darbību ar try/catch, log error. - Akreditācijas datu cietā kodēšana; Izmantojiet parametru vai drošu ievadi. Atzīmējiet destruktīvas līnijas un ierakstiet atsaukšanas darbības.

4) Cron/shchedule izteiksmes dekodēšana un pārbaude:

Izskaidrojiet šo cron apgalvojumu vienkāršā turku valodā un ierakstiet nākamos 3 izpildlaikus: [izteiksme]Tāpat, ja mans mērķis ir "[mērķis]", vai šis apgalvojums ir pareizs, vai arī ir jūsu ieteiktais labojums? Ņemiet vērā arī laika perioda efektu.

Vāja uzvedne / spēcīga uzvedne

Vāja uzvedne:

Uzrakstiet man skriptu, kas notīra žurnālu.

Šī uzvedne ir bīstama: nav skaidrs, kura OS, kurš direktorijs, kāds vecuma ierobežojums, kāds apsardzes margas. AI var nodrošināt viengabala, destruktīvu un nepārbaudāmu rm.

Spēcīga uzvedne:

Jūsu loma: vecākais Linux automatizācijas inženieris. Uzrakstiet žurnāla tīrīšanas skriptu Ubuntu 22.04 / Bash. Mapē /opt/app/logs dzēsiet tikai .log failus, kas ir vecāki par 30 dienām. Noteikumi: set -euo pipefail; Apstipriniet mainīgos BACKUP_DIR un LOG_DIR (apturiet, ja tas ir tukšs); žurnālfailu saraksts pirms dzēšanas; Ļaujiet DRY_RUN=true būt noklusējuma, faktiskā dzēšana tikai ar --apply; Lai tas ir idempotents. Atzīmējiet destruktīvās līnijas un uzrakstiet 3 scenārijus, kas man jāpārbauda.

funkciju

Vājš/ātrs skripts

rūdīts skripts

Kļūdu apstrāde

Nē, klusa neveiksme

set -euo pipefail, try/catch

destruktīva darbība

Darbojas tieši

Sausā darbība + atvērts pārbaudes karodziņš

Restartēt

var nodarīt kaitējumu

Idempotens, drošs

slepenā vadība

cieti kodēts

Mainīga/slēpta ievade

atsaukt

Nav

Dublēšanas + atjaunošanas solis

Biežas kļūdas

  • Iznīcinoša skripta palaišana bez sausās palaišanas. Ja neredzat skriptu, kas satur rm, Remove-Item, DROP first sausā režīmā, maksā disku.
  • Izlaist nulles mainīgo pārbaudi. Tukšs ceļa mainīgais padara / /backups/ vietā; : Noteikti pārbaudiet ar "${VAR:?}".
  • Aizmirstot par identitāti. Skripts saplīst, palaižot divas reizes, padarot automatizāciju neuzticamu.
  • Cietie kodēšanas noslēpumi. Paroles un atslēgas ierakstīšana skriptā ir noplūde, kad kopīgojat šo skriptu.
  • Testēšana ražošanā. Iestudēt pirmo iestudējumu nozīmē mēģināt uz skatuves; vispirms pārbaudiet mašīnu.
Uzmanību: nepieņemiet AI sniegto skriptu tikai tāpēc, ka "tas darbojās, tas nozīmē, ka tas ir pareizs". Tas, ka tas darbojas, nenozīmē, ka tas nav destruktīvs. Skripts var darboties pa laimīgo ceļu un dzēst datus malas stāvoklī; Īsts pārbaudījums ir malas gadījumi.

Rezumējot

Automatizācijas skripti novērš atkārtošanos un samazina cilvēka kļūdas; AI neticami ātri ģenerē, izskaidro un stiprina šos skriptus. Bet skripts ir darba spēks: ja tas ir nepareizs, tas dzēš, aptur, pārtrauc. Tāpēc izveidojiet ciklu “ražot, sacietēt, pārbaudīt”. Katrā destruktīvajā skriptā iekļaujiet kļūdu apstrādi, idempotenci, sauso darbību un atkāpšanos. Izvelciet mainīgā lieluma noslēpumus, veiciet pirmo palaišanu testa mašīnā. AI skripts raksta; Jūsu uzdevums ir to izlasīt, pārbaudīt un uzņemties atbildību par tā darbību.

Lietojumprogrammas uzdevums

Izvēlieties uzdevumu, ko savā darbā atkārtojat manuāli (piemēram, žurnāla tīrīšana, lietotāja atvēršana, veselības pārbaude). Pieprasiet izklāstu no AI, izmantojot iepriekš norādīto veidni “Secure Bash skripts” vai “PowerShell droša automatizācija”. Izlasiet ģenerēto skriptu rindiņu pa rindiņai un atzīmējiet destruktīvās rindas. Vispirms palaidiet to sausās darbības režīmā testa iekārtā, salīdziniet rezultātu ar cerībām. Pēc tam nododiet skriptu atpakaļ AI un uzlabojiet to, izmantojot veidni "sacietēt", un atzīmējiet 5 atšķirības starp abām versijām.

kontrolsaraksts

  • [ ] Vai uzvednē esmu iekļāvis ierobežojumus, piemēram, OS, čaulas versiju, ceļus un tiesības?
  • [ ] Vai skripts ir izturīgs pret kļūmēm ar set -euo pipefail / $ErrorActionPreference='Stop'?
  • [ ] Vai destruktīvas darbības ir aiz sausās darbības/-WhatIf, un tām ir nepieciešams precīzs pārbaudes karodziņš?
  • [ ] Vai skripts ir idempotents (drošs otrajā palaišanas reizē)?
  • [ ] Vai esmu izvilcis noslēpumus mainīgā/slepenajā ievadē, nevis stingri kodējis?
  • [ ] Vai esmu veicis pirmo braucienu ar testa iekārtu un sagatavojis atgriešanas plānu?