VPN-kliendi skriptimine: valige kiht enne parooli
Tarnija CLI, rasdial, rakenduse kavatsus või UI-automaatika ebaõnnestuvad igaüks erinevalt. Valige kiht, hoidke saladus argv-st väljas ja oodake olekut, mitte väljumiskoode.
Skriptid käivitavad VPN-kliendid kihil, mille autor valis, ja see kiht on harva see, mida töö vajas. Tarnija käsurida, operatsioonisüsteemi valija ja mobiilirakenduse kavatsus naasevad kõik ühenduse elu erinevates punktides. Nad käsitlevad ka saladust erinevalt, ja see erinevus otsustab, kas parool on masinas iga kasutaja jaoks nähtav. Valige kiht enne skripti esimese rea kirjutamist.
Kiht 1: tarnija käsurida
Enamik töölauakliente pakub käsurida, mis võtab profiili nime ja liiga sageli parooli. Cisco vana klient võttis vastu connect-tegusõna kasutaja- ja parooliargumentidega; macOS eksponeerib sisseehitatud teenuse networksetupi kaudu; NetworkManager vastab nmcli-le. Need kutsed naasevad, kui käsk lõpeb, mis ei ole see hetk, mil tunnel muutub kasutatavaks. Lugege tarnija enda dokumentatsiooni juurutatava versiooni kohta, sest need liidesed muutuvad ja mõned eemaldatakse täielikult.
nmcli connection up "Work VPN"
networksetup -connectpppoeservice "Work VPN"
Eelis on see, et tarnija tunneb oma profiilisalve, nii et kuts kasutab sama konfiguratsiooni, mida kasutaks GUI. Puudus on see, et iga tarnija leiutab oma tegusõnad, ja ühe kliendi jaoks kirjutatud skript ei kandu teisele üle. Käsitlege seda kihti lühima teena, kui klient on fikseeritud ja versioon kinnitatud.
Kiht 2: operatsioonisüsteemi enda teenus
Windowsis on valija operatsioonisüsteemi osa ja see töötab telefoniraamatu kirje vastu, mitte tarnija profiilisalve vastu. See muudab selle klientide vahel kaasaskantavamaks ja teenusekontolt skriptimise lihtsamaks. See tähendab ka, et ühendus võib eksisteerida ühes kohas ja mitte teises, mis ajab segadusse need, kes vaatavad valesse nimekirja.
rasdial "Work VPN" user pass
Get-VpnConnection -Name "Work VPN" | Select-Object ConnectionStatus
Kasutage PowerShelli pinda, kui peate kirje looma või eemaldama, mitte seda valima. WMI ja cmdleti kihid pakuvad samu objekte erinevate nimedega ning eemaldamine on eraldi toiming ühenduse katkestamisest. Skript, mis ainult valib, jätab migratsiooni järel vananenud kirjed alles. Kontrollige, millisesse salve teie automatiseerimine kirjutab, enne kui lubate, et puhastus toimub.
Remove-VpnConnection -Name "Old VPN" -Force
Get-VpnConnection
macOSis on vaste võrguteenuste nimekiri, kus olemasolev teenus ühendatakse nime järgi, mitte ei looda kohapeal.
Volitused lekivad igal kihil, seega valige kanal
Kõik, mille käsurealt edastate, ilmub protsessitabelis iga kohaliku kasutaja jaoks ja jääb tavaliselt ka shelli ajalukku. OpenVPN-i toetatud alternatiiv on lugeda saladus failist --askpass abil, ja fail ise vajab õigusi, mis vastavad usaldusele, mille te sellesse panete. Nimega toru väldib saladuse kettale kirjutamist, kuid lubab igal protsessil, mis suudab selle avada, sinna kirjutada. Windowsis hoidke saladust volituste halduris või failis, mida saab lugeda ainult teenusekonto, ja mitte kunagi literaalina pakettfailis.
openvpn --config /etc/openvpn/work.conf --askpass /etc/openvpn/work.secret --auth-nocache --daemon
ls -l /etc/openvpn/work.secret
Sama reegel kehtib tokenite ja ühekordsete koodide kohta: kui automatiseerimine neid vajab, vajab automatiseerimine kanalit, mis ei ole käsurea argument. Pöörake saladust, kui muudate mehhanismi, sest vana väärtus on kuskil logis olnud. Skript, mis töötab ja lekib, ei ole töötav skript.
Oodake olekut, seejärel valvake üht omanikku
Kõik need kutsed naasevad enne, kui tunnel on valmis, seega küsitlege olekut, mida klient eksponeerib, või proovige sihtkohta selle sees ajapiiranguga. Failide kopeerimine või andmebaasiühenduse avamine vahetult pärast ühenduse kutset on võidujooks ja see ebaõnnestub aeg-ajalt viisil, mis näeb välja nagu võrgu rike.
ip link show tun0
nmcli -t -f GENERAL.STATE connection show "Work VPN"
curl -sS --max-time 5 https://app.internal.example/health -o /dev/null
Katkestamisel on sama probleem vastupidises suunas: protsess võib väljuda enne, kui marsruudid kaovad. Kasutage kliendi konksusid seal, kus need on olemas, näiteks OpenVPN up- ja down-skriptid või systemd-ühiku ExecStartPost, sest need töötavad punktis, mis teile tõesti oluline on. Konksud töötavad selle õigustega, mis need kutsus, seega võrgu taaskäivitav konks vajab selgesõnalist reeglit, mitte oletust. Hoidke täpselt üks omanik kogu ühenduse eluea jooksul.
Kui kaks järelevalvajat käivitavad ja peatavad sama profiili, on tulemuseks taasühendamise silmus, mis loeb nagu teenusepakkuja katkestus. Runbook lõpeb, kui kiht on dokumenteeritud, saladusel on kanal, mis ei ole argv, oote tingimus on oleku kontroll ajapiiranguga ja üks protsess omab elutsüklit.