நான்கு வரிகளைக் கொண்ட 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 மற்றும் வரலாற்றுக்கு வெளியே வையுங்கள், நிலை மற்றும் ஒரு வளத்தைச் சரிபாருங்கள், பின்னர் அதே ஸ்கிரிப்டில் துண்டியுங்கள்.

தொடர்புடைய கட்டுரைகள்