Pag-skript ng kliyenteng VPN: piliin ang sapin bago ang password
Ang CLI ng vendor, rasdial, layunin ng app o UI automation ay nabibigo nang iba-iba. Piliin ang sapin, ilayo ang lihim sa argv, at hintayin ang estado, hindi ang mga code ng paglabas.
Ang mga script ay nagpapasimula ng mga kliyenteng VPN sa sapin na pinili ng may-akda, at bihirang ang sapin na iyon ang kailangan ng gawain. Ang command line ng vendor, ang dialer ng operating system at ang layunin ng mobile app ay bumabalik sa magkakaibang punto sa buhay ng koneksyon. Iba rin ang pagtrato nila sa lihim, at ang pagkakaibang iyon ang nagtatakda kung ang password ay nakikita ng bawat user sa makina. Piliin ang sapin bago isulat ang unang linya ng script.
Sapin 1: ang command line ng vendor
Karamihan ng desktop client ay nagbibigay ng command line na tumatanggap ng pangalan ng profile at, madalas, password. Tinatanggap ng lumang client ng Cisco ang pandiwang connect na may mga argumento ng user at password; inilalantad ng macOS ang built-in na serbisyo sa pamamagitan ng networksetup; sumasagot ang NetworkManager sa nmcli. Bumabalik ang mga tawag na ito kapag natapos ang command, na hindi ang sandaling nagiging magagamit ang tunnel. Basahin ang dokumentasyon ng vendor para sa bersyong dine-deploy mo, dahil nagbabago ang mga interface na ito at may mga ganap na inaalis.
nmcli connection up "Work VPN"
networksetup -connectpppoeservice "Work VPN"
Ang bentahe ay kilala ng vendor ang sarili nitong imbakan ng profile, kaya ginagamit ng tawag ang parehong configuration na gagamitin ng GUI. Ang disbentahe ay bawat vendor ay nag-iimbento ng sariling pandiwa, at ang script para sa isang client ay hindi lumilipat sa iba. Ituring ang sapin na ito na pinakamaikling landas kapag fixed ang client at naka-pin ang bersyon.
Sapin 2: ang sariling serbisyo ng operating system
Sa Windows, ang dialer ay bahagi ng operating system at gumagana ito laban sa isang entry sa phonebook sa halip na sa imbakan ng profile ng vendor. Ginagawa nitong mas portable sa mga client at mas madaling i-script mula sa service account. Nangangahulugan din ito na ang koneksyon ay maaaring umiral sa isang lugar at wala sa isa pa, na nakakalito sa mga tumitingin sa maling listahan.
rasdial "Work VPN" user pass
Get-VpnConnection -Name "Work VPN" | Select-Object ConnectionStatus
Gamitin ang ibabaw ng PowerShell kapag kailangan mong gumawa o mag-alis ng entry sa halip na i-dial ito. Inilalantad ng mga sapin ng WMI at cmdlet ang parehong mga bagay sa magkakaibang pangalan, at ang pag-alis ay hiwalay na operasyon sa pag-disconnect. Ang script na nag-dial lang ay mag-iiwan ng mga lumang entry pagkatapos ng migration. Suriin kung aling imbakan nagsusulat ang iyong automation bago mangako na mangyayari ang paglilinis.
Remove-VpnConnection -Name "Old VPN" -Force
Get-VpnConnection
Sa macOS, ang katumbas ay ang listahan ng mga serbisyo ng network, kung saan ang umiiral na serbisyo ay kinokonekta sa pangalan sa halip na ginawa agad.
Nagli-leak ang mga kredensyal sa bawat sapin, kaya piliin ang channel
Ang anumang ipinapasa mo sa command line ay lumalabas sa talahanayan ng proseso para sa bawat lokal na user, at karaniwang nabubuhay din sa kasaysayan ng shell. Ang sinusuportahang alternatibo ng OpenVPN ay basahin ang lihim mula sa file gamit ang --askpass, at ang file mismo ay nangangailangan ng mga pahintulot na tumutugma sa pagtitiwala na inilalagay mo rito. Ang pinangalanang pipe ay umiiwas sa pagsulat ng lihim sa disk ngunit hinahayaang magsulat doon ang anumang prosesong makakabukas nito. Sa Windows, itago ang lihim sa credential manager, o sa file na tanging service account ang makakabasa, at huwag kailanman bilang literal sa batch file.
openvpn --config /etc/openvpn/work.conf --askpass /etc/openvpn/work.secret --auth-nocache --daemon
ls -l /etc/openvpn/work.secret
Ang parehong tuntunin ay nalalapat sa mga token at one-time code: kung kailangan ng automation ang mga ito, kailangan ng automation ng channel na hindi argumento ng command line. Paikutin ang lihim kapag binago mo ang mekanismo, dahil ang lumang halaga ay nakaupo sa isang log sa kung saan. Ang script na gumagana at nagli-leak ay hindi gumaganang script.
Hintayin ang estado, pagkatapos ay pangasiwaan ang isang may-ari
Bawat isa sa mga tawag na ito ay bumabalik bago handa ang tunnel, kaya siyasatin ang estadong inilalantad ng client o subukan ang destinasyon sa loob nito na may timeout. Ang pagkopya ng mga file o pagbukas ng koneksyon sa database kaagad pagkatapos ng tawag sa koneksyon ay isang karera, at pana-panahong nabibigo ito sa paraang mukhang sira ng network.
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
Ang pag-disconnect ay may parehong problema sa kabaligtaran: maaaring lumabas ang proseso bago mawala ang mga ruta. Gamitin ang mga hook ng client kung saan mayroon, tulad ng mga script na up at down ng OpenVPN o ExecStartPost ng isang yunit ng systemd, dahil tumatakbo ang mga ito sa puntong talagang mahalaga sa iyo. Tumatakbo ang mga hook gamit ang mga pribilehiyo ng anumang tumawag sa kanila, kaya ang hook na nag-restart ng network ay nangangailangan ng tahasang tuntunin sa halip na palagay. Panatilihin ang eksaktong isang may-ari sa buong buhay ng koneksyon.
Kapag dalawang superbisor ang nagsimula at naghinto ng parehong profile, ang resulta ay isang loop ng muling pagkonekta na parang pagkaantala ng provider. Nagtatapos ang runbook kapag ang sapin ay naidokumento, ang lihim ay may channel na hindi argv, ang kondisyon ng paghihintay ay pagsusuri ng estado na may timeout, at isang proseso ang may-ari ng lifecycle.