Linux ও macOS-এ AnyConnect লগইন কীভাবে স্ক্রিপ্ট করবেন
vpn বাইনারি স্ট্যান্ডার্ড ইনপুট থেকে প্রম্পটের ক্রম অনুযায়ী উত্তর পড়ে। ক্রমটি তৈরি করুন, একবার উদ্ধৃতিতে রাখুন, প্রসেস তালিকার বাইরে রাখুন এবং আগে একটি রিসোর্স পরীক্ষা করুন।
স্ক্রিপ্ট শূন্য দিয়ে শেষ হয়, টানেল দেখা যায়, আর পরের রানটি পাসওয়ার্ড চাওয়ার আগেই প্রত্যাখ্যাত হয়। অথবা একই কমান্ড টার্মিনালে কাজ করে কিন্তু নির্ধারিত কাজ থেকে ব্যর্থ হয় «ইভেন্ট পাওয়া যায়নি» ত্রুটিতে, যা কিছুই নামায় না। দুটোই নেটওয়ার্কের ত্রুটি নয়, AnyConnect ক্লায়েন্টের স্ট্যান্ডার্ড ইনপুট কথোপকথন ভুল হওয়া। লগইনকে লিখিত প্রশ্ন-উত্তর হিসেবে দেখুন, ব্যর্থতাগুলো তখন পূর্বানুমেয় ও ছোট হয়ে যায়।
কেন একই কমান্ড স্ক্রিপ্টের ভেতরে ব্যর্থ হয়
ক্লায়েন্ট তার উত্তর স্ট্যান্ডার্ড ইনপুট থেকে পড়ে, প্রতিটি প্রম্পটে এক লাইন, যে ক্রমে গেটওয়ে সেগুলো চায় সেই ক্রমে। প্রম্পটের সংখ্যা বদলায় এমন কিছু, যেমন নতুন ব্যানার, গ্রুপ নির্বাচক বা দ্বিতীয় ফ্যাক্টরের চ্যালেঞ্জ, পরের প্রতিটি উত্তরকে এক লাইন সরিয়ে দেয়। তারপর ক্লায়েন্ট পাসওয়ার্ড প্রত্যাশা করা জায়গায় ব্যবহারকারীর নাম পড়ে এবং এমন ব্যর্থতার কথা জানায় যা দুটোর কোনোটিকেই নির্দেশ করে না।
বিস্ময়চিহ্ন থাকা পাসওয়ার্ড আরও নিঃশব্দ দ্বিতীয় ব্যর্থতা যোগ করে। ডাবল কোটের ভেতরে শেল ক্লায়েন্ট কিছু দেখার অনেক আগেই তা সম্প্রসারিত করে।
পেলোডটি একক কোটে রাখুন, অক্ষরটি অক্ষত যাবে। এটাই পুরো সমাধান, আর এটি এমন এক শ্রেণির প্রতিবেদন ব্যাখ্যা করে যেখানে একই ক্রেডেনশিয়াল টাইপ করলে কাজ করে কিন্তু সংরক্ষণ করলে ব্যর্থ হয়। গেটওয়ে পরীক্ষা করার আগে শেল কী করেছে দেখুন: যে মোড়ক সঠিক বাইট দেখায় তার মধ্য দিয়ে পেলোড প্রিন্ট করুন এবং লাইন গুনুন। এসব তদন্তের বেশিরভাগ ওখানেই শেষ হয়।
ক্লায়েন্ট যে ক্রমে চায় সেই ক্রমে উত্তর লিখুন
ক্লায়েন্টটি একবার ইন্টারঅ্যাকটিভভাবে চালান এবং প্রতিটি প্রম্পট ক্রমানুসারে লিখে রাখুন। গ্রুপ নির্বাচক দেখায় কেবল তখনই যখন গেটওয়ে কয়েকটি প্রোফাইল প্রকাশ করে, আর ব্যানার প্রম্পট দেখায় কেবল তখনই যখন একটি কনফিগার করা থাকে। উত্তর ফাইলটি অবশ্যই আপনি প্রকৃতপক্ষে যে গেটওয়ের দিকে নির্দেশিত সেইটির সাথে মিলতে হবে, ডকুমেন্টেশনেরটির সাথে নয়।
তারপর ঠিক সেই ক্রমে ফাইলটি তৈরি করুন, প্রতি লাইনে একটি উত্তর। গ্রুপ সূচক হলো ক্লায়েন্ট যে নম্বর তালিকাভুক্ত করে সেটি, কোনো নথিতে প্রোফাইলের অবস্থান নয়। ব্যানার গ্রহণ করুন কেবল যদি আপনার গেটওয়ে একটি পাঠায়, এবং সেই গেটওয়ে যে অতিরিক্ত প্রশ্ন করে বলে জানা যায় তার প্রতিটির জন্য একটি লাইন যোগ করুন। ক্লায়েন্টটি নন-ইন্টারঅ্যাকটিভ ফ্ল্যাগ দিয়ে শুরু করুন যাতে টার্মিনালের অপেক্ষার বদলে ফাইলটি ব্যবহার করে।
connect vpn.lab.example
0
username
password
y
exit/opt/cisco/anyconnect/bin/vpn -s < anyconnect.txtএকই ক্রমটি পাইপের মধ্য দিয়েও আসতে পারে যখন আপনি ডিস্কে ফাইল রাখতে চান না। উদ্ধৃতির নিয়মই ঠিক করে এটি টিকে থাকবে কি না।
ক্রেডেনশিয়াল প্রসেস তালিকার বাইরে রাখুন
কমান্ড লাইনের আর্গুমেন্ট প্রসেসের পুরো জীবনকালে প্রত্যেক স্থানীয় ব্যবহারকারীর পড়ার আওতায় থাকে, তাই পাসওয়ার্ড ফাইল বা পাইপে থাকে, কখনো আর্গুমেন্ট তালিকায় নয়। ফাইলটি কেবল যে অ্যাকাউন্ট স্ক্রিপ্ট চালায় তার পড়ার যোগ্য করুন, আর কাজ শেষে মুছে ফেলুন। macOS-এ বাইনারি সাধারণত Linux-এর মতো একই পথে থাকে, তবে ধরে না নিয়ে ইনস্টল করা অবস্থান নিশ্চিত করুন। দুটি পথই যাচাই করা মোড়কটি ঘটনার প্রতিবেদনের চেয়ে ছোট।
printf 'username\npassword\ny\n' | /opt/cisco/anyconnect/bin/vpn -s connect vpn.lab.exampleস্ক্রিপ্টকে অনন্তকাল পুনরায় চেষ্টা করতে দেবেন না। বদলে যাওয়া ব্যানার বা রাতভর মেয়াদ শেষ হওয়া পাসওয়ার্ড স্থির উত্তর ফাইলকে পুনঃচেষ্টার লুপে পরিণত করে, আর সেই লুপই অ্যাকাউন্ট লক করে।
একবার ব্যর্থ হয়ে ক্লায়েন্টের নিজের ত্রুটির পাঠ প্রিন্ট করুন এবং বেরিয়ে যান। নির্ধারিত কাজেরও অন্য যেকোনো অপর্যবেক্ষিত কাজের মতো একই পরিচয় ও ক্রেডেনশিয়াল-প্রাপ্যতা পর্যালোচনা দরকার, কারণ নিঃশব্দে মেয়াদোত্তীর্ণ ক্রেডেনশিয়াল ভোর তিনটার বিভ্রাট থেকে আলাদা করা যায় না।
এক্সিট কোডে ভরসা করার আগে সেশন নিশ্চিত করুন
সংযুক্ত অবস্থা প্রমাণ করে টানেল আছে, তার বেশি কিছু নয়। স্ক্রিপ্ট আসল কাজ শুরু করার আগে এমন একটি রিসোর্স পরীক্ষা করুন যা অবশ্যই এর মধ্য দিয়ে পৌঁছানো যাবে, আর সেখানকার ব্যর্থতাকে ব্যর্থ লগইন থেকে আলাদা ত্রুটি হিসেবে ধরুন। নইলে আপনি পুরোপুরি ভালো একটি সংযোগই আবার চেষ্টা করবেন যা শুধু গন্তব্যে পৌঁছাতে পারে না।
সংযোগ বিচ্ছেদের আগে ও পরে ক্লায়েন্টের অবস্থা জিজ্ঞাসা করুন, কারণ পুরোনো সেশন পরের সংযোগ প্রত্যাখ্যান করতে পারে, অথচ আপনার স্ক্রিপ্ট সফলতা জানায়।
/opt/cisco/anyconnect/bin/vpn state
/opt/cisco/anyconnect/bin/vpn disconnectএক্সিট কোডের পাশে অবস্থার আউটপুট লিখে রাখুন, কারণ কেবল কোড প্রত্যাখ্যাত লগইন আর কখনো বন্ধ হয়নি এমন সেশন আলাদা করতে পারে না। যখন গেটওয়ে দ্বিতীয় ফ্যাক্টর বা ইন্টারঅ্যাকটিভ অনুমোদন দাবি করে, তখন সেই ধাপটি স্ক্রিপ্ট করা বন্ধ করুন এবং বদলে ক্লায়েন্টের সমর্থিত পদ্ধতি ব্যবহার করুন। স্থির উত্তর ফাইল আপনার নিয়ন্ত্রণে থাকা ক্রেডেনশিয়ালের সুবিধা, আপনার নিয়ন্ত্রণে না থাকা প্রমাণীকরণ ধাপ এড়ানোর উপায় নয়। পরিধি এত সংকীর্ণ রাখুন, এটি সংক্ষিপ্ত স্ক্রিপ্টই থাকবে।
কখন স্থির উত্তর ফাইল ভুল সরঞ্জাম
দ্বিতীয় ফ্যাক্টর বা অনুমোদনের প্রম্পট এই ধাঁচটিকে পুরোপুরি হারিয়ে দেয়, আর এটি স্ক্রিপ্টের ধাঁধা নয়, নকশার সীমা। সেই ধাপের জন্য ক্লায়েন্ট যে পদ্ধতি সমর্থন করে তা ব্যবহার করুন আগে থেকে উত্তর অনুমান করার বদলে। স্থির ফাইল কেবল এমন ক্রেডেনশিয়ালের জন্য কাজ করে যা রানগুলোর মধ্যে একই থাকে।
দুটি পুরোনো ক্রেডেনশিয়াল ধরণকেও AnyConnect ভুল করা হয়। vpnc প্রোফাইল আলাদা প্রোটোকল বলে, আর এটি IPSec শনাক্তকারী হিসেবে গ্রুপের নাম চায়, তারপর একটি শেয়ার্ড গ্রুপ গোপন তথ্য, তারপর আপনার নিজের অ্যাকাউন্টের বিবরণ।
প্রোটোকল ভিন্ন হওয়ায় vpnc এমন গেটওয়েতে পৌঁছাতে পারে না যা কেবল AnyConnect প্রোফাইল প্রকাশ করে, আর সেই সেবার চিরাচরিত উন্মুক্ত বিকল্প হলো anyconnect প্রোটোকল বেছে নেওয়া openconnect। pcf ফাইল পুরোনো Cisco ক্লায়েন্টের, আর যদিও এর হোস্ট, গ্রুপের নাম ও গ্রুপ পাসওয়ার্ড এখনো Cisco IPsec বলতে পারা ক্লায়েন্টে আবার দেওয়া যায়, ফাইলটি ক্লায়েন্টের মধ্যে বাহিত হয় না। অস্বাভাবিক পোর্ট বা অপ্রচলিত টানেলিং মোড সাধারণত ওই স্থানান্তরে হারিয়ে যায়। সরঞ্জাম বাছার আগে গেটওয়ে কোন প্রোটোকল দেয় তা নির্ধারণ করুন।