VPN-asiakasohjelman skriptaaminen: valitse kerros ennen salasanaa
Toimittajan CLI, rasdial, sovelluksen aikomus tai UI-automaatio epäonnistuvat kukin eri tavalla. Valitse kerros, pidä salaisuus poissa argv:stä ja odota tilaa, älä paluukoodia.
Skriptit käynnistävät VPN-asiakasohjelmat sillä kerroksella, jonka tekijä valitsi, ja se kerros on harvoin se, jota työ tarvitsi. Toimittajan komentorivi, käyttöjärjestelmän valitsin ja mobiilisovelluksen aikomus palaavat kaikki yhteyden elämän eri kohdissa. Ne käsittelevät myös salaisuutta eri tavalla, ja tämä ero ratkaisee, näkyykö salasana jokaiselle koneen käyttäjälle. Valitse kerros ennen kuin kirjoitat skriptin ensimmäisen rivin.
Kerros 1: toimittajan komentorivi
Useimmat työpöytäasiakkaat tarjoavat komentorivin, joka ottaa profiilin nimen ja liian usein salasanan. Ciscon vanha asiakasohjelma hyväksyi connect-verbin käyttäjä- ja salasana-argumenteilla; macOS paljastaa sisäänrakennetun palvelun networksetupin kautta; NetworkManager vastaa nmclille. Nämä kutsut palaavat, kun komento päättyy, mikä ei ole sama hetki, jolloin tunnelista tulee käyttökelpoinen. Lue toimittajan oma dokumentaatio käyttöönottamallesi versiolle, koska nämä rajapinnat muuttuvat ja jotkut poistetaan kokonaan.
nmcli connection up "Work VPN"
networksetup -connectpppoeservice "Work VPN"
Etuna on, että toimittaja tuntee oman profiilivarastonsa, joten kutsu käyttää samaa kokoonpanoa kuin GUI käyttäisi. Haittana on, että jokainen toimittaja keksii omat verbinsä, eikä yhdelle asiakkaalle kirjoitettu skripti siirry toiselle. Pidä tätä kerrosta lyhimpänä polkuna, kun asiakasohjelma on kiinteä ja versio on kiinnitetty.
Kerros 2: käyttöjärjestelmän oma palvelu
Windowsissa valitsin on osa käyttöjärjestelmää, ja se toimii puhelinluettelomerkintää vasten toimittajan profiilivaraston sijaan. Se tekee siitä siirrettävämmän asiakasohjelmien välillä ja helpommin skriptattavan palvelutilistä. Se tarkoittaa myös, että yhteys voi olla yhdessä paikassa eikä toisessa, mikä hämmentää väärää luetteloa katsovia.
rasdial "Work VPN" user pass
Get-VpnConnection -Name "Work VPN" | Select-Object ConnectionStatus
Käytä PowerShellin pintaa, kun sinun on luotava tai poistettava merkintä sen valitsemisen sijaan. WMI- ja cmdlet-kerrokset paljastavat samat objektit eri nimillä, ja poistaminen on erillinen toimenpide yhteyden katkaisemisesta. Skripti, joka vain valitsee, jättää vanhentuneet merkinnät migraation jälkeen. Tarkista, mihin varastoon automaatiosi kirjoittaa, ennen kuin lupaat, että siivous tapahtuu.
Remove-VpnConnection -Name "Old VPN" -Force
Get-VpnConnection
macOSissa vastine on verkkopalvelujen luettelo, jossa olemassa oleva palvelu yhdistetään nimellä sen sijaan, että se luotaisiin lennossa.
Tunnistetiedot vuotavat jokaisella kerroksella, joten valitse kanava
Kaikki, mitä välität komentorivillä, näkyy prosessitaulukossa jokaiselle paikalliselle käyttäjälle, ja se säilyy yleensä myös komentotulkin historiassa. OpenVPN:n tukema vaihtoehto on lukea salaisuus tiedostosta --askpass kanssa, ja tiedosto itse tarvitsee käyttöoikeudet, jotka vastaavat siihen asettamaasi luottamusta. Nimetty putki välttää salaisuuden kirjoittamisen levylle mutta sallii minkä tahansa prosessin, joka voi avata sen, kirjoittaa sinne. Windowsissa säilytä salaisuus tunnistetietojen hallinnassa tai tiedostossa, jonka vain palvelutili voi lukea, eikä koskaan literaalina eräajotiedostossa.
openvpn --config /etc/openvpn/work.conf --askpass /etc/openvpn/work.secret --auth-nocache --daemon
ls -l /etc/openvpn/work.secret
Sama sääntö koskee tokeneita ja kertakäyttökoodeja: jos automaatio tarvitsee niitä, automaatio tarvitsee kanavan, joka ei ole komentorivargumentti. Kierrätä salaisuus, kun vaihdat mekanismia, koska vanha arvo on maannut jossain lokissa. Skripti, joka toimii ja vuotaa, ei ole toimiva skripti.
Odota tilaa ja valvo sitten yhtä omistajaa
Jokainen näistä kutsuista palaa ennen kuin tunneli on valmis, joten kyselytä asiakasohjelman paljastamaa tilaa tai kokeile kohdetta sen sisällä aikakatkaisulla. Tiedostojen kopioiminen tai tietokantayhteyden avaaminen heti yhteyskutsun jälkeen on kilpailutilanne, ja se epäonnistuu ajoittain tavalla, joka näyttää verkkohäiriöltä.
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
Katkaisulla on sama ongelma päinvastoin: prosessi voi poistua ennen kuin reitit ovat poissa. Käytä asiakasohjelman koukkuja siellä, missä ne ovat, kuten OpenVPN up- ja down-skriptit tai systemd-yksikön ExecStartPost, koska ne ajetaan siinä pisteessä, jolla on sinulle todella merkitystä. Koukut ajetaan sen oikeuksilla, mikä ne kutsui, joten verkon uudelleenkäynnistävä koukku tarvitsee nimenomaisen säännön eikä oletusta. Pidä täsmälleen yksi omistaja yhteyden koko elinkaaren ajan.
Kun kaksi valvojaa käynnistää ja pysäyttää saman profiilin, tuloksena on uudelleenyhdistämisen silmukka, joka luetaan palveluntarjoajan katkona. Runbook päättyy, kun kerros on dokumentoitu, salaisuudella on kanava, joka ei ole argv, odotusehto on tilan tarkistus aikakatkaisulla ja yksi prosessi omistaa elinkaaren.