Script inayoanzisha mteja wa VPN wa muuzaji hukwama hadi muda uishe, na kumbukumbu inaonyesha mteja anaomba msimbo wa uthibitisho ambao hakuna aliyebandika. Nenosiri lilitolewa, kwa hiyo hitimisho dhahiri ni kwamba nenosiri si sahihi. Sivyo. Ombi la msimbo ni mazungumzo tofauti kwenye kituo tofauti, na script yako haikufungua kamwe.

Pitia ukaguzi watano hapa chini kwa mpangilio. Simama kwenye ule wa kwanza unaoshindikana, kwa sababu kila hatua inayofuata inadhani zile zilizopita zinashikilia.

Ukaguzi 1: je, mteja anasoma ingizo la kawaida hata kidogo?

Jaribu kabla ya kuandika otomatiki yoyote: pitisha siri ya uongo kwa mteja kupitia bomba na uone kinachotokea. Ikichapisha ombi lake kisha ikasubiri, haisomi bomba.

Wateja wengi hufungua kifaa cha terminal moja kwa moja, au hukataa kuchukua siri kutoka mkondo ambao si terminal, ili bomba lililopotea lisiweze kuvujisha nenosiri. OpenVPN ndiyo istisno iliyoandikwa, kwa sababu --auth-user-pass inachukua njia ya faili. Wateja wa wauzaji wanaoomba msimbo wa mara moja kwa kawaida hawana chaguo sawa, na ombi lao linasubiri terminal ambayo script yako haikutoa kamwe.

Ukaguzi 2: je, mchakato mtoto una terminal?

pty hutenga terminal kwa mtoto, jambo ambalo hubadilisha maombi kuwa matokeo yanayosomeka ambayo unaweza kuyajibu kwa mpangilio.

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)

Mistari ya maombi hapo juu ni mifano; nakili maandishi halisi ambayo mteja wako huchapisha, ikiwemo herufi kubwa na ndogo na alama za uakifishaji. Kila tarajio lina kikomo cha muda, na mtoto aliyefungwa hutoa hitilafu badala ya kurudisha hali, kwa hiyo funga mfululizo na uchukue mwisho wa faili kama kushindikana. Angalia kile kipengele hiki hakifanyi: mtoto hufa pamoja na script, kwa sababu pty si utaratibu wa kujitenga na disown ni amri ya ndani ya shell ambayo haiwezi kufikia mchakato ambao script yako ilianzisha.

Ukaguzi 3: je, kuna ingizo lisilo la mwingiliano linaloungwa mkono?

Uchoraji wa skrini huvunjika wakati mteja anasasishwa, kwa hiyo tafuta chaguo lililoandikwa kwanza.

Angalia matokeo ya usaidizi kwa chaguo la tokeni au msimbo wa mara moja, na uangalie kama huduma inakubali msimbo ulioongezwa kwenye sehemu ya nenosiri. Pale mteja anasoma faili ya vitambulisho, mpe faili badala ya ombi:

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

Ubadilishaji wa michakato humpa mteja njia inayosomeka kwenye mifumo inayotoa /dev/fd. Siri bado ni siri kwa mtazamo wa mteja, kwa hiyo iweke mbali na kumbukumbu, historia ya shell na orodha za michakato. Ikiwa mteja anakataa /dev/fd au kufungua njia ya vitambulisho zaidi ya mara moja, andika faili halisi yenye ruhusa kali na uifute katika script hiyo hiyo.

Ukaguzi 4: je, handaki itaishi zaidi ya script?

Kwa chaguo-msingi handaki hufa pamoja na mzazi wake, jambo ambalo ni kinyume cha kile script ya uanzishaji inahitaji.

disown -h husaidia tu pale ulipoanzisha mteja kama kazi ya shell, kwa sababu huhariri jedwali la kazi la shell hiyo na hawezi kufikia mchakato ambao script yako ilianzisha kupitia pty. Meneja wa huduma ni makao bora kwa kila kitu kinachopaswa kuunganishwa tena bila uangalizi, kwa sababu huanzisha upya mteja na hurekodi kwa nini alikufa. Kwa vyovyote, tarajia msimbo mpya baada ya kila kuunganishwa tena: tokeni ya mara moja hutumika katika uthibitishaji wa kwanza uliofaulu.

Angalia kile sudo hufanya kwa mfululizo. Ombi la nenosiri la sudo si ombi la VPN, na kulijibu kwa nenosiri la VPN ndiyo njia ya kawaida zaidi ambayo mpangilio sahihi wa matarajio bado hushindikana.

Ukaguzi 5: je, msimbo wa mtu unapaswa kuwa kwenye script?

Huu ndio ukaguzi ambao watu huuruka. Tokeni ni ya mtu, wakati handaki inayopaswa kupanda kwa ratiba ni ya mashine.

Ikiwa kazi inapaswa kuunganishwa tena bila uangalizi, uliza kama cheti cha mashine au akaunti ya huduma inaweza kuchukua nafasi ya kuingia kwa mwingiliano. Kuweka otomatiki msimbo wa mara moja wa mtu hugeuza kipengele cha pili kuwa siri iliyohifadhiwa, jambo ambalo ni mabadiliko ya sera na si urahisi wa script. Pale huduma inaunga mkono vyote viwili, chagua vitambulisho vinavyolingana na jinsi kazi inavyoendeshwa kweli. Andika jibu, kwa sababu mtu anayefuata atauluza kwa nini script inashikilia tokeni.

Script inayofanya kazi inaonekanaje

Script huchapisha hatua iliyofikiwa, kamwe si siri, na hutoka kwa msimbo usio sifuri kwenye kila tarajio lililoshindikana.

Ijaribu kwa kuivunja kwa makusudi: nenosiri lisilo sahihi, kundi lisilo sahihi, tokeni iliyoisha muda. Kila kushindikana kunapaswa kusimama kwenye hatua iliyotajwa badala ya kukwama. Kisha iendeshe mara moja dhidi ya huduma halisi na angalia handaki kutoka nje ya script, si kutoka ndani.

Makala zinazohusiana