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

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

მოთხოვნა stdin-იდან არ მოდის

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

შეამოწმეთ გარემო ნებისმიერი კოდის დაწერამდე: გაუშვით კლიენტი იმავე მომხმარებლით, იმავე stdin-ით, როგორც ამას დამგეგმავი ან სერვისის მენეჯერი გააკეთებს. თუ მოთხოვნა არასოდეს ჩნდება ჟურნალში და პროცესი წინ არ მიდის, რაღაც არარსებულ ტერმინალს ელოდება.

პირველი გზა: ორხაზიანი საიდენტიფიკაციო ფაილი

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

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

მეორე გზა: askpass გასაღების პაროლური ფრაზისთვის

პაროლური ფრაზით დაცული პირადი გასაღები მეორე, განსხვავებულ მოთხოვნას ბადებს, და მას თავისი ფაილზე დაფუძნებული პასუხი აქვს: askpass ოფცია ფრაზას ფაილის პირველი ხაზიდან კითხულობს. SSH-ზე დაფუძნებული გვირაბებისთვის ეკვივალენტია askpass პროგრამა, რომელსაც კლიენტი ასრულებს და რომლის სტანდარტული გამომავალი საიდუმლო ხდება.

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

მესამე გზა: პორტალის კლიენტის საკუთარი CLI

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

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

როცა ნაკადს ფსევდოტერმინალი სჭირდება

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

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

საიდუმლოები, რომლებიც ჟონავს, და სად იმალებიან

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

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

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