Jedinica 2 / 11

Skripte za automatizaciju: sigurno generiranje Bash, PowerShell i Python

Dobici:

  • Sposobnost izrade skripti za automatizaciju Bash, PowerShell i Python s jasnim ograničenjima i sigurnosnim ogradama s umjetnom inteligencijom
  • Sposobnost dodavanja načela kao što su idempotencija, rad na suho, rukovanje pogreškama i vraćanje unatrag svakoj skripti i primjena ciklusa 'generiraj, ojačaj, potvrdi'
  • Sposobnost razumijevanja da izvršenje proizvedenog scenarija ne znači da je sigurno i stjecanje navike preuzimanja odgovornosti čitanjem i testiranjem destruktivnih redaka.

Skripte za automatizaciju: sigurno generiranje Bash, PowerShell i Python pomoću umjetne inteligencije

Najgori neprijatelj administratora sustava je ručni rad koji se ponavlja: povezivanje sa svakim strojem i čišćenje zapisa, otvaranje istog korisnika na dvadeset poslužitelja, pokretanje iste provjere zdravlja svako jutro. Ovo ponavljanje je otvoreno i vremenu i ljudskoj pogrešci. Skripta za automatizaciju mali je program koji delegira te iteracije na računalo — najčešće napisan u Bashu (komandni jezik ljuske) u svijetu Linuxa, PowerShell (Microsoftova ljuska za automatizaciju) u svijetu Windowsa i Python za rad neovisan o platformi. AI je nevjerojatno brz u izradi, objašnjavanju i poboljšanju prvog nacrta ovih skripti. Ali skripta nije tekst, to je sila koja djeluje u vašem sustavu; Za razliku od Excel formule, ako je netočna, briše datoteku, zaustavlja uslugu i prekida pristup. Zato je obećanje ove jedinice: AI piše skriptu, vi je čitate, testirate i pokrećete preuzimajući odgovornost.

U ovoj ćete jedinici naučiti kako izraditi sigurne, čitljive i povratne skripte pomoću umjetne inteligencije; Načela koja spašavaju živote kao što su idempotencija (pokretanje iste skripte dva puta ne uzrokuje štetu) i rad na suho; i naučit ćete provjere kroz koje skripta mora proći prije nego što se pusti u proizvodnju.

Zašto je skriptiranje s AI tako moćno?

Čak i iskusni administrator možda ne zna napamet točnu sintaksu Bash petlje, parametre PowerShell cmdleta (naredbe) ili Python pokušaj/osim bloka. AI trenutno popunjava ovu prazninu: objasnite namjeru na čistom turskom, a ona proizvodi radni nacrt. Štoviše, možete dati postojeću skriptu AI-u i reći "objasni ovo", "dodaj obradu pogrešaka", "učini je čitljivijom". To skraćuje krivulju učenja i ubrzava članove juniorskog tima.

Ali s moći dolazi i odgovornost. Većinu vremena skripta generirana umjetnom inteligencijom ispravno piše "sretnu stazu" (ako je sve u redu); ali može propustiti rubne slučajeve (nedostaje datoteka, pun disk, neispravna mreža) ili napraviti opasne pretpostavke. Dakle, zamislite generiranje skripte pomoću umjetne inteligencije u tri faze: generirajte, ojačajte, provjerite.

Korak po korak: sigurno generiranje skripti

  1. Jasno napišite namjeru i ograničenje. Koji operativni sustav, koja verzija ljuske, koje staze datoteka, koja prava? Kao "Ubuntu 22.04, Bash 5, sudo nije root, izvodi se samo pod /opt/app/logs". Dvosmislena potražnja proizvodi opasnu pretpostavku.
  2. Zatražite sigurnosne ograde. Zahtijevajte da se skripta "zaustavi pri kvaru" (postavite -euo pipefail u Bashu), upit za potvrdu destruktivnih operacija, sigurnosno kopiranje prije operacije i način rada na suho. Ove zaštitne ograde hvataju rubna stanja koja AI zaobilazi.
  3. Napiši idempotentan. Skripta ne bi trebala uzrokovati nikakve pogreške ili štetu kada se pokrene drugi put. Uspostavite logiku "preskoči ako korisnik već postoji", "kreiraj imenik ako ne postoji, ne diraj ga ako postoji". To omogućuje da automatizacija uvijek iznova radi sigurno.
  4. Pročitajte i shvatite. Pročitajte svaki proizvedeni redak. Zamolite AI da zasebno označi destruktivne naredbe (rm, Remove-Item, DROP).
  5. Testirajte radom na suho. Prvo ga pokrenite u načinu rada "reci što treba učiniti" umjesto u stvarnim operacijama. Ako je izlaz onakav kakav očekujete, prebacite se u stvarni način rada — i to prvo na testnom stroju.
  6. Pripremite svoj povratak. Uzima li skripta sigurnosne kopije? Znate li kako vratiti sigurnosnu kopiju? Ima li evidentiranja, možete li kasnije vidjeti što radi?
