Cisco AnyConnect-თან მომავალი vpn კლიენტი საუბრივე იქცევა: ბეჭდავს მოთხოვნას, ელოდება სტრიქონს და შემდეგ ბეჭდავს შემდეგს. მიაწოდე ეს საუბარი ფაილიდან ან მილიდან და იგივე ბინარული ფაილი ზედამხედველობის გარეშე მუშაობს. ტექნიკა ერთი გადამისამართება და პასუხების დალაგებული სიაა, და სწორედ სია, და არა გადამისამართება, წყვეტს სკრიპტი საიმედოა თუ არა.

პრაქტიკაში ორი რამ ამტვრევს ამას. მოთხოვნების რიგი იცვლება, როცა კარიბჭე რამე დამატებითს იკითხავს, ხოლო შენახული პაროლი ერთ ბეჭდვით შეცდომას ანგარიშის ბლოკირებად აქცევს. მიმდევრობას ვერსირებულ მონაცემებად მოეპყარი, რომელთა შედარებაც კარიბჭის ყოველი ცვლილების შემდეგ შეგიძლია. ხმამაღლა ჩავარდი განმეორების ნაცვლად, რადგან ციკლი ზუსტად ის გზაა, რომლითაც არასწორად აკრეფილი პაროლი ჩაკეტილ ანგარიშად იქცევა.

ერთი მიმდევრობა, იმ რიგით, რომლითაც კლიენტი იკითხავს

გაუშვი კლიენტი ერთხელ ინტერაქტიულად და ჩაწერე ყველა მოთხოვნა იმ რიგით, რომლითაც ჩნდება. ეს ჩანაწერი პასუხების ფაილად იქცევა. როცა ფაილს ბინარულში გადაამისამართებ, პირველი სტრიქონი თავად დაკავშირების ბრძანება უნდა იყოს, ამიტომ მიმდევრობა მასპინძლის სახელით იწყება და არა მომხმარებლის სახელით.

connect vpn.example.com
0
<username>
<password>
y
exit

შიშველი 0 პირველ კავშირის პროფილს ირჩევს, როცა კარიბჭე სიას გვთავაზობს; გამოიყენე ის ინდექსი, რომელსაც შენი კარიბჭე ბეჭდავს. y შესვლის ბანერს იღებს, ამიტომ წაშალე ეს სტრიქონი, თუ ბანერი არ არის, და ჩასვი ერთი იქ, სადაც შენი კარიბჭე დამატებით კითხვას სვამს. ბოლოში exit არის ის, რაც კლიენტს საშუალებას აძლევს სუფთად დაასრულოს, როცა ბოლო პასუხი ამოიწურა.

/opt/cisco/anyconnect/bin/vpn -s < anyconnect.txt

არაინტერაქტიული რეჟიმი აქ არ არის სურვილისამებრი. -s-ის გარეშე კლიენტმა შეიძლება ტერმინალი დაიკავოს და გადამისამართებული შეყვანა უგულებელყოს; მასთან ერთად პასუხები ნაკადიდან იკითხება და პროცესი ბრუნდება. სადაც ბინარულს გაზრდილი უფლებები სჭირდება, გაახვიე გამოძახება sudo -n-ში, რომ სკრიპტი მაშინვე ჩავარდეს და არ დაიბლოკოს პაროლის მოთხოვნაზე.

სად ჟონავს პასუხების ფაილი

პაროლის შემცველი ფაილი სამოწმო მონაცემია, ამიტომ მიეცი მისი უფლებები: რეჟიმი 600, სამუშაოს შემსრულებელი ანგარიშის საკუთრებაში და არასოდეს საერთო ან სინქრონიზებულ დირექტორიაში. შექმენი უკვე გამოყენებული რეჟიმით და არა მოგვიანებით გასწორებით, რადგან ფაილი წერასა და chmod-ს შორის ხანმოკლედ ყველასთვის წაკითხვადია.

install -m 600 /dev/null ~/.config/anyconnect.txt
chmod 700 ~/.config

მეორე ნახევარი argv-ია. არგუმენტად გადაცემული პაროლი ხილულია ყველა ლოკალური მომხმარებლისთვის, ვინც პროცესებს ჩამოთვლის, და ის shell-ის ისტორიაშიც ხვდება. წაიკითხე ის ფაილის დესკრიპტორიდან ან გარემოს ცვლადიდან და ჩასვი დატვირთვა ბრჭყალებში, რომ shell-მა შიგნით ვერაფერი გააფართოოს.

printf '%s\n' 'connect vpn.example.com' '0' "$VPN_USER" "$VPN_PASS" 'y' 'exit' \
  | sudo -n /opt/cisco/anyconnect/bin/vpn -s

ყურადღება მიაქციე ბრჭყალებს. ორმაგ ბრჭყალებში !-ის შემცველი პაროლი ინტერაქტიულმა shell-მა შეიძლება გააფართოოს მანამ, სანამ კლიენტი დაინახავს, და მარცხი მოდის როგორც ზოგადი event-not-found შეცდომა, რომელიც პროტოკოლის პრობლემას ჰგავს.

