VPN հաճախորդի սկրիպտավորում. ընտրեք շերտը մինչև գաղտնաբառը
Մատակարարի CLI-ն, rasdial-ը, հավելվածի մտադրությունը կամ UI ավտոմատացումը ձախողվում են յուրաքանչյուրը տարբեր կերպ։ Ընտրեք շերտը, պահեք գաղտնիքը argv-ից դուրս և սպասեք վիճակի, ոչ թե ելքի կոդերի։
Սկրիպտները միացնում են VPN հաճախորդները այն շերտում, որը ընտրել է հեղինակը, և այդ շերտը հազվադեպ է այն, ինչ անհրաժեշտ էր աշխատանքին։ Մատակարարի հրամանի տողը, օպերացիոն համակարգի հավաքիչը և բջջային հավելվածի մտադրությունը վերադառնում են կապի կյանքի տարբեր պահերին։ Նրանք նաև գաղտնիքին այլ կերպ են վերաբերվում, և այդ տարբերությունը որոշում է՝ գաղտնաբառը տեսանելի է մեքենայի յուրաքանչյուր օգտատիրոջ համար։ Ընտրեք շերտը նախքան սկրիպտի առաջին տողը գրելը։
Շերտ 1: մատակարարի հրամանի տողը
Հաճախորդների մեծ մասը տրամադրում է հրամանի տող, որն ընդունում է պրոֆիլի անուն և, շատ հաճախ, գաղտնաբառ։ Cisco-ի հին հաճախորդը ընդունում էր connect բայը օգտատիրոջ և գաղտնաբառի արգումենտներով՝ macOS-ը ներկայացնում է ներկառուցված ծառայությունը networksetup-ի միջոցով՝ NetworkManager-ը պատասխանում է nmcli-ին։ Այս կանչերը վերադառնում են, երբ հրամանն ավարտվում է, ինչը նույն պահը չէ, երբ թունելը դառնում է օգտագործելի։ Կարդացեք մատակարարի սեփական փաստաթղթերը ձեր տեղադրած տարբերակի համար, որովհետև այս ինտերֆեյսները փոխվում են, և ոմանք ամբողջությամբ հեռացվում են։
nmcli connection up "Work VPN"
networksetup -connectpppoeservice "Work VPN"
Առավելությունն այն է, որ մատակարարը ճանաչում է իր սեփական պրոֆիլների պահոցը, ուստի կանչն օգտագործում է նույն կարգավորումը, ինչ կօգտագործեր GUI-ն։ Թերությունը այն է, որ յուրաքանչյուր մատակարար հորինում է իր բայերը, և մեկ հաճախորդի համար գրված սկրիպտը չի տեղափոխվում մյուսին։ Դիտեք այս շերտը որպես ամենակարճ ուղի, երբ հաճախորդը ֆիքսված է, և տարբերակը կապված։
Շերտ 2: օպերացիոն համակարգի սեփական ծառայությունը
Windows-ում հավաքիչը օպերացիոն համակարգի մաս է և աշխատում է հեռախոսագրքի գրառման դեմ՝ մատակարարի պրոֆիլների պահոցի փոխարեն։ Դա այն դարձնում է ավելի շարժական հաճախորդների միջև և ավելի հեշտ սկրիպտավորելի ծառայության հաշվից։ Դա նաև նշանակում է, որ կապը կարող է գոյություն ունենալ մի տեղում և ոչ մյուսում, ինչը շփոթեցնում է սխալ ցանկին նայող մարդկանց։
rasdial "Work VPN" user pass
Get-VpnConnection -Name "Work VPN" | Select-Object ConnectionStatus
Օգտագործեք PowerShell-ի մակերեսը, երբ պետք է ստեղծել կամ հեռացնել գրառումը՝ այն հավաքելու փոխարեն։ WMI և cmdlet շերտերը ներկայացնում են նույն օբյեկտները տարբեր անուններով, և հեռացումը առանձին գործողություն է անջատումից։ Սկրիպտը, որը միայն հավաքում է, միգրացիայից հետո կթողնի հնացած գրառումներ։ Ստուգեք, թե որ պահոցն է գրում ձեր ավտոմատացումը, նախքան խոստանալ, որ մաքրումը տեղի կունենա։
Remove-VpnConnection -Name "Old VPN" -Force
Get-VpnConnection
macOS-ում համարժեքը ցանցային ծառայությունների ցանկն է, որտեղ գոյություն ունեցող ծառայությունը միանում է անունով, այլ ոչ թե ստեղծվում տեղում։
Հավատարմագրերը արտահոսում են յուրաքանչյուր շերտում, ուստի ընտրեք ալիքը
Այն ամենը, ինչ փոխանցում եք հրամանի տողով, հայտնվում է գործընթացների աղյուսակում յուրաքանչյուր տեղական օգտատիրոջ համար և սովորաբար պահպանվում է նաև shell-ի պատմության մեջ։ OpenVPN-ի աջակցվող այլընտրանքն է կարդալ գաղտնիքը ֆայլից --askpass-ով, և ֆայլն ինքը պահանջում է թույլտվություններ, որոնք համապատասխանում են դրան տված վստահությանը։ Անվանված խողովակը խուսափում է գաղտնիքը սկավառակի վրա գրելուց, բայց թույլ է տալիս ցանկացած գործընթացի, որը կարող է այն բացել, գրել այնտեղ։ Windows-ում պահեք գաղտնիքը հավատարմագրերի կառավարիչում կամ ֆայլում, որը կարող է կարդալ միայն ծառայության հաշիվը, և երբեք՝ որպես բառացի batch ֆայլում։
openvpn --config /etc/openvpn/work.conf --askpass /etc/openvpn/work.secret --auth-nocache --daemon
ls -l /etc/openvpn/work.secret
Նույն կանոնը վերաբերում է նշաններին և մեկանգամյա կոդերին. եթե ավտոմատացմանը դրանք պետք են, ավտոմատացմանը պետք է ալիք, որը հրամանի տողի արգումենտ չէ։ Պտտեք գաղտնիքը, երբ փոխում եք մեխանիզմը, քանի որ հին արժեքը ինչ-որ տեղ մնացել է մատյանում։ Սկրիպտը, որն աշխատում է և արտահոսում, աշխատող սկրիպտ չէ։
Սպասեք վիճակին, ապա վերահսկեք մեկ սեփականատիրոջ
Այս կանչերից յուրաքանչյուրը վերադառնում է նախքան թունելը պատրաստ կլինի, ուստի հարցրեք հաճախորդի ներկայացրած վիճակը կամ փորձեք նպատակակետ դրա ներսում՝ ժամանակի սահմանով։ Ֆայլեր պատճենելը կամ տվյալների բազայի կապը միացման կանչից անմիջապես հետո բացելը մրցավազք է, և այն պարբերաբար ձախողվում է այնպես, որ նման է ցանցի խափանման։
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
Անջատումն ունի նույն խնդիրը հակառակ ուղղությամբ. գործընթացը կարող է դուրս գալ նախքան երթուղիների անհետանալը։ Օգտագործեք հաճախորդի կեռիկները, որտեղ դրանք կան, օրինակ OpenVPN-ի up և down սկրիպտները կամ systemd միավորի ExecStartPost-ը, որովհետև դրանք գործարկվում են այն կետում, որն իսկապես կարևոր է ձեզ։ Կեռիկները գործարկվում են նրանց արտոնություններով, ովքեր կանչել են դրանք, ուստի ցանցը վերագործարկող կեռիկը պահանջում է հստակ կանոն՝ ենթադրության փոխարեն։ Պահպանեք ճիշտ մեկ սեփականատեր կապի ողջ կյանքի ընթացքում։
Երբ երկու վերահսկիչներ միացնում և կանգնեցնում են նույն պրոֆիլը, արդյունքը վերամիացման հանգույց է, որը կարդացվում է որպես մատակարարի խափանում։ Runbook-ն ավարտվում է, երբ շերտը փաստաթղթավորված է, գաղտնիքն ունի ալիք, որը argv չէ, սպասման պայմանը ժամանակի սահմանով վիճակի ստուգում է, և մեկ գործընթաց տիրապետում է կյանքի ցիկլին։