വെണ്ടറുടെ 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: ഒരു വ്യക്തിയുടെ കോഡ് സ്ക്രിപ്റ്റിൽ ആകേണ്ടതുണ്ടോ?

ഇതാണ് ആളുകൾ ഒഴിവാക്കുന്ന പരിശോധന. ടോക്കൺ ഒരു വ്യക്തിക്കുള്ളതാണ്, എന്നാൽ ഷെഡ്യൂൾ പ്രകാരം ഉയരേണ്ട ടണൽ യന്ത്രത്തിനുള്ളതാണ്.

ഒരു ജോലി നിരീക്ഷണമില്ലാതെ വീണ്ടും ബന്ധിപ്പിക്കേണ്ടതുണ്ടെങ്കിൽ, യന്ത്ര സർട്ടിഫിക്കറ്റോ സേവന അക്കൗണ്ടോ ഇന്ററാക്ടീവ് ലോഗിൻ മാറ്റിസ്ഥാപിക്കാമോ എന്ന് ചോദിക്കുക. ഒരാളുടെ ഒരു തവണത്തെ കോഡ് സ്വയംകൃതമാക്കുന്നത് രണ്ടാം ഘടകത്തെ സംഭരിച്ച രഹസ്യമാക്കി മാറ്റുന്നു, അത് സ്ക്രിപ്റ്റിംഗ് സൗകര്യമല്ല, നയമാറ്റമാണ്. സേവനം രണ്ടും പിന്തുണയ്ക്കുന്നിടത്ത്, ജോലി യഥാർത്ഥത്തിൽ എങ്ങനെ പ്രവർത്തിക്കുന്നു എന്നതിന് യോജിക്കുന്ന ക്രെഡൻഷ്യൽ തിരഞ്ഞെടുക്കുക. ഉത്തരം എഴുതി വയ്ക്കുക, കാരണം അടുത്ത വ്യക്തി സ്ക്രിപ്റ്റ് എന്തുകൊണ്ട് ടോക്കൺ സൂക്ഷിക്കുന്നു എന്ന് ചോദിക്കും.

പ്രവർത്തിക്കുന്ന സ്ക്രിപ്റ്റ് എങ്ങനെയിരിക്കും

സ്ക്രിപ്റ്റ് എത്തിയ ഘട്ടം അച്ചടിക്കുന്നു, രഹസ്യം ഒരിക്കലുമല്ല, കൂടാതെ ഏതെങ്കിലും പ്രതീക്ഷ പരാജയപ്പെട്ടാൽ പൂജ്യമല്ലാത്ത കോഡോടെ പുറത്തുപോകുന്നു.

കരുതിക്കൂട്ടി തകർത്ത് പരീക്ഷിക്കുക: തെറ്റായ പാസ്വേഡ്, തെറ്റായ ഗ്രൂപ്പ്, കാലഹരണപ്പെട്ട ടോക്കൺ. ഓരോ പരാജയവും തൂങ്ങിക്കിടക്കുന്നതിന് പകരം പേരിട്ട ഘട്ടത്തിൽ നിർത്തണം. എന്നിട്ട് യഥാർത്ഥ സേവനത്തിനെതിരെ ഒരിക്കൽ പ്രവർത്തിപ്പിച്ച് ടണൽ സ്ക്രിപ്റ്റിന് പുറത്തുനിന്ന് പരിശോധിക്കുക, അകത്തുനിന്നല്ല.

അനുബന്ധ ലേഖനങ്ങൾ