Жеткирүүчүнүн 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-текшерүү: адамдын коду скриптте болушу керекпи?

Бул — адамдар өткөрүп жиберген текшерүү. Токен адамга таандык, ал эми график боюнча көтөрүлүүчү тоннель машинага таандык.

Эгер жумуш көзөмөлсүз кайра туташууга тийиш болсо, машина сертификаты же кызмат эсеби интерактивдүү кирүүнү алмаштыра алабы, сураңыз. Бирөөнүн бир жолку кодун автоматташтыруу экинчи факторду сакталган сырга айландырат, бул скрипт ыңгайлуулугу эмес, саясат өзгөрүүсү. Кызмат экөөнү тең колдогон жерде жумуштун иш жүзүндө кантип жүргөнүнө туура келген каттоону тандаңыз. Жоопту жазып коюңуз, анткени кийинки адам скрипт эмне үчүн токен кармайт деп сурайт.

Иштеген скрипт кандай көрүнөт

Скрипт жеткен кадамды басат, сырды эч качан баспайт жана ар кандай ийгиликсиз күтүүдө нөлдөн башка код менен чыгат.

Атайын бузуп сынап көрүңүз: туура эмес сырсөз, туура эмес топ, мөөнөтү өткөн токен. Ар бир ийгиликсиздик илинип калбай, аталган кадамда токтошу керек. Анан аны чыныгы кызматка каршы бир жолу иштетип, тоннелди скрипттин сыртынан текшериңиз, ичинен эмес.

Тектеш макалалар