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

નિશ્ચિત here-document એ દંતકથા છે

Cisco નું Linux ક્લાયન્ટ /opt/cisco/anyconnect/bin/vpn પર નાનું પ્રોગ્રામ ઇન્સ્ટોલ કરે છે, અને Secure Client 5 હજી પણ તે આપે છે. vpnagentd સેવા ચાલુ હોય ત્યારે -s ફ્લેગ ક્લાયન્ટ જે ક્રમમાં પૂછે તે ક્રમમાં સ્ટાન્ડર્ડ ઇનપુટમાંથી જવાબ વાંચે છે. એ ક્રમ સર્વરો વચ્ચે નિશ્ચિત નથી.

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

એ જ ગેટવે અને આવૃત્તિ સામે એક વાર ક્લાયન્ટ જાતે ચલાવો, અને પ્રોમ્પ્ટ જે ક્રમમાં આવે તે ક્રમમાં લખી લો. એ ટ્રાન્સક્રિપ્ટ એ સ્પેસિફિકેશન છે જે તમારી સ્ક્રિપ્ટે પૂરી કરવી પડે.

ક્લાયન્ટ શેની રાહ જુએ છે

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

/opt/cisco/anyconnect/bin/vpn -s connect vpn.example.net <<EOF
0
alice
$VPN_PASSWORD
y
EOF

તેને ચાર સંભવિત પ્રશ્નોના ચાર જવાબ તરીકે વાંચો, નિશ્ચિત પ્રોટોકોલ તરીકે નહીં. શૂન્ય એ મેનૂ પસંદગી છે, પાસવર્ડ નહીં, અને અંતનું y એવા બેનરને સ્વીકારે છે જે ઘણા ગેટવે ક્યારેય મોકલતા નથી.

ક્રમ અનુમાનયોગ્ય ન હોય ત્યારે expect વાપરો

જ્યારે પ્રોમ્પ્ટનો ક્રમ બદલાય, ત્યારે લીટી ગણવાનું બંધ કરો અને તેના બદલે પ્રોમ્પ્ટની રાહ જુઓ. expect સ્ક્રિપ્ટ connect આદેશ શરૂ કરે છે, વપરાશકર્તાનામ પ્રોમ્પ્ટની રાહ જુએ છે, મોકલે છે, પાસવર્ડ પ્રોમ્પ્ટની રાહ જુએ છે, મોકલે છે, અને પછી જોડાયેલી સ્થિતિની રાહ જુએ છે. દરેક રાહની પોતાની સમયમર્યાદા હોય છે.

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

expect તમને એવી ટ્રાન્સક્રિપ્ટ પણ આપે છે જે ગુપ્ત ભાગ કાઢી નાખીને લોગ કરી શકાય, અને ગેટવે અપગ્રેડ પછી પ્રોમ્પ્ટ બદલે ત્યારે તે exit કોડ કરતાં વધુ કિંમતી છે.

ગુપ્ત માહિતીને ક્યાંક રહેવું જ પડે

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

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-document કે expect પસંદ કરો, ગુપ્ત માહિતી argv અને ઇતિહાસની બહાર રાખો, સ્થિતિ અને એક સંસાધન ચકાસો, અને પછી એ જ સ્ક્રિપ્ટમાં ડિસ્કનેક્ટ કરો.

સંબંધિત લેખો