Жеткізушінің VPN клиентін іске қосатын скрипт уақыт шегі бітпейінше ілініп қалады, ал журнал клиенттің ешкім термеген растау кодын сұрап тұрғанын көрсетеді. Құпиясөз берілген, сондықтан айқын қорытынды — құпиясөз қате. Олай емес. Код сұрауы бөлек арнадағы бөлек әңгіме, және скриптіңіз оны ешқашан ашпаған.

Төмендегі бес тексеруді ретімен орындаңыз. Бірінші сәтсіз тексеруде тоқтаңыз, өйткені әрбір кейінгі қадам алдыңғыларының дұрыстығына сүйенеді.

1-тексеру: клиент стандартты кірісті мүлде оқи ма?

Кез келген автоматтандыруды жазбас бұрын сынап көріңіз: клиентке құбыр арқылы жалған құпия жіберіп, не болатынын бақылаңыз. Егер ол сұрауын басып, содан кейін күтіп тұрса, құбырды оқымайды.

Көптеген клиент терминал құрылғысын тікелей ашады немесе терминал емес ағыннан құпия алудан бас тартады, сондықтан адасқан құбыр құпиясөзді ағызып жібере алмайды. OpenVPN — құжатталған ерекшелік, өйткені --auth-user-pass файл жолын алады. Бір реттік код сұрайтын жеткізуші клиенттерінде әдетте балама белгі жоқ, және олардың сұрауы скриптіңіз ұсынбаған терминалды күтеді.

2-тексеру: балалық процестің терминалы бар ма?

pty балаға терминал бөледі, бұл сұрауларды ретімен жауап бере алатын оқылатын шығысқа айналдырады.

import pexpect

child = pexpect.spawn("openconnect vpn.example.net", encoding="utf-8", timeout=30)
child.expect("GROUP:")
child.sendline("staff")
child.expect("USERNAME:")
child.sendline("alice")
child.expect("PASSWORD:")
child.sendline(PASSWORD)
child.expect("Connected as", timeout=60)

Жоғарыдағы сұрау жолдары — мысал; клиентіңіз басатын нақты мәтінді әріп регистрі мен тыныс белгілеріне дейін көшіріңіз. Әрбір күтудің уақыт шегі бар, ал жабылған бала күй қайтармай, ерекше жағдай тастайды, сондықтан тізбекті қоршап, файл соңын сәтсіздік деп қараңыз. Бұл блок нені жасамайтынына назар аударыңыз: бала скриптпен бірге өледі, өйткені pty — ажырату механизмі емес, ал disown — қабықтың кіріктірілген командасы, ол скриптіңіз жасаған процеске жете алмайды.

3-тексеру: қолдау көрсетілетін интерактивті емес кіріс бар ма?

Экранды қыру клиент жаңарғанда бұзылады, сондықтан алдымен құжатталған белгіні іздеңіз.

Анықтама шығысынан токен немесе бір реттік код опциясын тексеріңіз және қызмет құпиясөз өрісіне қосылған кодты қабылдайтынын тексеріңіз. Клиент тіркелгі деректерінің файлын оқитын жерде оған сұрау орнына файл беріңіз:

openvpn --config office.ovpn --auth-user-pass <(printf "%s\n%s\n" "$USER_NAME" "$PASSWORD")

Процесті алмастыру /dev/fd ұсынатын жүйелерде клиентке оқылатын жол береді. Құпия клиент тұрғысынан құпия күйінде қалады, сондықтан оны журналдардан, қабық тарихынан және процесс тізімдерінен алыс ұстаңыз. Егер клиент /dev/fd-ді қабылдамаса немесе тіркелгі жолын бірнеше рет ашса, қатаң рұқсаттармен нақты файл жазып, оны сол скриптте жойыңыз.

4-тексеру: туннель скрипттен ұзағырақ өмір сүре ме?

Әдепкі бойынша туннель ата-анасымен бірге өледі, бұл іске қосу скриптіне керек нәрсенің керісі.

disown -h тек клиентті қабық тапсырмасы ретінде іске қосқанда көмектеседі, өйткені ол сол қабықтың тапсырмалар кестесін өңдейді және скриптіңіз pty арқылы жасаған процеске жете алмайды. Қадағалаусыз қайта қосылуы керек барлық нәрсе үшін қызмет менеджері жақсырақ орын, өйткені ол клиентті қайта іске қосады және оның неліктен өлгенін жазады. Қалай болғанда да, әрбір қайта қосылудан кейін жаңа код күтіңіз: бір реттік токен бірінші сәтті аутентификацияда жұмсалады.

sudo тізбекке не істейтінін бақылаңыз. sudo құпиясөз сұрауы VPN сұрауы емес, және оған VPN құпиясөзімен жауап беру — әйтпесе дұрыс күту тәртібінің сәтсіз болатын ең көп тараған жолы.

5-тексеру: адамның коды скриптте болуы керек пе?

Бұл — адамдар өткізіп жіберетін тексеру. Токен адамға тиесілі, ал кесте бойынша көтерілуі керек туннель машинаға тиесілі.

Егер жұмыс қадағалаусыз қайта қосылуы керек болса, машина сертификаты немесе қызмет тіркелгісі интерактивті кіруді алмастыра ала ма, соны сұраңыз. Біреудің бір реттік кодын автоматтандыру екінші факторды сақталған құпияға айналдырады, бұл скрипт ыңғайлылығы емес, саясат өзгерісі. Қызмет екеуін де қолдайтын жерде жұмыстың нақты қалай жүретініне сай келетін тіркелгіні таңдаңыз. Жауапты жазып қойыңыз, өйткені келесі адам скрипт неге токен ұстайтынын сұрайды.

Жұмыс істейтін скрипт қандай көрінеді

Скрипт жеткен қадамды басады, құпияны ешқашан баспайды және кез келген сәтсіз күтуде нөлден өзге кодпен шығады.

Оны әдейі бұзып сынап көріңіз: қате құпиясөз, қате топ, мерзімі өткен токен. Әрбір сәтсіздік ілініп қалмай, аталған қадамда тоқтауы керек. Содан кейін оны нақты қызметке қарсы бір рет іске қосып, туннельді скрипттің сыртынан тексеріңіз, ішінен емес.

Қатысты мақалалар