Savjet: neka svaka skripta destruktora uključi varijablu DRY_RUN=true i oznaku --apply. Zadano ponašanje je pisanje onoga što će se dogoditi bez brisanja bilo čega; Neka stvarno brisanje radi samo ako je --apply dano eksplicitno. Ova jedina navika sprječava katastrofe duge u karijeri.

tri mini kućišta

Slučaj 1 — Idempotencija spremljena 3 sata. Administrator je napisao skriptu koja instalira istog agenta za praćenje na 25 poslužitelja. Prva verzija nije bila idempotentna: pokvarila je konfiguraciju pri drugom pokretanju ako je agent već bio instaliran. Inženjer je AI-u dodao logiku "provjeri je li instalirano, preskoči ako je". Tijekom sljedećeg perioda održavanja skripta se slučajno pokrenula dvaput, ali nije učinila nikakvu štetu. Idempotencija je učinila oporavak 25 poslužitelja nepotrebnim.

Slučaj 2 — Rad na suho spremio je korijenski direktorij. Jedan tim primio je Bash skriptu koja je očistila stare sigurnosne kopije. Ako je varijabla prazna, put je postao / umjesto /backups/ — klasična opasnost. Inženjer ga je prvo pokrenuo u DRY_RUN modu, zamrznuo se kada je vidio liniju sličnu rm -rf / u izlazu i dodao provjeru varijable (: "${BACKUP_DIR:?ne može biti prazan}"). Rad na suho uhvatio je grešku koja bi izbrisala cijeli disk prije nego što bi krenuo u proizvodnju.

Slučaj 3 — Upravljanje pogreškama spriječilo ga je da se probudi jedne noći. PowerShell skripta je arhivirala zapise kada je disk bio pun. Prva verzija bi tiho zakazala ako bi mrežni dio bio nedostupan i nastavila bi puniti disk. "Provjeri uspjeh na svakom koraku, ako je neuspješan, obavijesti e-poštom i zaustavi" je dodan u AI. Nakon tjedan dana, post je prekinut; Skripta je stala i upozorila, disk nije bio pun, nitko se nije probudio u 3 ujutro.

Četiri predloška za kopiranje

1) Generiranje sigurne Bash skripte:

Vaša uloga: viši inženjer za automatizaciju Linuxa. Napišite skriptu za Ubuntu 22.04 / Bash 5. Svrha:[svrha]. Pravila:- Počnite s "set -euo pipefail".- Potvrdite potrebne varijable s ": ${VAR:?}".- Izvedite destruktivne operacije sa zadanim DRY_RUN=true; Neka se prava aplikacija izvodi samo s oznakom --apply. - Prijavite svaki korak u stdout, zaustavite se sa smislenom porukom o pogrešci. - Učinite ga idempotentnim (tako da ne uzrokuje štetu pri drugom pokretanju). Zatim: zasebno označite potencijalno destruktivne linije i napišite 3 slučaja koje moram testirati prije proizvodnje.

2) Učvršćivanje postojeće skripte:

Pripremite sljedeću skriptu za proizvodnju: (1) dodajte rukovanje pogreškama i bilježenje, (2) učinite je idempotentnom, (3) stavite destruktivne naredbe iza suhog rada, (4) izdvojite tvrdo kodirane staze i tajne varijabli. Ukratko opišite svaki redak koji ste promijenili i zašto. Skripta: [skripta]

3) PowerShell sigurna automatizacija:

Vaša uloga: stručnjak za automatizaciju sustava Windows. Napišite skriptu kompatibilnu s PowerShell 5.1. Namjena: [namjena]. Pravila:- Započnite s "$ErrorActionPreference = 'Stop'".- Dodajte -WhatIf podršku za destructor cmdlets (zadano WhatIf).- Zamotajte svaku akciju s try/catch, log error.- Tvrdo kodiranje vjerodajnica; Koristite parametar ili siguran unos. Označite destruktivne retke i napišite korake poništavanja.

4) Dekodiranje i provjera izraza Cron/schedule:

Objasnite sljedeću cron naredbu na čistom turskom i napišite sljedeća 3 vremena izvođenja: [izraz]Također, ako je moj cilj "[svrha]", je li ova naredba točna ili predlažete popravak? Također imajte na umu učinak vremenskog razdoblja.

Slab upit / Jak upit

