VPN ક્લાયન્ટનું સ્ક્રિપ્ટિંગ: પાસવર્ડ પહેલાં સ્તર પસંદ કરો
વેન્ડરની CLI, rasdial, એપનો ઇરાદો અથવા UI ઓટોમેશન દરેક અલગ રીતે નિષ્ફળ જાય છે. સ્તર પસંદ કરો, ગુપ્તને argv બહાર રાખો, અને સ્થિતિની રાહ જુઓ, નિકાસ કોડની નહીં.
સ્ક્રિપ્ટ્સ VPN ક્લાયન્ટને તે સ્તર પર શરૂ કરે છે જે લેખકે પસંદ કર્યું હતું, અને તે સ્તર ભાગ્યે જ એ હોય છે જેની કામને જરૂર હતી. વેન્ડરની કમાન્ડ લાઇન, ઓપરેટિંગ સિસ્ટમનો ડાયલર અને મોબાઇલ એપનો ઇરાદો બધા કનેક્શનના જીવનના જુદા જુદા બિંદુઓ પર પાછા ફરે છે. તેઓ ગુપ્તને પણ જુદી રીતે સંભાળે છે, અને આ જ તફાવત નક્કી કરે છે કે પાસવર્ડ મશીન પરના દરેક વપરાશકર્તાને દેખાય છે કે નહીં. સ્ક્રિપ્ટની પહેલી લાઇન લખતા પહેલાં સ્તર પસંદ કરો.
સ્તર 1: વેન્ડરની કમાન્ડ લાઇન
મોટાભાગના ડેસ્કટોપ ક્લાયન્ટ પ્રોફાઇલનું નામ અને, ઘણી વાર, પાસવર્ડ લેતી કમાન્ડ લાઇન આપે છે. Ciscoનો જૂનો ક્લાયન્ટ વપરાશકર્તા અને પાસવર્ડ દલીલો સાથે connect ક્રિયાપદ સ્વીકારતો હતો; macOS એન્જિન સેવાને networksetup દ્વારા પ્રસ્તુત કરે છે; NetworkManager nmcliને જવાબ આપે છે. આ કૉલ કમાન્ડ પૂરી થાય ત્યારે પાછા ફરે છે, જે તે ક્ષણ નથી જ્યારે ટનલ વાપરી શકાય તેવી બને છે. તમારા તૈનાત સંસ્કરણ માટે વેન્ડરનું પોતાનું દસ્તાવેજીકરણ વાંચો, કારણ કે આ ઇન્ટરફેસ બદલાય છે અને કેટલાક સંપૂર્ણપણે દૂર કરવામાં આવે છે.
nmcli connection up "Work VPN"
networksetup -connectpppoeservice "Work VPN"
ફાયદો એ છે કે વેન્ડર પોતાનું પ્રોફાઇલ સ્ટોર જાણે છે, તેથી કૉલ એ જ રૂપરેખાંકન વાપરે છે જે GUI વાપરે. ગેરફાયદો એ છે કે દરેક વેન્ડર પોતાની ક્રિયાપદો શોધે છે, અને એક ક્લાયન્ટ માટે લખાયેલી સ્ક્રિપ્ટ બીજા પર જતી નથી. ક્લાયન્ટ નિશ્ચિત અને સંસ્કરણ પિન થયેલું હોય ત્યારે આ સ્તરને સૌથી ટૂંકો રસ્તો ગણો.
સ્તર 2: ઓપરેટિંગ સિસ્ટમની પોતાની સેવા
Windowsમાં ડાયલર ઓપરેટિંગ સિસ્ટમનો ભાગ છે, અને તે વેન્ડરના પ્રોફાઇલ સ્ટોરને બદલે ફોનબુક એન્ટ્રી સામે કામ કરે છે. આ તેને ક્લાયન્ટ વચ્ચે વધુ પોર્ટેબલ અને સેવા ખાતામાંથી સ્ક્રિપ્ટ કરવું સરળ બનાવે છે. તેનો અર્થ એ પણ છે કે કનેક્શન એક જગ્યાએ હોઈ શકે અને બીજી જગ્યાએ નહીં, જે ખોટી યાદીમાં જોનારાઓને મૂંઝવે છે.
rasdial "Work VPN" user pass
Get-VpnConnection -Name "Work VPN" | Select-Object ConnectionStatus
જ્યારે એન્ટ્રી બનાવવી કે દૂર કરવી હોય ત્યારે તેને ડાયલ કરવાને બદલે PowerShell સપાટી વાપરો. WMI અને cmdlet સ્તરો એ જ વસ્તુઓ જુદા નામોથી પ્રસ્તુત કરે છે, અને દૂર કરવું ડિસ્કનેક્ટ કરવાથી અલગ ક્રિયા છે. ફક્ત ડાયલ કરતી સ્ક્રિપ્ટ સ્થળાંતર પછી જૂની એન્ટ્રીઓ છોડી દેશે. સફાઈ થશે તેવું વચન આપતા પહેલાં તપાસો કે તમારું ઓટોમેશન કયા સ્ટોરમાં લખે છે.
Remove-VpnConnection -Name "Old VPN" -Force
Get-VpnConnection
macOSમાં સમકક્ષ નેટવર્ક સેવાઓની યાદી છે, જ્યાં હાલની સેવા નામથી જોડાય છે, સ્થળ પર બનાવાતી નથી.
ક્રેડેન્શિયલ દરેક સ્તર પર લીક થાય છે, તેથી ચેનલ પસંદ કરો
કમાન્ડ લાઇન પર જે પણ મોકલો છો તે દરેક સ્થાનિક વપરાશકર્તા માટે પ્રોસેસ ટેબલમાં દેખાય છે, અને સામાન્ય રીતે શેલ ઇતિહાસમાં પણ ટકી રહે છે. OpenVPNનો સમર્થિત વિકલ્પ એ છે કે ગુપ્તને ફાઇલમાંથી વાંચો --askpass સાથે, અને ફાઇલને પોતાને એવી પરવાનગીઓ જોઈએ જે તેના પર મૂકેલા વિશ્વાસને અનુરૂપ હોય. નામિત પાઇપ ગુપ્તને ડિસ્ક પર લખવાનું ટાળે છે પણ તેને ખોલી શકે તેવી કોઈપણ પ્રક્રિયાને ત્યાં લખવા દે છે. Windowsમાં ગુપ્તને ક્રેડેન્શિયલ મેનેજરમાં, અથવા એવી ફાઇલમાં રાખો જે ફક્ત સેવા ખાતું વાંચી શકે, અને ક્યારેય બેચ ફાઇલમાં શાબ્દિક રૂપે ન રાખો.
openvpn --config /etc/openvpn/work.conf --askpass /etc/openvpn/work.secret --auth-nocache --daemon
ls -l /etc/openvpn/work.secret
આ જ નિયમ ટોકન અને એક વાર વપરાતા કોડ પર પણ લાગુ પડે છે: જો ઓટોમેશનને તેની જરૂર હોય તો ઓટોમેશનને એવી ચેનલ જોઈએ જે કમાન્ડ લાઇન દલીલ ન હોય. જ્યારે તંત્ર બદલો ત્યારે ગુપ્તને ફેરવો, કારણ કે જૂનું મૂલ્ય ક્યાંક લોગમાં પડ્યું છે. કામ કરતી અને લીક થતી સ્ક્રિપ્ટ કામ કરતી સ્ક્રિપ્ટ નથી.
સ્થિતિની રાહ જુઓ, પછી એક જ માલિક પર નજર રાખો
આમાંનો દરેક કૉલ ટનલ તૈયાર થાય તે પહેલાં પાછો ફરે છે, તેથી ક્લાયન્ટ જે સ્થિતિ પ્રસ્તુત કરે છે તે પૂછો અથવા તેની અંદરના ગંતવ્યને સમયમર્યાદા સાથે ચકાસો. કનેક્શન કૉલ પછી તરત જ ફાઇલો કૉપી કરવી અથવા ડેટાબેઝ કનેક્શન ખોલવું એ દોડ છે, અને તે વારંવાર નેટવર્ક ખામી જેવી રીતે નિષ્ફળ જાય છે.
ip link show tun0
nmcli -t -f GENERAL.STATE connection show "Work VPN"
curl -sS --max-time 5 https://app.internal.example/health -o /dev/null
ડિસ્કનેક્ટની વિરુદ્ધ દિશામાં એ જ સમસ્યા છે: પ્રક્રિયા માર્ગો જતાં પહેલાં નીકળી શકે છે. ક્લાયન્ટના હૂક જ્યાં હાજર હોય ત્યાં વાપરો, જેમ કે OpenVPN ના up અને down સ્ક્રિપ્ટ અથવા systemd યુનિટનો ExecStartPost, કારણ કે તેઓ ખરેખર તમને મહત્ત્વના બિંદુ પર ચાલે છે. હૂક તેમને બોલાવનારના વિશેષાધિકારો સાથે ચાલે છે, તેથી નેટવર્ક ફરી શરૂ કરતા હૂકને ધારણાને બદલે સ્પષ્ટ નિયમ જોઈએ. કનેક્શનના સંપૂર્ણ જીવન દરમિયાન બરાબર એક માલિક રાખો.
જ્યારે બે પર્યવેક્ષક એક જ પ્રોફાઇલ શરૂ અને બંધ કરે છે, પરિણામ પુનઃકનેક્શનનું લૂપ હોય છે જે પ્રદાતાની અડચણ જેવું વંચાય છે. રનબુક ત્યારે પૂરી થાય છે જ્યારે સ્તર દસ્તાવેજીકૃત હોય, ગુપ્તની પાસે argv ન હોય તેવી ચેનલ હોય, પ્રતીક્ષાની શરત સમયમર્યાદા સાથે સ્થિતિ તપાસ હોય, અને એક પ્રક્રિયા જીવનચક્રની માલિક હોય.