AnyConnect წყდება ტერმინალის დახურვისას: სესიის შემოწმებები
Linux-ის AnyConnect კლიენტი იმახსოვრებს დაკავშირების მომენტში ღია შესვლის სესიებს და გვირაბს ხსნის, როცა ერთ-ერთი მათგანი იხურება. utmp-ის გადაწერამდე შეამოწმეთ თანმიმდევრობა.
გვირაბი აქტიურია, ხურავთ ზედმეტ ტერმინალს და VPN იშლება კლიენტში ერთი კლავიშის დაჭერის გარეშე. Linux-ის AnyConnect კლიენტში მოხსენებული მიზეზი სესიების აღრიცხვაა და არა მარშრუტიზაცია: კლიენტი აღრიცხავს, რომელი შესვლის სესიები არსებობდა გვირაბის აწევის დროს და რომელიმე მათგანის დასრულებას გვირაბის ჩამოშლის მიზეზად მიიჩნევს. ქვემოთ მოცემული შემოწმებები თანმიმდევრობით სრულდება და პირველი წარუმატებელი გეტყვით, საერთოდ ამ ქცევასთან გაქვთ საქმე თუ არა. კლიენტის ჩვეულ გამოსავალში არაფერი ახსენებს ტერმინალს, ამიტომ პირველი იმპულსი, კონცენტრატორის დადანაშაულება, ჩვეულებრივ ფუჭი შრომაა.
არ დაიწყოთ სისტემური ფაილების რედაქტირებით. ყოველი ნაბიჯი ან ხსნის წყვეტას, ან აშორებს კანდიდატს, და იაფი ნაბიჯები პირველია.
გამოყავით სესიის წყვეტა ქვედა ქსელის წყვეტისგან
ხელახლა დაუკავშირდით მაშინვე გაწყვეტის შემდეგ. გვირაბი, რომელიც წამებში ბრუნდება, იმავე ქსელში, ახალი სერთიფიკატების გარეშე, მიუთითებს ლოკალურ გამომწვევზე, როგორიც დახურული სესიაა, და არა მკვდარ აპლინკზე, Wi-Fi როუმინგზე ან კონცენტრატორზე უმოქმედობის ტაიმაუტზე. გვირაბი, რომელიც Connecting-ზე ჩერდება, ან ქსელის შეცვლამდე ვერ ირთვება, სხვა სტატიაა.
ჩაწერეთ, რა იყო ღია გვირაბის აწევისას: ტერმინალი, საიდანაც კლიენტი გაუშვით, ნებისმიერი მეორე shell, გრაფიკული შესვლა და ნებისმიერი SSH სესია სხვა მანქანიდან. ეს სია ცოტა ხანში დაგჭირდებათ, ხოლო შემდეგი წყვეტის შემდეგ მისი მეხსიერებიდან აღდგენა საიმედო არ არის.
შეამოწმეთ, რა ჩაწერა კლიენტმა დაკავშირებისას
კლიენტი არ იკვლევს პროცესების მშობლებს ან ტერმინალის საკუთრებას. ის იღებს დაკავშირების მომენტში არსებული შესვლის სესიების სიმრავლის სურათს და მოგვიანებით ადარებს ამ სიმრავლეს; როცა წევრი ქრება, შედარება ვარდება და გვირაბიც მასთან მიდის. ამიტომ იმ ფანჯრის დახურვა, საიდანაც დაუკავშირდით, შეიძლება უვნებელი იყოს, მაშინ როცა დაუკავშირებელი ზედმეტი ტერმინალის დახურვა კავშირს კლავს: მთავარია, იყო თუ არა ის სესია საწყის სიმრავლეში. შემოწმება სიმრავლეთა შედარებაა და არა დათვლა, ამიტომ სესიის შეცვლა შეიძლება ისეთივე ფატალური იყოს, როგორც ერთის დაკარგვა.
ჩამოთვალეთ, რისი ნახვა შეეძლო კლიენტს სანამ რამეს შეცვლიდით:
who
w
last -n 10
sudo ls -l /run/utmpwho-ის ყოველი სტრიქონი მომხმარებლის პროცესის ჩანაწერია utmp-ში. თუ თქვენი სესია ორჯერ ჩანს, ერთხელ გრაფიკული შესვლისთვის და ერთხელ ტერმინალისთვის, ორივე ჩანაწერი არსებობდა დაკავშირებისას და ორივე კანდიდატია.
utmp-იდან მხოლოდ საკუთარი ჩანაწერი მოხსენით
გამოქვეყნებული ხერხი სესიას, რომელსაც აპირებთ გამოიყენოთ, utmp-ში უხილავს ხდის კლიენტის გაშვებამდე. პატარა C პროგრამა გადის getutent()-ზე, პოულობს ჩანაწერს, რომლის ut_line უდრის სტანდარტული შეყვანის TTY-ს, და შემდეგ გადაწერს ამ ჩანაწერს. თანმიმდევრობა განზრახ არის: setutent(), წაიკითხეთ ჩანაწერი, დააკოპირეთ მისი ut_id, დააყენეთ ut_type DEAD_PROCESS-ზე, გაასუფთავეთ მომხმარებლისა და ხაზის ველები, ჩაწერეთ უკან pututline()-ით, შემდეგ endutent().
შეადგინეთ ის, შემდეგ გაუშვით root-ად იმ shell-იდან, რომელიც კლიენტს გაუშვებს:
sudo ./utmpremove && /opt/cisco/anyconnect/bin/vpn -s connect vpn.example.eduმარცხის ორი რეჟიმი ხსნის იმ შეტყობინებების უმეტესობას, რომ ხელსაწყო არაფერს აკეთებს. ის მოქმედებს სტანდარტულ შეყვანაზე მიბმულ TTY-ზე, ამიტომ ტერმინალის გარეშე სკრიპტიდან ან cron დავალებიდან გაშვება მას შესადარებელს არაფერს უტოვებს. და /run/utmp ჩვეულებრივი მომხმარებლებისთვის ჩასაწერი არ არის, ამიტომ root-ის გარეშე გაშვება ჩუმად ვარდება, თუ გამოსვლის სტატუსს არ შეამოწმებთ.
დაადასტურეთ, რომ გვირაბი გაუძლებს დახურვას
შეამოწმეთ მექანიზმი და ნუ ჩათვლით. დაუკავშირდით სესიიდან, რომლის შენარჩუნებასაც აპირებთ, გახსენით მეორე ტერმინალი, დახურეთ მეორე და შემდეგ vpn state-ისა და ინტერფეისების სიაზე ერთი შეხედვით დაადასტურეთ, რომ გვირაბი ჯერ კიდევ აქტიურია. თუ გვირაბი გადაურჩა, გამომწვევი კონკრეტული ტიპის სესია იყო და არა ყოველი სესია, და იპოვეთ ის სესია, რომელიც ღია უნდა დარჩეს.
თუ მაინც იშლება, დაკვირვებული სესია სხვაგან იყო, ყველაზე ხშირად გრაფიკული შესვლა, რომელმაც თქვენი ტერმინალი შექმნა, და ერთი TTY ჩანაწერის მოცილება არ დაგეხმარებათ. გაიმეორეთ დაკვირვება პირველი ნაბიჯის სრული სიით და ნუ დაამატებთ მეტ ქირურგიას.
როცა utmp-ის გადაწერა არასწორი პასუხია
utmp საერთო აღრიცხვაა და არა კერძო ცხრილი. ჯერ კიდევ ცოცხალი სესიის ჩანაწერის გადაწერა იწვევს იმას, რომ who, w და ზოგიერთი აუდიტის ხელსაწყო მას ნაკლებად აჩვენებს, ხოლო პროგრამა, რომელიც მოგვიანებით იმავე ჩანაწერს დახურავს, შეიძლება სრულად ჩავარდეს. შეზღუდეთ ხელსაწყო თქვენს სესიაზე, შეინახეთ ორიგინალი ფაილის ასლი და ნუ გადააქცევთ მას ჩატვირთვის სერვისად, რომელიც ყოველ ჩანაწერს შლის.
თუ თქვენი ორგანიზაცია სესიების აღრიცხვას აგროვებს შესაბამისობისთვის, ეს ხერხი ეწინააღმდეგება იმ მოთხოვნას და მხარდაჭერილი პასუხი კლიენტის სხვა ვერსია ან წვდომის სხვა მეთოდია და არა განახლებული utmp. ადამიანების უმეტესობისთვის ყველაზე ნაკლებად შემაწუხებელი შესწორებაა კლიენტის გაშვება სესიიდან, რომელიც მთელი დღე ღია დარჩება, და იმ ფანჯრის მარტო დატოვება.
სანამ ბილეთს დახურავთ, ჩაწერეთ, რომელ სესიას აკვირდებოდა კლიენტი გვირაბის აწევისას. სწორედ ეს ერთი სტრიქონი აქცევს იდუმალ გაწყვეტას გამეორებად პირობად მანქანასთან მომდევნო ადამიანისთვის.