Slab upit:

Napiši mi skriptu koja čisti dnevnik.

Ovaj upit je opasan: nije jasno koji OS, koji direktorij, koja dobna granica, koja sigurnosna ograda. AI može isporučiti jednolinijski, destruktivan i neprovjerljiv rm.

Snažan upit:

Vaša uloga: viši inženjer za automatizaciju Linuxa. Napišite skriptu za čišćenje dnevnika za Ubuntu 22.04 / Bash. Izbrišite samo .log datoteke pod /opt/app/logs koje su starije od 30 dana. Pravila: set -euo pipefail; Provjeri valjanost varijabli BACKUP_DIR i LOG_DIR (zaustavi ako je prazno); popis datoteka dnevnika prije brisanja; Neka DRY_RUN=true bude zadana vrijednost, stvarno brisanje samo s --apply; Neka bude idempotentan. Označite destruktivne linije i napišite 3 scenarija koja bih trebao testirati.

značajka

Slaba/brza skripta

otvrdnulo pismo

Rješavanje grešaka

Ne, tihi neuspjeh

set -euo pipefail, pokušati/uhvatiti

destruktivno djelovanje

Djeluje izravno

Rad na suho + otvorena kontrolna zastavica

Ponovno pokretanje

može uzrokovati štetu

Idempotentan, siguran

tajno upravljanje

tvrdo kodirano

Varijabilni/skriveni unos

poništiti

Nijedan

Korak sigurnosne kopije + vraćanje

Uobičajene greške

  • Pokretanje destruktivne skripte bez rada na suho. Ako ne vidite skriptu koja sadrži rm, Remove-Item, DROP prvo u suhom načinu rada košta disk.
  • Preskoči provjeru nulte varijable. Prazna varijabla putanja čini / umjesto /backups/; : Obavezno potvrdite s "${VAR:?}".
  • Zaboravljanje idempotencije. Skripta se prekida kada se pokrene dvaput, što automatizaciju čini nepouzdanom.
  • Tajne tvrdog kodiranja. Zapisivanje lozinke i ključa u skriptu je curenje informacija kada dijelite tu skriptu.
  • Ispitivanje u proizvodnji. Izvođenje prve izvedbe u produkciji znači vježbanje na pozornici; prvo testirati stroj.
Pažnja: Nemojte prihvatiti skriptu koju daje AI samo zato što je "radila, znači da je ispravna". Samo zato što djeluje ne znači da nije destruktivno. Skripta se može pokrenuti na sretnom putu i izbrisati podatke u rubnom stanju; Pravi test su rubni slučajevi.

Ukratko

Skripte automatizacije eliminiraju ponavljanje i smanjuju ljudske pogreške; AI je nevjerojatno brz u generiranju, objašnjavanju i ojačavanju ovih skripti. Ali scenarij je radna snaga: ako je pogrešan, briše, zaustavlja, prekida. Stoga uspostavite ciklus "proizvesti, očvrsnuti, provjeriti". Uključite rukovanje pogreškama, idempotenciju, rad na suho i povrat u svaku destruktivnu skriptu. Izdvojite tajne varijable, napravite prvo pokretanje na testnom stroju. AI skripta piše; Vaš je posao da ga pročitate, testirate i preuzmete odgovornost za njegovo pokretanje.

Zadatak aplikacije

Odaberite zadatak koji ćete ručno ponavljati u svom poslu (npr. čišćenje dnevnika, korisničko otvaranje, provjera stanja). Zatražite nacrt od umjetne inteligencije pomoću gornjeg predloška “Secure Bash skripta” ili “PowerShell sigurna automatizacija”. Pročitajte generiranu skriptu red po red i označite destruktivne retke. Prvo ga pokrenite u načinu rada na suho na testnom stroju, usporedite učinak sa svojim očekivanjima. Zatim vratite skriptu AI-u i doradite je s predloškom "harden" i zabilježite 5 razlika između dvije verzije.

popis za provjeru

  • [ ] Jesam li uključio ograničenja kao što su OS, verzija ljuske, staze i prava u upit?
  • [ ] Je li skripta tolerantna na pogreške sa set -euo pipefail / $ErrorActionPreference='Stop'?
  • [ ] Jesu li destruktivne operacije iza suhog rada/-WhatIf i zahtijevaju li eksplicitnu oznaku provjere?
  • [ ] Je li skripta idempotentna (sigurna pri drugom pokretanju)?
  • [ ] Jesam li izvukao tajne u varijablu/tajni unos umjesto da sam ih tvrdo kodirao?
  • [ ] Jesam li izvršio prvo pokretanje na testnom stroju i pripremio plan povratka?