Python - räddaren i nöden när verktygen saknas

Fredag morgon. Kaffet är varmt, inkorgen relativt tom och jag har till och med hunnit öppna Teams innan något gått sönder. Det borde bli en bra dag. Då plingar det till i Teams och tjänsteägaren skriver:

”Nya Cisco-sårbarheter, är vi drabbade?”

Så mycket för den mjukstarten. Det är bara att lägga de planerade uppgifterna åt sidan och dyka ner i CVE-djungeln – igen. Den här gången är det tre sårbarheter, varav en över 9 på CVSS-skalan. Aj. Det är som när bilmekanikern säger ”det här kan bli dyrt”.

Jag skriver ihop ett krypterat svar och meddelar att vi inte är berörda. Skönt – nu kan jag återgå till dagens planerade arbete.

Trodde jag…

Precis lagom efter lunch ringer telefonen. Det är tjänsteägaren igen:

"Börja planera för akutpatchning. Jag fick dispens från säkerhetsavdelningen – ni får en vecka i stället för 24 timmar eftersom de sårbara funktionerna inte är påslagna. Jag behöver ett patchschema senast måndag."

Patchkvällen närmar sig

Måndag morgon. Schemat är godkänt och ikväll startar patchningen. Enkelt, tänker många. Bara att logga in och köra de vanliga kommandona:

switch#copy http://192.168.1.1/cat9k_lite_iosxe.17.12.05.SPA.bin flash:
switch#configure terminal
switch(config)#no boot system
switch(config)#boot system switch all flash:cat9k_lite_iosxe.17.12.05.SPA.bin
switch(config)#end
switch#write memory
switch#reload

Visst. Det funkar.

På en enda switch.

Men när man står inför över 600 switchar, utspridda över fyra kvällar, blir det här mer som att försöka måla om Globen med en tandborste. Och dessutom riskera mänskliga misstag… Det är bara en tidsfråga innan någon skriver reload i fel fönster och försätter ett helt kontor i stillestånd.

En duo gör entré: Python och Netmiko

Här kommer kvällens huvudpersoner till räddning: Python och det fantastiska biblioteket Netmiko.

Netmiko bygger på SSH-biblioteket Paramiko och gör det möjligt att via Python ansluta till nätverksutrustning och köra CLI-kommandon – på ett otroligt enkelt sätt.

Ett exempel från deras dokumentation:

Python Netmiko

Resultatet? Magiskt. Snabbt. Och inga fingrar behövde flytta från tangentbordet till ett CLI-fönster.

Så hur gick uppgraderingen?

Efter en intensiv heldag med kodande fick jag ihop en version av skriptet som körde uppgraderingen av alla switchar.

Nu, efter ytterligare patchrundor, är skriptet så pass moget att det kan köras via CRON-jobs. Hela uppgraderingsprocessen körs i tre faser

  1. Förberedelse. Skicka ut image till switchen och byt next boot image. Detta kan schemaläggas att köras under natten och när man loggar in på morgonen finns ett statusmejl på hur nedladdningen gick och om någon switch misslyckades.

  2. Schemaläggning av omstart. De flesta användare uppskattar nätverk mer när det inte försvinner mitt i ett Teams-möte. Därför undviker vi omstarter under arbetstid och schemalägger dem istället till efter kontorstid.

  3. Verifiering. Avslutningsvis vill vi verifiera hur uppgraderingen har gått. Lever switchen efter omstart? Har switchen startat upp med rätt image? Även denna del kan schemaläggas att köras efter omstarten och skicka ett statusmejl med resultatet.

Slutsats – automation är superkraften vi alla behöver

Det pratas mycket om stora manageringsverktyg, exempelvis Catalyst Center som kan lösa sådana här processer automatiskt. Men verkligheten är att många miljöer saknar dem – av budgetskäl, licensskäl eller för att de hamnat längst ner i en ”vi tar det senare”-lista.

Det fina är då att du inte alltid behöver ett tungt manageringsverktyg. Ibland räcker det med några rader Python-kod för att automatisera bort kvällsarbete, manuella klick och potentiella katastrofer.

Python och Netmiko är kanske inte lika flashiga som en fullfjädrad manageringsplattform – men de räddade min vecka.

Nästa
Nästa

MC-LAG ut, EVPN-VXLAN in - eller?