Kolme kysymystä ratkaisee tämän, ja vain kolme. Luoko asiakasohjelma käyttöjärjestelmään yhteysmerkinnän, joka säilyy uudelleenkäynnistyksen yli? Tarjoaako se komentorivin, joka voi ottaa salaisuuden jostain muusta kuin argumenttiluettelostaan? Pakottaako sen identiteettivaatimus ihmisen vastaamaan selaimen kehotteeseen? Vastaa tässä järjestyksessä, niin valinta lakkaa olemasta makuasia, koska ajastettu työ voi olla vain niin päätön kuin heikoin kolmesta vastauksesta sallii.

Sovita asiakasohjelma kolmeen skriptattavaan kerrokseen

Natiivi käyttöjärjestelmäprofiili, toimittajan CLI, vain GUI:n asiakasohjelma ja selain-SSO-asiakasohjelma tarvitsevat neljä eri lähestymistapaa. Kaksi ensimmäistä kestävät valvomattomia uudelleenkäynnistyksiä, ja valvomattomat uudelleenkäynnistykset ovat koko pointti. Kaksi muuta tarvitsevat suunnittelupäätöksen ennen kuin tarvitsevat skriptin.

What the client exposesWhat to scriptWhat still bites
OS-native connection entryrasdial, scutil --nc, nmcliTunnel is up before DNS and routes settle
Vendor CLI reading stdinCLI wrapped by the scheduler, secret from the credential storePrompt text changes between releases
GUI onlyPinned version plus a state assertionLocale and DPI break the click targets

Polku yksi: käyttöjärjestelmä omistaa profiilin jo

Tämä on halvin polku ja se, jonka useimmat ohittavat. Windowsissa rasdial "Office" yhdistää ja rasdial "Office" /disconnect sulkee sen; rasphone -d "Office" ohjaa samaa merkintää valintaliittymän kautta. macOS luettelee tallennetut palvelut komennolla scutil --nc list ja käynnistää yhden komennolla scutil --nc start. Linux antaa työn NetworkManagerille.

rasdial "Office" user *
scutil --nc start "Office"
nmcli connection up id Office
nmcli -t -f GENERAL.STATE connection show Office

Nämä rajapinnat tuntevat vain käyttöjärjestelmän omistamat profiilit, joten ne eivät voi ohjata satunnaista kolmannen osapuolen asiakasohjelmaa. Kun profiili puuttuu, luo se kerran ja anna skriptin tarkistaa se sen sijaan että loisit sen uudelleen joka ajolla. Tee skriptistä idempotentti: lue nykyinen tila, yhdistä vain kun yhteys on katki, ja testaa sitten yksityinen nimi, jota työ todella tarvitsee.

Polku kaksi: toimittaja toimittaa komentorivin

Jotkin asiakasohjelmat paljastavat tarpeeksi komentoriviä käärittäviksi: Cisco AnyConnectilla on ollut vuosia vain yhdistämiseen tarkoitettu apuri, ja OpenConnect puhuu AnyConnect-, GlobalProtect- ja Pulse-protokollia yhdestä binääritiedostosta. Ratkaiseva vaatimus ei ole lippuluettelo vaan se, mistä salaisuus tulee, koska argumenttiluettelossa olevan salasanan voi lukea kuka tahansa, joka pystyy listaamaan prosessit.

printf '%s\n' "$VPN_PASS" | openconnect --protocol=anyconnect \
  --user "$VPN_USER" --passwd-on-stdin vpn.example.com

FortiClientilla ja joillakin GlobalProtect-versioilla ei ole lainkaan tuettua CLI:tä, ja yhteisön asiakasohjelma tai toimittajan lisensoima korvaaja on hankintapäätös, ei kiertotie. Anna CI:ssä palvelutilille oikeudet juuri siihen binääritiedostoon eikä kuoreen, jotta syötetty argumentti ei voi muuttua root-komennoksi.

Polku kolme: GUI-automaatio, ja miksi se tulee viimeisenä

Kun virallisella asiakasohjelmalla ei ole rajapintaa, skriptit napsauttavat painikkeita ikkunaviestein tai SendKeysillä. Se on versio- ja kieliherkkää, voi jättää puoliksi yhdistetyn istunnon ja epäonnistuu äänettömästi, kun dialogi ilmestyy väärällä kielellä. Jos valitset tämän polun, kiinnitä asiakasohjelman versio, varmista sen jälkeen syntyvä yhteystila ja pidä dokumentoitu manuaalinen varasuunnitelma skriptin vieressä.

Sama varovaisuus koskee asiakasohjelman pakottamista irti tappamalla sen prosessi. Tunneli voi elää prosessia pidempään tai valvoja voi käynnistää sen uudelleen, joten tapa-ja-käynnistä uudelleen ei sekään ole luotettava nollaus.

Mikä hajoaa, kun tunneli on pystyssä

Onnistunut valinta todistaa todennuksen eikä mitään muuta. Testaa resurssi, jonka vuoksi työ on olemassa, sen omalla protokollalla ja lyhyellä aikakatkaisulla, ja nimeä vaihe virheilmoituksessa. Työpöydälläsi näkyvät profiilit, varmenteet ja tallennetut tunnukset voivat olla palveluistunnolle näkymättömiä, joten aja työ kerran ajastimen omalla tilillä ennen kuin luotat siihen.

Rajoita uudelleenyrityksiä. Silmukka, joka toistaa hylättyä tunnusta, lukitsee tilejä, eikä MFA-kehotteeseen pysty päätön työ vastaamaan ilman ilmoittautumissuunnittelua; selain-SSO-virtaa vastaan tehdyt skriptatut uudelleenyritykset vain polttavat yrityksiä. Suosi MDM:n toimittamaa VPN-hyötykuormaa tai kokoonpanoprofiilia laivueelle, jossa alusta omistaa tunnusten elinkaaren, ja pidä skriptit niille asiakkaille, joita ei voi hallita niin.

Kirjaa poistumiskoodi ja ensimmäinen epäonnistuva resurssi, ei sitä tosiasiaa, että skripti ajettiin. Juuri se yksi rivi muuttaa ajastimen hälytyksen viiden minuutin diagnoosiksi.

Aiheeseen liittyvät artikkelit