OpenVPN നിയന്ത്രണ ടെർമിനലിൽ ഉപയോക്തൃനാമവും പാസ്‌വേഡും ആവശ്യപ്പെടുന്നു, സ്റ്റാൻഡേർഡ് ഇൻപുട്ടിലേക്ക് തിരിച്ചുവിട്ട ഫയൽ ആ ടെർമിനലല്ല. ഈ ഒരു വിശദാംശമാണ് പാസ്‌വേഡ് പൈപ്പിനുള്ളിൽ ഉണ്ടായിരുന്നിട്ടും സ്ക്രിപ്റ്റ് തൂങ്ങിക്കിടക്കുന്നതിന്റെ കാരണം. പ്രോംപ്റ്റ് വരയ്ക്കുന്നത് ക്ലയന്റാണ്, വായന ടെർമിനൽ ഉപകരണത്തിൽ നിന്നാണ്, അതിനാൽ stdin തിരിച്ചുവിടുന്നത് ഒന്നും മാറ്റുന്നില്ല. ക്ലയന്റിനെ അതിന്റെ രേഖപ്പെടുത്തിയ ഇൻപുട്ട് വഴികളിലൊന്നിലൂടെ നൽകൂ, അതേ സ്ക്രിപ്റ്റ് ആദ്യ ശ്രമത്തിൽ തന്നെ ബന്ധിപ്പിക്കും.

മൂന്ന് വഴികൾ മിക്കവാറും എല്ലാ സന്ദർഭങ്ങളും ഉൾക്കൊള്ളുന്നു, ഓരോന്നും അതിന്റേതായ രീതിയിൽ പരാജയപ്പെടുന്നു. ക്ലയന്റ് യഥാർത്ഥത്തിൽ കാണിക്കുന്ന പ്രോംപ്റ്റ് അനുസരിച്ച് തിരഞ്ഞെടുക്കൂ, സ്ക്രിപ്റ്റ് ചെയ്യാൻ എളുപ്പമുള്ള ഓപ്ഷൻ അനുസരിച്ചല്ല.

പ്രോംപ്റ്റ് stdin-ൽ നിന്ന് വരുന്നില്ല

OpenVPN-ന് ക്രെഡൻഷ്യലുകൾ ആവശ്യമായാൽ അത് നിയന്ത്രണ ടെർമിനൽ തുറന്ന് അവിടെ നിന്ന് വായിക്കുന്നു. അതുകൊണ്ടാണ് ഇന്ററാക്ടീവ് പരിശോധന നന്നായി തോന്നുന്നത്, എന്നാൽ cron അല്ലെങ്കിൽ unit ഫയലിന് കീഴിൽ അതേ കമാൻഡ് ആരും നോക്കാത്ത ലോഗിൽ പ്രോംപ്റ്റ് എഴുതി നിശ്ചലമായി നിൽക്കുന്നു. ടെർമിനൽ ഇല്ലാത്തപ്പോൾ ചില ബിൽഡുകൾ സ്റ്റാൻഡേർഡ് ഇൻപുട്ടിലേക്ക് മടങ്ങുന്നു, ആ അസ്ഥിരത വിന്യാസം വരെ പ്രശ്നം മറയ്ക്കുന്നതിനാൽ കഠിനമായ പരാജയത്തേക്കാൾ മോശമാണ്.

ഏതെങ്കിലും കോഡ് എഴുതുന്നതിന് മുൻപ് പരിസ്ഥിതി പരിശോധിക്കൂ: ഷെഡ്യൂളറോ സേവന മാനേജറോ ഉപയോഗിക്കുന്ന അതേ ഉപയോക്താവിനും അതേ stdin-നും കീഴിൽ ക്ലയന്റ് പ്രവർത്തിപ്പിക്കൂ. പ്രോംപ്റ്റ് ലോഗിൽ ഒരിക്കലും പ്രത്യക്ഷപ്പെടുന്നില്ലെങ്കിൽ, പ്രക്രിയ മുന്നോട്ട് പോകുന്നില്ലെങ്കിൽ, ഇല്ലാത്ത ഒരു ടെർമിനലിനായി എന്തോ കാത്തിരിക്കുന്നു.

