Eenheid 9 / 11

Script- en automatiseringsgeneratie: Bash, Python en PowerShell

Winst:

  • Vermogen om de sterke punten van Bash, Python en PowerShell te begrijpen en kunstmatige intelligentie veilige, beschermde scriptconcepten te laten produceren
  • Mogelijkheid om vangrails aan scripts toe te voegen, zoals set -euo pipefail, controle van lege variabelen, droogloopmodus en logboekregistratie
  • Vermogen om destructieve commando's te lezen en uit te proberen in een geïsoleerde omgeving en eerst met dry-run, en om de discipline toe te passen om het geheim niet in het script in te bedden.

De geest van DevOps wordt samengevat in één zin: “Automatiseer het werk dat je twee keer doet.” Elke repetitieve taak die handmatig wordt uitgevoerd – het opschonen van logboeken, het maken van back-ups, het controleren van de serverstatus, het verwerken van batchbestanden – kost tijd en wordt uiteindelijk beschadigd door menselijke fouten. Scripts nemen deze taken over: kleine programma's die een reeks opdrachten op een sequentiële, betrouwbare en herhaalbare manier uitvoeren. De DevOps-professional maakt veelvuldig gebruik van drie talen: Bash (voor Linux/Unix-shellscripts), Python (voor complexe logica, API-aanroepen, datamanipulatie) en PowerShell (voor Windows- en cloudbeheer).

AI biedt misschien wel de meeste praktische waarde bij het genereren van scripts: het maken van een werkconcept op basis van een beschrijving van één zin, het oplossen van een mysterieuze bug, het vertalen van een script in een andere taal. Maar een script is gevaarlijk als het blindelings wordt uitgevoerd: een verkeerde rm, een Remove-Item-Recurse zal bestanden onomkeerbaar verwijderen. Daarom is het motto van dit toestel: laat de AI het script schrijven, jij leest het, probeert het eerst in de veilige modus en voert het dan uit.

Welke taal kiezen en wanneer? Een grove vuistregel: als de taak bestaat uit het achter elkaar uitvoeren van verschillende systeemopdrachten (bestand kopiëren, service opnieuw opstarten, archief ophalen) is Bash de meest logische keuze omdat Linux alomtegenwoordig is op servers. Als de taak beslissingslogica, looping, datatransformatie, het aanvragen van een API of JSON-verwerking omvat (dat wil zeggen logica die meer dan 20 regels overschrijdt), onderscheidt Python zich door zijn leesbaarheid en rijke bibliotheken; Een complex Bash-script wordt snel onbegrijpelijk, terwijl Python eenvoudig te onderhouden blijft. Als het gaat om het beheren van Windows-servers, Active Directory of Azure, is PowerShell de natuurlijke omgeving omdat het objectgeoriënteerde karakter ervan diep integreert met deze platforms. Door bij het aanvragen van een script bij de AI op te geven welke taal je hebt gekozen en waarom, zorg je ervoor dat de output passend en idiomatisch is voor jouw omgeving.

Stap voor stap: veilige scriptgeneratie

  1. Beschrijf de taak en de omgeving. Wat gaat het doen, welk besturingssysteem/shell, welke beperkingen?
  2. Vraag naar veiligheidshekken. Stel in bash -euo pipefail in (stop bij fout, stop bij ongedefinieerde variabele), bevestigingsprompt voor gevaarlijke bewerkingen, verplaats eerst in plaats van verwijderen.
  3. Droogloopmodus aanvragen. Laat het script schrijven wat het moet doen met --dry-run, maar doe het niet.
  4. Lees en begrijp. Controleer wat elke rij doet, vooral verwijder-/verplaats-/netwerkbewerkingen.
  5. Probeer het in een geïsoleerde omgeving. Voer het uit in de testmap met voorbeeldgegevens.
  6. Voeg toe aan logboekregistratie. Laat het script vastleggen wat het doet, zodat het later kan worden bekeken.

Basisprincipes van veilig scripten

Een productiescript moet deze vangrails bevatten:

  • Stoppen bij een fout. Bash: set -euo pipefail. PowerShell: $ErrorActionPreference = 'Stop'. Als één stap mislukt, zouden de volgende niet moeten werken.
  • Idempotentie (herhaalbaarheid). Als het script twee keer wordt uitgevoerd, zou het geen dubbele schade moeten aanrichten; "Als je het al hebt, sla het dan over"-logica.
  • Goedkeuring en droogdraaien. Voor destructieve operaties "weet u het zeker?" of de --dry-run-vlag.
  • Invoervalidatie. Zijn de parameters zoals verwacht? Een lege variabele kan rm -rf "$DIR"/ veranderen in rm -rf / disaster.
  • Loggen. Registratie van wat er is gedaan en wanneer.
