სკრიპტი ნულით სრულდება, გვირაბი ჩნდება და შემდეგი გაშვება უარყოფილია მანამ, სანამ ის საერთოდ პაროლს მოითხოვს. ან იგივე ბრძანება ტერმინალში მუშაობს და დაგეგმილი დავალებიდან მარცხდება შეცდომით «მოვლენა ვერ მოიძებნა», რომელიც არაფერ სასარგებლოს არ ასახელებს. ორივე ქსელის ხარვეზი არ არის, არამედ 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 პროფილებს აქვეყნებს, და ამ სერვისის ჩვეულებრივი ღია ალტერნატივაა openconnect შერჩეული anyconnect პროტოკოლით. pcf ფაილი ძველ Cisco კლიენტს ეკუთვნის და თუმცა მისი ჰოსტი, ჯგუფის სახელი და ჯგუფის პაროლი ხელახლა შეიძლება შევიდეს კლიენტში, რომელიც ჯერ კიდევ Cisco IPsec-ზე საუბრობს, ფაილი კლიენტებს შორის არ გადადის. უჩვეულო პორტი ან არასტანდარტული გვირაბიზაციის რეჟიმი ჩვეულებრივ იკარგება ამ გადატანისას. გადაწყვიტეთ, რომელ პროტოკოლს გვთავაზობს კარიბჭე, სანამ იარაღს აირჩევთ.

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