ആദ്യ വഴി: രണ്ട് വരിയുള്ള ക്രെഡൻഷ്യൽ ഫയൽ

പ്രാമാണീകരണ ഓപ്ഷൻ ഒരു പാത്ത് സ്വീകരിക്കുന്നു, ഫയലിൽ കൃത്യമായി രണ്ട് വരികളുണ്ട്, ആദ്യം ഉപയോക്തൃനാമം പിന്നെ പാസ്‌വേഡ്, മറ്റൊന്നുമില്ല. സ്ഥിരസ്ഥിതി ഫയൽനാമത്തിൽ ആശ്രയിക്കാതെ പാത്ത് വ്യക്തമായി നൽകൂ, കാരണം ജോലി ഡയറക്ടറിയിൽ കിടക്കുന്ന ക്രെഡൻഷ്യൽ ഫയലാണ് തെറ്റായ അക്കൗണ്ട് ഉപയോഗത്തിൽ എത്തുന്ന വഴി. മോഡ് 0600 ആക്കി ക്ലയന്റ് പ്രവർത്തിപ്പിക്കുന്ന അക്കൗണ്ടിന് ഉടമസ്ഥത നൽകൂ.

ക്ലയന്റ് ആ ഫയൽ തുടക്കത്തിൽ ഒരിക്കൽ വായിക്കുന്നു, അതിനാൽ പാസ്‌വേഡ് മാറ്റുന്നത് പ്രക്രിയ പുനരാരംഭിക്കുന്നു എന്നാണ് അർത്ഥം. സാധാരണയായി അതാണ് നിങ്ങൾക്ക് വേണ്ട പെരുമാറ്റം, അത് മാറ്റൽ നടപടിക്രമത്തിന് അടുത്ത് റൺബുക്കിൽ വേണം.

രണ്ടാം വഴി: കീയുടെ പാസ്‌ഫ്രേസിനായി askpass

പാസ്‌ഫ്രേസ് സംരക്ഷിത സ്വകാര്യ കീ രണ്ടാമത്തെ, വ്യത്യസ്തമായ പ്രോംപ്റ്റ് ഉയർത്തുന്നു, അതിന് സ്വന്തം ഫയൽ അടിസ്ഥാനമാക്കിയ ഉത്തരമുണ്ട്: askpass ഓപ്ഷൻ ഫയലിന്റെ ആദ്യ വരിയിൽ നിന്ന് പാസ്‌ഫ്രേസ് വായിക്കുന്നു. SSH അടിസ്ഥാനമാക്കിയ ടണലുകൾക്ക് തത്തുല്യമായത് ക്ലയന്റ് പ്രവർത്തിപ്പിക്കുന്ന askpass പ്രോഗ്രാമാണ്, അതിന്റെ സ്റ്റാൻഡേർഡ് ഔട്ട്പുട്ട് രഹസ്യമായി മാറുന്നു.

രണ്ട് രൂപങ്ങളും രഹസ്യം ആർഗ്യുമെന്റ് പട്ടികയിൽ വയ്ക്കുന്നില്ല, രണ്ടും അതിനെ ഫയലായി അല്ലെങ്കിൽ അത് അച്ചടിക്കുന്ന എക്സിക്യൂട്ടബിളായി നിലനിർത്തുന്നു. സംരക്ഷണം ഫയൽ അനുമതികളും പ്രക്രിയ ഉടമസ്ഥതയുമാണ്, ഗോപ്യതയല്ല. കോഡിൽ എഴുതിയ സ്ട്രിംഗ് പ്രതിധ്വനിക്കുന്ന സഹായി അധിക ഘട്ടങ്ങളുള്ള രഹസ്യമാണ്.

മൂന്നാം വഴി: പോർട്ടൽ ക്ലയന്റിന്റെ സ്വന്തം CLI