დაამტკიცე გვირაბი, შემდეგ დახურე

დაკავშირებული მდგომარეობა მხოლოდ იმას ამტკიცებს, რომ კლიენტს სჯერა სესიის ქონა. შეარჩიე მასპინძელი, რომელიც მხოლოდ კორპორატიული ქსელის შიგნიდან პასუხობს, და სხვა რამის კეთებამდე ერთხელ გამოსცადე. იქ მარცხი მარშრუტიზაციის ან პოლიტიკის ხარვეზია, და შესვლის ხელახლა გაშვება ამას არ შეცვლის.

/opt/cisco/anyconnect/bin/vpn state
curl -sS -o /dev/null -w '%{http_code}\n' --max-time 10 https://<internal-host>/
/opt/cisco/anyconnect/bin/vpn disconnect

შეამოწმე მდგომარეობის გამოტანა გათიშვამდე და მის შემდეგ. ძველი სესიით დატოვებულმა კლიენტმა შეიძლება უარი თქვას შემდეგ კავშირზე, მაშინ როცა სკრიპტი ჯერ კიდევ წარმატებას აცხადებს, და მარცხის ეს რეჟიმი უხილავია, თუ მხოლოდ გასვლის კოდებს უყურებ. შეადარე ორივე წაკითხვა და ნუ დაეყრდნობი მხოლოდ მეორეს. shell-ის პროფილში ალიასები საკმარისია ყოველდღიური გამოყენებისთვის, ხოლო ყველაფერი დაგეგმილი იმავე სამოწმო და იდენტობის გადახედვას იმსახურებს, როგორც ნებისმიერი სხვა ზედამხედველობის გარეშე სამუშაო.

როცა ფიქსირებული სია წყვეტს უსაფრთხოებას

პასუხების ფაილი დღევანდელ მოთხოვნების რიგს კოდირებს. შეცვლილი ბანერი, იძულებითი პაროლის ცვლილება ან მეორე ფაქტორის გამოწვევა მას ციკლად აქცევს, რომელმაც შეიძლება ანგარიში ჩაკეტოს, ამიტომ სკრიპტმა პირველ მოულოდნელ პასუხზე უნდა გავიდეს და არა გადატვირთოს.

დაიჭირე, რაც კლიენტმა დაბეჭდა, დააბრუნე არანულოვანი სტატუსი და გადაწყვეტილება გამომძახებელს დაუტოვე. სადაც კარიბჭე მეორე ფაქტორს მოითხოვს, გულწრფელი პასუხია, რომ ამ პროფილისთვის ზედამხედველობის გარეშე შესვლა მიუწვდომელია, და არა ის, რომ მიმდევრობას კიდევ ერთი სტრიქონი სჭირდება.

როტაცია იმავე გადახედვას ეკუთვნის. თუ სამოწმო მონაცემი ინახება, გადაწყვიტე ვის შეუძლია მისი წაკითხვა, როდის იცვლება და რა შლის მას მასპინძლის აღდგენისას. სკრიპტი, რომელიც ერთი წელი მუშაობს, რადგან პაროლს არავინ შეხებია, დიზაინი არ არის, არამედ შემთხვევა, რომელიც როტაციის პოლიტიკას ელოდება.

პროფილები, რომლებიც AnyConnect არ არის

Cisco-ს ორი ძველი სამოწმო სტილი ამ ერთთან აირევა. vpnc პროფილი IPSec ID-ს ითხოვს, რაც სინამდვილეში ჯგუფის სახელია, შემდეგ ჯგუფის საიდუმლოს, შემდეგ შენს საკუთარ მონაცემებს, და სამივე კარიბჭის ოპერატორისგან მოდის. ძველი Cisco IPsec AnyConnect-ისგან განსხვავებული პროტოკოლია, ამიტომ vpnc მხოლოდ-AnyConnect სერვისს ვერ მიაღწევს; openconnect --protocol=anyconnect ამ სამუშაოს ღია კლიენტია.

.pcf ფაილი ძველი კლიენტის პროფილს აღწერს. მასში არსებული მასპინძელი, ჯგუფის სახელი და ჯგუფის პაროლი ხელით ხელახლა შეიძლება შევიდეს Cisco IPsec-ის მოლაპარაკე კლიენტში, თუმცა ფაილი უნივერსალური იმპორტი არ არის და ნებისმიერი არასტანდარტული პორტი ან გვირაბის რეჟიმი ჩვეულებრივ გადატანისას ქრება.

დაიწყე იმით, რასაც კარიბჭე რეალურად გვთავაზობს, შემდეგ შეარჩიე კლიენტი, რომელიც ამ პროტოკოლზე ლაპარაკობს. პროფილის სხვა საიტიდან კოპირება ის გზაა, რომლითაც ადამიანები იწყებენ იმ სამოწმო მონაცემების გამართვას, რომლებიც არასოდეს ყოფილა პრობლემა.

დაკავშირებული სტატიები