Tip: De gevaarlijkste fout in Bash is het verwijderen met een lege variabele. rm -rf "$DIR" probeert de hoofdmap te verwijderen als $DIR leeg is. set -u (stop bij ongedefinieerde variabele) en het controleren van [ -n "$DIR" ] voordat u het verwijdert, is een redder in nood. Vraag expliciet om deze beveiligingen wanneer u scripts opvraagt ​​bij de AI.

Beveiliging: geheime en destructieve commando's

Twee grote gevaren:

  1. Het geheim in het script inbedden. Het wachtwoord mag geen platte tekst zijn binnen het tokenscript; Moet worden gelezen vanuit de omgevingsvariabele of kluis. Scripts gaan naar Git; begraven geheim is permanent lek.
  2. Destructieve commando's. rm -rf, Remove-Item -Recurse -Force, DROP TABLE, terraform destroy - als je deze in een script ziet, stop dan en denk twee keer na. Probeer nooit eerst het destructieve commando dat door de AI in prod wordt gegenereerd.
Let op: Wanneer u de AI vertelt "een script te schrijven dat deze bestanden opschoont", lees dan zorgvuldig de reikwijdte van de find ... -delete of rm-opdracht die het produceert. Een jokerteken (*) of het verkeerde pad verwijdert meer dan u wilt verwijderen. Voer het script altijd eerst uit in de modus "Te verwijderen lijst" in plaats van te verwijderen.

Vergelijking van drie talen

criterium

bashen

Python

PowerShell

Waar het het beste is

Linux-shell, opdrachtketen

Complexe logica, API, data

Windows-cloudbeheer

Leercurve

Middelmatig (gevangen)

gemakkelijk

middelmatig

Foutafhandeling

set -euo pipefail

proberen/behalve

proberen/vangen, -ErrorAction

draagbaarheid

Unix/Linux/mac

overal

Platformonafhankelijk (PS 7+)

wanneer

Kortom, systeem werkt

Logica langer dan 20 regels

Windows/AD/Azure

drie minikoffers

Geval 1 – 2 uur knutselen in 5 minuten. Een technicus was elke week twee uur bezig met het verzamelen en archiveren van logbestanden van 40 servers. Hij liet de AI de taak beschrijven en -euo pipefail + dry-run-beveiligingen instellen en een Bash-script genereren. Eerst het script gevalideerd met dry-run, daarna gekoppeld aan de geplande taak (cron). Het wekelijkse werk wordt teruggebracht tot 5 minuten en menselijke fouten worden geëlimineerd.

