OpenVPN-ը օգտանուն և գաղտնաբառ է պահանջում կառավարող տերմինալում, և ստանդարտ մուտքին վերահասցեավորված ֆայլը այդ տերմինալը չէ։ Հենց այս մանրամասն է բացատրում այն սկրիպտը, որը կախվում է, մինչ գաղտնաբառը հենց այնտեղ՝ խողովակի մեջ է։ Հուշումը նկարում է հաճախորդը, իսկ ընթերցումը կատարվում է տերմինալային սարքից, ուստի stdin-ի վերահասցեավորումը ոչինչ չի փոխում։ Սնուցեք հաճախորդին իր փաստաթղթավորված մուտքերից մեկով, և նույն սկրիպտը կմիանա առաջին իսկ փորձից։

Երեք ուղի ծածկում են գրեթե բոլոր դեպքերը, և յուրաքանչյուրը ձախողվում է իր ձևով։ Ընտրեք ըստ այն հուշման, որը հաճախորդը իրոք ցույց է տալիս, ոչ թե ըստ այն տարբերակի, որը ամենահեշտն է սկրիպտավորել։

Հուշումը stdin-ից չի գալիս

Երբ OpenVPN-ին հավատարմագրեր են պետք, այն բացում է կառավարող տերմինալը և կարդում այնտեղից։ Դրա համար ինտերակտիվ փորձարկումը լավ տեսք ունի, մինչդեռ նույն հրամանը cron-ի կամ unit ֆայլի տակ անշարժ կանգնած է՝ հուշումը գրված մի մատյանում, որին ոչ ոք չի նայում։ Որոշ build-եր վերադառնում են ստանդարտ մուտքին, երբ տերմինալ չկա, և այդ անհամապատասխանությունը վատթար է կոշտ ձախողումից, որովհետև այն թաքցնում է խնդիրը մինչև տեղադրումը։

Ստուգեք միջավայրը նախքան որևէ կոդ գրելը՝ գործարկեք հաճախորդը նույն օգտատիրոջ ներքո, նույն stdin-ով, ինչպես կաներ պլանավորիչը կամ ծառայությունների կառավարիչը։ Եթե հուշումը երբեք չի հայտնվում մատյանում, և գործընթացը չի առաջ շարժվում, ինչ-որ բան սպասում է գոյություն չունեցող տերմինալի։

Առաջին ուղին՝ երկտող հավատարմագրի ֆայլ

Նույնականացման տարբերակը վերցնում է ուղի, և ֆայլը պարունակում է ուղիղ երկու տող՝ սկզբում օգտանունը, ապա գաղտնաբառը, և ոչ ուրիշ բան։ Փոխանցեք ուղին բացահայտորեն՝ փոխարենը չհույսը դնելով լռելյայն ֆայլանվան վրա, որովհետև աշխատանքային պանակում մոլորված հավատարմագրի ֆայլն այն է, ինչի միջոցով սխալ հաշիվն ընկնում է օգտագործման մեջ։ Սահմանեք ռեժիմը 0600 և սեփականությունը տվեք այն հաշվին, որ գործարկում է հաճախորդին։

Հաճախորդը կարդում է այդ ֆայլը մեկ անգամ մեկնարկի ժամանակ, ուստի գաղտնաբառը պտտելը նշանակում է վերսկսել գործընթացը։ Սովորաբար դա է ցանկալի վարքը, և տեղը runbook-ում է՝ պտտման ընթացակարգի կողքին։

Երկրորդ ուղին՝ askpass բանալու գաղտնաբառային արտահայտության համար

Գաղտնաբառային արտահայտությամբ պաշտպանված մասնավոր բանալին առաջացնում է երկրորդ՝ այլ հուշում, և այն ունի իր ֆայլային պատասխանը՝ askpass տարբերակը արտահայտությունը կարդում է ֆայլի առաջին տողից։ SSH-ի վրա հիմնված թունելների համար համարժեքը askpass ծրագիրն է, որը գործարկում է հաճախորդը, և որի ստանդարտ ելքը դառնում է գաղտնիքը։

