باور دا دی چې څلور کرښې 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 او تاریخ څخه بهر وساتئ، حالت او یوه سرچینه وګورئ، بیا په هماغه سکریپټ کې جلا شئ.

اړوندې مقالې