Geval 2 – Een ramp met een nulvariabele is afgewend. Er was rm -rf "$TARGET"/* in het opschoonscript geproduceerd door de AI, maar als TARGET ergens niet was toegewezen, bleef het leeg. Hij besefte dit tijdens zijn studie als ingenieur; set -u en [ -n "$TARGET" ] || exit 1-controle toegevoegd. Tijdens het testen bleef de variabele nul en stopte het script veilig in plaats van catastrofaal.

Geval 3: ingebed token vastgelegd. Voor het gemak heeft AI een regel TOKEN = "ghp_realtoken" toegevoegd aan een Python-script dat om een ​​API vraagt ​​(als voorbeeld). De ingenieur verwijderde dit en veranderde het in het lezen van de omgevingsvariabele met os.environ["TOKEN"] en annuleerde en vernieuwde het token. Als het script naar Git zou gaan, zou het token openbaar zijn.

Vier kopieerbare sjablonen

1) Secure Bash-script:

Schrijf een Bash-script: [TASK]. Verplichte regels: - `set -euo pipefail` aan het begin. - Controleer of de variabele niet leeg is, waar u deze ook verwijdert/verplaatst. - `--dry-run` vlag: schrijf wat u in deze modus moet doen, maar doe het niet. - Sluit het geheim niet in; Lezen van omgevingsvariabele. - Druk bij elke stap een informatief logboek af. Geef commentaar op het script en markeer de gevaarlijkste regel.

2) Scriptbeschrijving/controle:

Beschrijf het volgende script regel voor regel en controleer op veiligheid: ingebed geheim, destructief commando (rm/Remove-Item/DROP), niet-gevalideerde invoer, gebrek aan foutafhandeling? Schrijf elk risico in volgorde van belangrijkheid en correctie. Script: [CODE]

3) Taalvertaling:

Vertaal dat [SOURCE LANGUAGE]-script naar [TARGET LANGUAGE]. Houd het gedrag letterlijk, gebruik idiomatische foutafhandeling van de doeltaal, verplaats eventuele ingebedde geheimen naar een omgevingsvariabele. Let op punten die zich anders kunnen gedragen.Script: [CODE]

4) Geplande taak (cron/geplande taak):

Gebruik dit script [FREQUENCY: b.v. Schrijf een planningsdefinitie ([cron / systemd timer / Windows Task Scheduler]) die [elke nacht om 02:00 uur] wordt uitgevoerd. Voeg toe hoe u mij kunt waarschuwen bij een storing (log-/exitcode/melding) en hoe u overlap kunt voorkomen.

Zwakke prompt/sterke prompt

Zwak: "Schrijf een script dat oude bestanden verwijdert."

Resultaat: een scopeloos, onbeschermd, dry-runless rm-script; Als het in de verkeerde map wordt uitgevoerd, wordt het onomkeerbaar verwijderd.

Strong: "Schrijf een bash-script om .log-bestanden ouder dan 30 dagen te verwijderen onder /var/log/app. Gebruik set -euo pipefail, stop als de doelmap leeg is, vermeld wat je moet verwijderen met --dry-run eerst, log elke transactie, sluit het geheim niet in. Markeer de gevaarlijkste regel."

Verschil: de tweede claim geeft de volledige reikwijdte, veiligheidsleuningen en droogloopverwachtingen; De uitvoer kan veilig worden uitgevoerd.

Veel voorkomende fouten

  • Het script uitvoeren zonder het te lezen. Vooral het verwijderen/verplaatsen van rijen leidt tot een ramp.
  • Er wordt niet gecontroleerd op lege variabelen. Klassieke ramp bij het verwijderen van de hoofdmap met rm -rf "$X"/.
  • sla `set -euo pipefail` / `-ErrorAction Stop` over. Een stap vuurt, het script gaat blindelings verder.
  • Het geheim in het script inbedden. Aanhoudend lek naar Git.
  • Destructief proces zonder droogloop. Eerst "laat me zien wat ik moet doen", doe het dan.
  • De eerste poging doen in prod. Draaien zonder een geïsoleerde testomgeving.

Samengevat

DevOps is de kunst van automatisering; Repetitief werk wordt gedelegeerd aan Bash-, Python- en PowerShell-scripts. AI is erg handig bij het opstellen van scripts, het debuggen en het vertalen van talen, maar een veilig script moet foutwachters bevatten, zoals set -euo pipefail, controle van nulvariabelen, droogloopmodus, ingebedde geheimloosheid en logboekregistratie. Het is uw verantwoordelijkheid om elk script, vooral de scripts die destructieve opdrachten bevatten, in een geïsoleerde omgeving te lezen en te testen en eerst te testen.

Applicatie taak

Kies een terugkerende taak (logboekarchivering, back-up, opschoning). (1) Laat de AI een beveiligd script genereren met de sjabloon "Secure Bash script". (2) Laat hetzelfde script op veiligheid controleren als het sjabloon "Scriptbeschrijving/audit" en vind de gevaarlijkste regel die de AI heeft gemarkeerd. (3) Controleer het gedrag ervan door het script uit te voeren met voorbeeldbestanden in een testmap, eerst met --dry-run.

controlelijst

  • [ ] Ik heb de taak geschreven die ik niet wil, het besturingssysteem/shell en de beveiligingsrails.
  • [ ] Er stopt een fout bij het script, zoals set -euo pipefail / -ErrorAction Stop.
  • [ ] Ik heb een lege variabele en invoercontrole toegevoegd vóór verwijdering/verplaatsing.
  • [ ] Er is een --dry-run/bevestigingsmechanisme voor destructieve operaties.
  • [ ] Er is geen geheim ingebed in het script; de waarden komen uit de omgevingsvariabele/case.
  • [ ] De eerste test heb ik uitgevoerd in een geïsoleerde testomgeving met dry-run.