Ձևերից ոչ մեկը գաղտնիքը չի դնում արգումենտների ցանկում, և երկուսն էլ թողնում են այն գոյություն ունենա որպես ֆայլ կամ որպես այն տպող գործարկվող ծրագիր։ Պաշտպանությունը ֆայլի թույլտվություններն ու գործընթացի սեփականությունն են, ոչ թե անհայտությունը։ Կոդի մեջ կարծրացված տողը արձագանքող օգնականը լրացուցիչ քայլերով գաղտնիք է։

Երրորդ ուղին՝ պորտալի հաճախորդի սեփական CLI-ն

Ձեռնարկային հաճախորդները սովորաբար տրամադրում են հրամանատողի մուտքի կետ, որը միանում է անվանված պորտալին առանց պատուհանի, և դա է աջակցվող ուղին։ Linux-ում GlobalProtect հաճախորդը իր CLI-ի միջոցով տրամադրում է միացման և վկայականի ներմուծման գործողություններ, և վկայականային նույնականացում օգտագործող պորտալներին անհրաժեշտ է ներմուծման քայլը, նախքան ավտոմատացված միացումը կաշխատի։ Նախապատվեք այն սինթեզված ստեղնահարվածներին՝ ստանում եք իրական ելքի կարգավիճակ, կախվածություն չկա պատուհանի ֆոկուսից, և այն դիմանում է կողպված էկրանին։

Եթե առաջին միացումը դեռ մարդ է պահանջում վկայականը ընդունելու համար, ավտոմատացումը ավարտված չէ։ Կատարեք ներմուծումը տեղադրման ընթացքում և գրանցեք այն որպես նախապայման։

Երբ հոսքին պսևդոտերմինալ է պետք

Հերթականությունը, որը պահանջում է գաղտնաբառ, ապա մեկանգամյա կոդ, ընթերցելու մեկ ֆայլ չունի։ Expect-ի նման տերմինալային վարորդը ճիշտ գործիքն է, որովհետև այն հերթով սպասում է յուրաքանչյուր նախշի, և նրան պետք է գործարկված գործընթաց, նախքան ընդհանրապես ինչ-որ բան համապատասխանեցնելը։

Երկու ձախողում գերակշռում է։ Սկրիպտը, որը սպասում է հուշմանը առանց հաճախորդը գործարկելու, սպասում է հավերժ, և Tcl-ը shell չէ, ուստի expect բլոկի ներսում գրված shell-ային թվաբանությունը չի գնահատվում այնպես, ինչպես կարդացվում է։ Թողեք վրիպազերծման դրոշակը միացված, մինչ նախշերն եք կառուցում, ապա անջատեք այն։

Գաղտնիքներ, որոնք արտահոսում են, և որտեղ են թաքնվում

Ամեն ինչ, որ փոխանցվում է որպես արգումենտ, տեսանելի է գործընթացների ցանկում, ուստի հավատարմագրերը տեղ ունեն ֆայլում կամ օգնականի հետևում, երբեք հրամանատողում։ Մեկանգամյա կոդերը սպառվում են ըստ նախագծի և պետք է արտադրվեն յուրաքանչյուր փորձի համար։ Ձախողման մատյանները հաճախ կրում են օգտանունը և երբեմն ավելին, ուստի խմբագրեք դրանք նախքան որևէ տեղ ուղարկելը, և գաղտնիքը պահեք հենց պրոֆիլից դուրս, որովհետև ներկառուցված գաղտնաբառով կազմաձևի ֆայլը կպչվում է տոմսերի և պահոցների մեջ։ Հաշիվը պտտելը այն ժամանակ նշանակում է որսալ յուրաքանչյուր պատճեն, և հենց այդ ծախսն է, որից այս դասավորությունը խուսափում է։

Աուդիտ արեք ընտրված ուղիները, ապա միացրեք դրանք unit ֆայլին կամ պլանավորիչին, որը իրոք կգործարկի հաճախորդը։ Թունելը ապրում է ուղիղ այնքան, որքան ապրում է այդ գործընթացը։

Առնչվող հոդվածներ