વેન્ડરનું 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: શું વ્યક્તિનો કોડ સ્ક્રિપ્ટમાં હોવો જોઈએ?

આ એ તપાસ છે જે લોકો છોડી દે છે. ટોકન વ્યક્તિનું હોય છે, જ્યારે સમયપત્રક પ્રમાણે ઉપર આવવાની ટનલ મશીનની હોય છે.

જો કોઈ કામ દેખરેખ વિના ફરી જોડાવું પડે, તો પૂછો કે મશીન પ્રમાણપત્ર કે સેવા ખાતું ઇન્ટરેક્ટિવ લોગિન બદલી શકે છે કે નહીં. કોઈના એક-વખતના કોડને સ્વયંક્રિય કરવું બીજા પરિબળને સંગ્રહિત ગુપ્તમાં ફેરવે છે, જે સ્ક્રિપ્ટની સુવિધા નહીં પણ નીતિ પરિવર્તન છે. જ્યાં સેવા બંનેને સમર્થન આપે છે, ત્યાં કામ ખરેખર કેવી રીતે ચાલે છે તેની સાથે મેળ ખાતું ઓળખપત્ર પસંદ કરો. જવાબ લખી રાખો, કારણ કે આગલી વ્યક્તિ પૂછશે કે સ્ક્રિપ્ટ ટોકન કેમ રાખે છે.

કામ કરતી સ્ક્રિપ્ટ કેવી દેખાય છે

સ્ક્રિપ્ટ પહોંચેલું પગલું છાપે છે, ગુપ્ત ક્યારેય નહીં, અને કોઈપણ નિષ્ફળ અપેક્ષા પર બિન-શૂન્ય કોડ સાથે બહાર નીકળે છે.

જાણી જોઈને તોડીને તેને પરીક્ષણ કરો: ખોટો પાસવર્ડ, ખોટું જૂથ, સમાપ્ત થયેલો ટોકન. દરેક નિષ્ફળતા અટકી જવાને બદલે નામવાળા પગલા પર અટકવી જોઈએ. પછી વાસ્તવિક સેવા સામે તેને એક વખત ચલાવો અને ટનલને સ્ક્રિપ્ટની અંદરથી નહીં, બહારથી તપાસો.

સંબંધિત લેખો