Cisco AnyConnect-ի հետ եկող vpn հաճախորդը իրեն պահում է ինչպես զրույց. տպում է հուշում, սպասում է տողի, ապա տպում հաջորդը։ Այդ զրույցը ներմուծեք ֆայլից կամ խողովակից, և նույն բինարը աշխատում է առանց հսկողության։ Տեխնիկան մեկ վերահասցեավորում և պատասխանների կարգավորված ցանկ է, և հենց ցանկն է, ոչ թե վերահասցեավորումը, որոշում՝ սկրիպտը վստահելի է, թե ոչ։

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

Մեկ հաջորդականություն՝ այն կարգով, ինչ հարցնում է հաճախորդը

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

connect vpn.example.com
0
<username>
<password>
y
exit

Մերկ 0-ը ընտրում է առաջին միացման պրոֆիլը, երբ դարպասը ցանկ է առաջարկում. օգտագործեք այն ինդեքսը, որը տպում է ձեր դարպասը։ y-ը ընդունում է մուտքի բաններ, ուստի ջնջեք այդ տողը, եթե բաններ չկա, և տող ավելացրեք այնտեղ, որտեղ ձեր դարպասը լրացուցիչ հարց է տալիս։ Վերջում exit-ն է այն, ինչ թույլ է տալիս հաճախորդին մաքուր ավարտել, երբ վերջին պատասխանը սպառվել է։

/opt/cisco/anyconnect/bin/vpn -s < anyconnect.txt

Ոչ ինտերակտիվ ռեժիմը այստեղ ընտրովի չէ։ Առանց -s-ի հաճախորդը կարող է տիրանալ տերմինալին և անտեսել վերահասցեավորված մուտքը. դրա հետ պատասխանները կարդացվում են հոսքից և պրոցեսը վերադառնում է։ Այնտեղ, որտեղ բինարին բարձրացված արտոնություններ են պետք, փաթաթեք կանչը sudo -n-ի մեջ, որպեսզի սկրիպտը անմիջապես ձախողվի՝ գաղտնաբառի հարցման վրա արգելափակվելու փոխարեն։

Որտեղ է արտահոսում պատասխանների ֆայլը

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

install -m 600 /dev/null ~/.config/anyconnect.txt
chmod 700 ~/.config

Մյուս կեսը argv-ն է։ Որպես արգումենտ փոխանցված գաղտնաբառը տեսանելի է յուրաքանչյուր տեղական օգտվողի, ով թվարկում է պրոցեսները, և այն նաև հայտնվում է shell-ի պատմության մեջ։ Փոխարենը կարդացեք այն ֆայլի դեսկրիպտորից կամ միջավայրի փոփոխականից, և բեռը դրեք չակերտների մեջ, որպեսզի shell-ը չկարողանա ներսում ոչինչ ընդլայնել։

printf '%s\n' 'connect vpn.example.com' '0' "$VPN_USER" "$VPN_PASS" 'y' 'exit' \
  | sudo -n /opt/cisco/anyconnect/bin/vpn -s

Ուշադրություն դարձրեք չակերտներին։ Կրկնակի չակերտների ներսում ! պարունակող գաղտնաբառը ինտերակտիվ shell-ը կարող է ընդլայնել նախքան հաճախորդը կտեսնի այն, և ձախողումը գալիս է որպես ընդհանուր event-not-found սխալ, որը նման է արձանագրության խնդրի։

Ապացուցեք թունելը, ապա փակեք այն

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

/opt/cisco/anyconnect/bin/vpn state
curl -sS -o /dev/null -w '%{http_code}\n' --max-time 10 https://<internal-host>/
/opt/cisco/anyconnect/bin/vpn disconnect

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

Երբ ֆիքսված ցանկը դադարում է անվտանգ լինել

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

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

Ռոտացիան նույն վերանայման մասն է։ Եթե հավատարմագիրը պահվում է, որոշեք, թե ով կարող է կարդալ այն, երբ այն փոխվում է և ինչն է հեռացնում այն, երբ հոսթը վերակառուցվում է։ Սկրիպտը, որն աշխատում է տարի, որովհետև ոչ ոք չի դիպել գաղտնաբառին, դիզայն չէ, այլ պատահար, որը սպասում է ռոտացիայի քաղաքականության։

Պրոֆիլներ, որոնք AnyConnect չեն

Cisco-ի երկու հին հավատարմագրերի ոճեր շփոթում են սրա հետ։ vpnc պրոֆիլը պահանջում է IPSec ID, որն իրականում խմբի անունն է, ապա խմբի գաղտնիք, ապա ձեր սեփական հավատարմագրերը, և բոլոր երեքը գալիս են նրանից, ով կառավարում է դարպասը։ Հին Cisco IPsec-ը AnyConnect-ից տարբեր արձանագրություն է, ուստի vpnc-ը չի կարող հասնել միայն AnyConnect ծառայությանը. openconnect --protocol=anyconnect-ը բաց հաճախորդն է այդ աշխատանքի համար։

.pcf ֆայլը նկարագրում է հին հաճախորդի պրոֆիլը։ Դրա մեջ եղած հոսթը, խմբի անունը և խմբի գաղտնաբառը կարելի է ձեռքով նորից մուտքագրել Cisco IPsec խոսող հաճախորդում, թեև ֆայլը համընդհանուր ներմուծում չէ, և ցանկացած ոչ կանխադրված պորտ կամ թունելավորման ռեժիմ սովորաբար անհետանում է փոխանցման ժամանակ։

Սկսեք նրանից, ինչ դարպասը իրականում առաջարկում է, ապա ընտրեք այն հաճախորդը, որը խոսում է այդ արձանագրությամբ։ Պրոֆիլը այլ կայքից պատճենելը հենց այն ճանապարհն է, որով մարդիկ հայտնվում են վրիպազերծելով հավատարմագրեր, որոնք երբեք խնդիրը չեն եղել։

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