എന്റർപ്രൈസ് ക്ലയന്റുകൾ സാധാരണയായി ജാലകമില്ലാതെ പേരുള്ള പോർട്ടലിലേക്ക് ബന്ധിപ്പിക്കുന്ന കമാൻഡ് ലൈൻ പ്രവേശന കേന്ദ്രം നൽകുന്നു, അതാണ് പിന്തുണയുള്ള വഴി. Linux-ൽ GlobalProtect ക്ലയന്റ് തന്റെ CLI വഴി കണക്റ്റ്, സർട്ടിഫിക്കറ്റ് ഇംപോർട്ട് പ്രവർത്തനങ്ങൾ നൽകുന്നു, സർട്ടിഫിക്കറ്റ് പ്രാമാണീകരണം ഉപയോഗിക്കുന്ന പോർട്ടലുകൾക്ക് യാന്ത്രിക കണക്റ്റ് പ്രവർത്തിക്കാൻ ഇംപോർട്ട് ഘട്ടം ആവശ്യമാണ്. കൃത്രിമ കീസ്ട്രോക്കുകളെക്കാൾ അത് തിരഞ്ഞെടുക്കൂ: യഥാർത്ഥ എക്സിറ്റ് സ്റ്റാറ്റസ് ലഭിക്കുന്നു, ജാലക ഫോക്കസിനെ ആശ്രയിക്കുന്നില്ല, ലോക്ക് ചെയ്ത സ്ക്രീനിലും നിലനിൽക്കുന്നു.

ആദ്യ കണക്ഷന് ഇപ്പോഴും സർട്ടിഫിക്കറ്റ് സ്വീകരിക്കാൻ ഒരു മനുഷ്യൻ വേണമെങ്കിൽ, ഓട്ടോമേഷൻ പൂർത്തിയായിട്ടില്ല. സെറ്റപ്പ് സമയത്ത് ഇംപോർട്ട് ചെയ്ത് മുൻവ്യവസ്ഥയായി രേഖപ്പെടുത്തൂ.

പ്രവാഹത്തിന് സ്യൂഡോ-ടെർമിനൽ വേണ്ടിവരുമ്പോൾ

ആദ്യം പാസ്‌വേഡ് പിന്നെ ഒറ്റത്തവണ കോഡ് ആവശ്യപ്പെടുന്ന ക്രമത്തിന് വായിക്കാൻ ഒരൊറ്റ ഫയലില്ല. Expect പോലുള്ള ടെർമിനൽ ഡ്രൈവർ ശരിയായ ഉപകരണമാണ്, കാരണം അത് ഓരോ പാറ്റേണിനായും ഊഴമായി കാത്തിരിക്കുന്നു, എന്തെങ്കിലും പൊരുത്തപ്പെടുത്തുന്നതിന് മുൻപ് പ്രക്രിയ ആരംഭിച്ചിരിക്കണം.

രണ്ട് പരാജയങ്ങൾ മേൽക്കൈ നേടുന്നു. ക്ലയന്റ് ആരംഭിക്കാതെ പ്രോംപ്റ്റിനായി കാത്തിരിക്കുന്ന സ്ക്രിപ്റ്റ് എന്നെന്നും കാത്തിരിക്കുന്നു, Tcl ഷെൽ അല്ല, അതിനാൽ expect ബ്ലോക്കിനുള്ളിൽ എഴുതിയ ഷെൽ അങ്കഗണിതം വായിക്കുന്നതുപോലെ മൂല്യനിർണ്ണയം ചെയ്യപ്പെടുന്നില്ല. പാറ്റേണുകൾ നിർമ്മിക്കുമ്പോൾ ഡീബഗ് ഫ്ലാഗ് ഓണായി വയ്ക്കൂ, പിന്നീട് ഓഫ് ചെയ്യൂ.

ചോരുന്ന രഹസ്യങ്ങൾ, അവ എവിടെ ഒളിക്കുന്നു

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

തിരഞ്ഞെടുത്ത വഴികൾ പരിശോധിക്കൂ, പിന്നെ ക്ലയന്റ് യഥാർത്ഥത്തിൽ പ്രവർത്തിപ്പിക്കുന്ന unit ഫയലിലേക്കോ ഷെഡ്യൂളറിലേക്കോ അവ ബന്ധിപ്പിക്കൂ. ടണൽ ആ പ്രക്രിയ ജീവിക്കുന്നിടത്തോളം മാത്രം ജീവിക്കുന്നു.

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