GUI ഇല്ലാതെ Linux ഷെല്ലിൽ നിന്ന് Cisco Secure Client ലോഗിൻ
here-ഡോക്യുമെന്റ് ഒരു ലോഗിൻ പ്രോട്ടോക്കോൾ അല്ല. യഥാർത്ഥ പ്രോംപ്റ്റ് ക്രമം രേഖപ്പെടുത്തുക, അത് മാറുമ്പോൾ expect ഉപയോഗിക്കുക, പാസ്വേഡ് argv-ലും ഹിസ്റ്ററിയിലും നിന്ന് അകറ്റി നിർത്തുക.
നാല് വരികളുള്ള ഒരു here-ഡോക്യുമെന്റ് തന്നെ പൂർണ്ണമായ നോൺ-ഇന്ററാക്ടീവ് ലോഗിൻ ആണെന്നാണ് വിശ്വാസം, ഗേറ്റ്വേ രണ്ട് ഗ്രൂപ്പുകൾ വാഗ്ദാനം ചെയ്യുകയോ ബാനർ അച്ചടിക്കുകയോ പാസ്വേഡിന് ശേഷം ടോക്കൺ ആവശ്യപ്പെടുകയോ ചെയ്യുന്നതുവരെ അത് നിലനിൽക്കും. അപ്പോൾ അതേ സ്ക്രിപ്റ്റ് ഒരു സംഖ്യ പ്രതീക്ഷിച്ച മെനുവിൽ പാസ്വേഡ് ടൈപ്പ് ചെയ്യുന്നു. Linux-ലെ കമാൻഡ് ലൈൻ ക്ലയന്റ് സ്ക്രിപ്റ്റ് ചെയ്യാവുന്നതാണ്, പക്ഷേ ട്യൂട്ടോറിയൽ കരുതിയതല്ല, അത് യഥാർത്ഥത്തിൽ കാത്തിരിക്കുന്നത് നൽകിയാൽ മാത്രം.
നിശ്ചിത here-ഡോക്യുമെന്റ് ഒരു മിത്ത് ആണ്
Cisco-യുടെ Linux ക്ലയന്റ് /opt/cisco/anyconnect/bin/vpn എന്നിടത്ത് ഒരു ചെറിയ പ്രോഗ്രാം ഇൻസ്റ്റാൾ ചെയ്യുന്നു, Secure Client 5 അത് ഇപ്പോഴും നൽകുന്നു. vpnagentd സേവനം പ്രവർത്തിക്കുമ്പോൾ, -s ഫ്ലാഗ് ക്ലയന്റ് ചോദിക്കുന്ന ക്രമത്തിൽ സ്റ്റാൻഡേർഡ് ഇൻപുട്ടിൽ നിന്ന് ഉത്തരങ്ങൾ വായിക്കുന്നു. ആ ക്രമം സെർവറുകൾക്കിടയിൽ നിശ്ചിതമല്ല.
ഗ്രൂപ്പ് മെനു ഒരു വരി ചേർക്കുന്നു. ലോഗിൻ ബാനർ മറ്റൊന്ന് ചേർക്കുന്നു. പാസ്വേഡിന് ശേഷമുള്ള ടോക്കൺ അഭ്യർത്ഥന നാല് വരി സ്ക്രിപ്റ്റിനെ പൂർണ്ണമായി തകർക്കുന്നു, കാരണം അഞ്ചാം വരി ഒരിക്കലും ടോക്കൺ ആകേണ്ടതായിരുന്നില്ല. പരാജയം നിശബ്ദമാണ്: ക്ലയന്റിന് തെറ്റായ സ്ട്രിംഗ് ലഭിക്കുന്നു, കണക്ഷൻ ശ്രമം അവസാനിക്കുന്നു, സ്ക്രിപ്റ്റ് ഉപയോഗപ്രദമായ ഒന്നും റിപ്പോർട്ട് ചെയ്യുന്നില്ല.
അതേ ഗേറ്റ്വേയ്ക്കും പതിപ്പിനും എതിരെ ക്ലയന്റ് ഒരിക്കൽ കൈകൊണ്ട് പ്രവർത്തിപ്പിച്ച്, പ്രോംപ്റ്റുകൾ ദൃശ്യമാകുന്ന ക്രമത്തിൽ എഴുതുക. ആ ട്രാൻസ്ക്രിപ്റ്റാണ് നിങ്ങളുടെ സ്ക്രിപ്റ്റ് പാലിക്കേണ്ട സ്പെസിഫിക്കേഷൻ.
ക്ലയന്റ് എന്തിനാണ് കാത്തിരിക്കുന്നത്
സാധാരണ ഒറ്റ ഗ്രൂപ്പ് സാഹചര്യത്തിൽ ക്രമം ഉപയോക്തൃനാമം, പാസ്വേഡ്, ചിലപ്പോൾ ഒരു ബാനർ സ്ഥിരീകരണം എന്നിവയാണ്. സെർവർ യഥാർത്ഥത്തിൽ ഒരു മെനു കാണിക്കുമ്പോൾ മാത്രമേ here-ഡോക്യുമെന്റിന്റെ ആദ്യ വരി മെനു ഇൻഡക്സ് ആകുന്നുള്ളൂ, അതുകൊണ്ടാണ് ഒരേ സ്ക്രിപ്റ്റ് ഒരിടത്ത് പ്രവർത്തിക്കുകയും അടുത്തതിൽ പരാജയപ്പെടുകയും ചെയ്യുന്നത്.
/opt/cisco/anyconnect/bin/vpn -s connect vpn.example.net <<EOF
0
alice
$VPN_PASSWORD
y
EOF
ഇത് നിശ്ചിത പ്രോട്ടോക്കോളായി അല്ല, നാല് സാധ്യമായ ചോദ്യങ്ങൾക്കുള്ള നാല് ഉത്തരങ്ങളായി വായിക്കുക. പൂജ്യം ഒരു മെനു തിരഞ്ഞെടുപ്പാണ്, പാസ്വേഡല്ല, അവസാനത്തെ y പല ഗേറ്റ്വേകളും ഒരിക്കലും അയക്കാത്ത ഒരു ബാനർ സ്വീകരിക്കുന്നു.
ക്രമം പ്രവചിക്കാനാകാത്തപ്പോൾ expect ഉപയോഗിക്കുക
പ്രോംപ്റ്റ് ക്രമം മാറുമ്പോൾ, വരികൾ എണ്ണുന്നത് നിർത്തി പകരം പ്രോംപ്റ്റിനായി കാത്തിരിക്കുക. ഒരു expect സ്ക്രിപ്റ്റ് connect കമാൻഡ് ആരംഭിച്ച്, ഉപയോക്തൃനാമ പ്രോംപ്റ്റിനായി കാത്തിരുന്ന് അയച്ച്, പാസ്വേഡ് പ്രോംപ്റ്റിനായി കാത്തിരുന്ന് അയച്ച്, പിന്നീട് കണക്ട് ചെയ്ത അവസ്ഥയ്ക്കായി കാത്തിരിക്കുന്നു. ഓരോ കാത്തിരിപ്പിനും അതിന്റേതായ ടൈംഔട്ട് ഉണ്ട്.
ടൈംഔട്ടിനെ ഒരു പരാജയമായി കണക്കാക്കി പുറത്തുകടക്കുക. അപ്രതീക്ഷിതമായ ഒരു പ്രോംപ്റ്റിന് ശേഷവും ഇൻപുട്ട് അയച്ചുകൊണ്ടിരിക്കുന്ന സ്ക്രിപ്റ്റ് സന്തോഷത്തോടെ പാസ്വേഡ് ഒരു ഷെല്ലിലേക്കോ മെനുവിലേക്കോ വായിക്കുന്ന മറ്റെന്തിലേക്കെങ്കിലും ടൈപ്പ് ചെയ്യും. അങ്ങനെയാണ് ഒരു ലോഗിൻ സ്ക്രിപ്റ്റ് ഒരു സംഭവമായി മാറുന്നത്.
രഹസ്യം നീക്കം ചെയ്ത ഒരു ട്രാൻസ്ക്രിപ്റ്റ് കൂടി expect നൽകുന്നു, അത് ലോഗ് ചെയ്യാം, ഒരു അപ്ഗ്രേഡിന് ശേഷം ഗേറ്റ്വേ അതിന്റെ പ്രോംപ്റ്റുകൾ മാറ്റുമ്പോൾ അത് എക്സിറ്റ് കോഡിനേക്കാൾ വിലപ്പെട്ടതാണ്.
രഹസ്യം എവിടെയോ ജീവിക്കണം
ഈ പ്രശ്നത്തിന്റെ എല്ലാ പതിപ്പുകൾക്കും ഒരു ദൗർബല്യമുണ്ട്: പാസ്വേഡ് ക്ലയന്റിന് വായിക്കാനാകുന്ന ഒരു രൂപത്തിൽ നിലനിൽക്കണം. അത് ഒരു ആർഗ്യുമെന്റായി നൽകുന്നത് പ്രോസസ് ടേബിളിൽ അത് വെളിപ്പെടുത്തുന്നു. ഒരു പൈപ്പിലൂടെ എക്കോ ചെയ്യുന്നത് പലപ്പോഴും അത് ഷെൽ ഹിസ്റ്ററിയിൽ ചേർക്കുന്നു. പങ്കിട്ട ഒരു ജംപ് ഹോസ്റ്റിലെ മറ്റ് ലോക്കൽ ഉപഭോക്താക്കൾക്ക് രണ്ടും വായിക്കാനാകും.
install -m 600 /dev/null ~/.vpn-secret
umask 077; VPN_PASSWORD=$(cat ~/.vpn-secret) /opt/cisco/anyconnect/bin/vpn -s connect vpn.example.net
അക്കൗണ്ടിന്റെ ഉടമസ്ഥതയിലുള്ള 600 മോഡുള്ള ഒരു ഫയലാണ് കുറഞ്ഞത്, അതും ഡിസ്കിൽ ഒരു പ്ലെയിൻടെക്സ്റ്റ് രഹസ്യമാണ്. secret-tool lookup Linux കീറിംഗിൽ നിന്ന് വായിക്കുന്നു, macOS-ൽ അതേ ജോലി security find-generic-password -w ചെയ്യുന്നു. സംഘടന സർട്ടിഫിക്കറ്റ് അല്ലെങ്കിൽ SAML പ്രാമാണീകരണം പിന്തുണയ്ക്കുന്നിടത്ത് അതിന് മുൻഗണന നൽകുക, കാരണം സൂക്ഷിച്ച പാസ്വേഡും MFA-യും ചേർന്നാലും ഒരു മനുഷ്യനില്ലാതെ ലോഗിൻ പൂർത്തിയാക്കാനാവില്ല.
ടണൽ സ്ഥിരീകരിച്ച്, പിന്നീട് വിച്ഛേദനം ഏറ്റെടുക്കുക
പിശക് ടെക്സ്റ്റിന്റെ അഭാവത്തെ വിശ്വസിക്കരുത്. ക്ലയന്റിനോട് അതിന്റെ അവസ്ഥ ചോദിച്ച് ഇന്റർഫേസ് സ്വതന്ത്രമായി പരിശോധിക്കുക:
/opt/cisco/anyconnect/bin/vpn state
ip -brief address
അവസ്ഥ Connected എന്ന് വായിക്കണം, ടണൽ ഇന്റർഫേസിന് ഒരു വിലാസം ഉണ്ടായിരിക്കണം. പിന്നീട് ടണൽ എത്തേണ്ട ഒരു റിസോഴ്സ് അഭ്യർത്ഥിക്കുക, കാരണം റൂട്ട് ഇല്ലാത്ത കണക്ടഡ് അവസ്ഥ ഒരു യഥാർത്ഥ ഫലമാണ്, അത് എളുപ്പത്തിൽ വിട്ടുപോകാം.
vpn disconnect ഉപയോഗിച്ച് വിച്ഛേദിക്കുക, ടണൽ ആരംഭിച്ച സ്ക്രിപ്റ്റ് വിച്ഛേദനം ഏറ്റെടുക്കട്ടെ. ഒരു സെഷൻ തുറന്നിടുന്ന പരാജയപ്പെട്ട ജോലി ഒരു ലൈസൻസ് സീറ്റ് ഉപഭോഗിക്കുകയും അടുത്ത് ശ്രമിക്കുന്നയാൾക്ക് പ്രാമാണീകരണ പ്രശ്നമായി തോന്നുകയും ചെയ്യുന്നു.
ജോലിയുടെ ക്രമം: vpnagentd സ്ഥിരീകരിക്കുക, യഥാർത്ഥ പ്രോംപ്റ്റ് ക്രമം രേഖപ്പെടുത്തുക, here-ഡോക്യുമെന്റോ expect-ഓ തിരഞ്ഞെടുക്കുക, രഹസ്യം argv-ലും ഹിസ്റ്ററിയിലും നിന്ന് അകറ്റി നിർത്തുക, അവസ്ഥയും ഒരു റിസോഴ്സും പരിശോധിക്കുക, പിന്നീട് അതേ സ്ക്രിപ്റ്റിൽ വിച്ഛേദിക്കുക.