VPN კლიენტის სკრიპტირება: აირჩიეთ ფენა პაროლამდე
მომწოდებლის CLI, rasdial, აპის განზრახვა ან UI ავტომატიზაცია თითოეული განსხვავებულად ვარდება. აირჩიეთ ფენა, შეინახეთ საიდუმლო argv-ს გარეთ და დაელოდეთ მდგომარეობას, არა გამოსვლის კოდებს.
სკრიპტები VPN კლიენტებს რთავს იმ ფენაზე, რომელიც ავტორმა აირჩია, და ეს ფენა იშვიათად არის ის, რაც სამუშაოს სჭირდებოდა. მომწოდებლის ბრძანების სტრიქონი, ოპერაციული სისტემის ამომრჩევი და მობილური აპის განზრახვა ყველა კავშირის ცხოვრების სხვადასხვა მომენტში ბრუნდება. ისინი საიდუმლოსაც განსხვავებულად ამუშავებენ, და ეს განსხვავება წყვეტს, იქნება თუ არა პაროლი ხილული მანქანის ყველა მომხმარებლისთვის. აირჩიეთ ფენა სკრიპტის პირველი სტრიქონის დაწერამდე.
ფენა 1: მომწოდებლის ბრძანების სტრიქონი
უმეტესი დესკტოპ კლიენტი გთავაზობთ ბრძანების სტრიქონს, რომელიც იღებს პროფილის სახელს და, ძალიან ხშირად, პაროლს. Cisco-ს ძველი კლიენტი იღებდა connect ზმნას მომხმარებლისა და პაროლის არგუმენტებით; macOS ჩაშენებულ სერვისს networksetup-ის მეშვეობით ამჟღავნებს; NetworkManager პასუხობს nmcli-ს. ეს გამოძახებები ბრუნდება, როცა ბრძანება სრულდება, რაც არ არის იგივე მომენტი, როცა გვირაბი გამოსაყენებელი ხდება. წაიკითხეთ მომწოდებლის საკუთარი დოკუმენტაცია თქვენი განლაგებული ვერსიისთვის, რადგან ეს ინტერფეისები იცვლება და ზოგი მთლიანად ამოღებულია.
nmcli connection up "Work VPN"
networksetup -connectpppoeservice "Work VPN"
უპირატესობა ის არის, რომ მომწოდებელმა იცის საკუთარი პროფილების საცავი, ამიტომ გამოძახება იყენებს იმავე კონფიგურაციას, რომელსაც GUI გამოიყენებდა. ნაკლი ის არის, რომ ყოველი მომწოდებელი თავის ზმნებს იგონებს, და ერთი კლიენტისთვის დაწერილი სკრიპტი მეორეზე არ გადადის. განიხილეთ ეს ფენა როგორც უმოკლესი გზა, როცა კლიენტი ფიქსირებულია და ვერსია მიმაგრებული.
ფენა 2: ოპერაციული სისტემის საკუთარი სერვისი
Windows-ზე ამომრჩევი ოპერაციული სისტემის ნაწილია და მუშაობს ტელეფონის წიგნის ჩანაწერზე მომწოდებლის პროფილების საცავის ნაცვლად. ეს მას უფრო გადასატანს ხდის კლიენტებს შორის და უფრო იოლს სერვისის ანგარიშიდან სკრიპტირებისთვის. ეს ასევე ნიშნავს, რომ კავშირი შეიძლება არსებობდეს ერთ ადგილას და არა მეორეში, რაც აბნევს არასწორ სიაში მაყურებელ ადამიანებს.
rasdial "Work VPN" user pass
Get-VpnConnection -Name "Work VPN" | Select-Object ConnectionStatus
გამოიყენეთ PowerShell-ის ზედაპირი, როცა ჩანაწერი უნდა შექმნათ ან წაშალოთ და არა ამოირჩიოთ. WMI და cmdlet ფენები ერთსა და იმავე ობიექტებს სხვადასხვა სახელით ამჟღავნებენ, და წაშლა გათიშვისგან ცალკე ოპერაციაა. სკრიპტი, რომელიც მხოლოდ ირჩევს, მიგრაციის შემდეგ მოძველებულ ჩანაწერებს დატოვებს. შეამოწმეთ, რომელ საცავში წერს თქვენი ავტომატიზაცია, სანამ დაჰპირდებით, რომ წმენდა მოხდება.
Remove-VpnConnection -Name "Old VPN" -Force
Get-VpnConnection
macOS-ზე ეკვივალენტია ქსელური სერვისების სია, სადაც არსებული სერვისი სახელით უერთდება და არა ადგილზე იქმნება.
ანგარიშის მონაცემები ყოველ ფენაზე ჟონავს, ამიტომ აირჩიეთ არხი
ყველაფერი, რასაც ბრძანების სტრიქონზე გადასცემთ, ჩნდება პროცესების ცხრილში ყოველი ლოკალური მომხმარებლისთვის და ჩვეულებრივ გადარჩება shell-ის ისტორიაშიც. OpenVPN-ის მხარდაჭერილი ალტერნატივაა საიდუმლოს ფაილიდან წაკითხვა --askpass-ით, და თავად ფაილს სჭირდება ნებართვები, რომლებიც შეესაბამება მასზე დადებულ ნდობას. სახელდებული მილი თავიდან იცილებს საიდუმლოს დისკზე ჩაწერას, მაგრამ საშუალებას აძლევს ნებისმიერ პროცესს, რომელსაც შეუძლია მისი გახსნა, იქ დაწეროს. Windows-ზე შეინახეთ საიდუმლო ანგარიშის მონაცემების მენეჯერში ან ფაილში, რომლის წაკითხვაც მხოლოდ სერვისის ანგარიშს შეუძლია, და არასდროს როგორც ლიტერალი batch ფაილში.
openvpn --config /etc/openvpn/work.conf --askpass /etc/openvpn/work.secret --auth-nocache --daemon
ls -l /etc/openvpn/work.secret
იგივე წესი ეხება ტოკენებსა და ერთჯერად კოდებს: თუ ავტომატიზაციას ისინი სჭირდება, ავტომატიზაციას სჭირდება არხი, რომელიც ბრძანების სტრიქონის არგუმენტი არ არის. დაატრიალეთ საიდუმლო, როცა მექანიზმს ცვლით, რადგან ძველი მნიშვნელობა სადღაც ჟურნალში იწვა. სკრიპტი, რომელიც მუშაობს და ჟონავს, მომუშავე სკრიპტი არ არის.
დაელოდეთ მდგომარეობას, შემდეგ ზედამხედველობა გაუწიეთ ერთ მფლობელს
თითოეული ეს გამოძახება ბრუნდება მანამ, სანამ გვირაბი მზად იქნება, ამიტომ ჰკითხეთ კლიენტის მიერ გამჟღავნებულ მდგომარეობას ან სცადეთ დანიშნულება მის შიგნით დროის ლიმიტით. ფაილების კოპირება ან მონაცემთა ბაზის კავშირის გახსნა დაკავშირების გამოძახებისთანავე რბოლაა, და ის პერიოდულად ისე ვარდება, რომ ქსელის ხარვეზს ჰგავს.
ip link show tun0
nmcli -t -f GENERAL.STATE connection show "Work VPN"
curl -sS --max-time 5 https://app.internal.example/health -o /dev/null
გათიშვას იგივე პრობლემა აქვს საპირისპიროდ: პროცესი შეიძლება გავიდეს მანამ, სანამ მარშრუტები გაქრება. გამოიყენეთ კლიენტის კაუჭები, სადაც ისინი არსებობს, მაგალითად OpenVPN-ის up და down სკრიპტები ან systemd ერთეულის ExecStartPost, რადგან ისინი სწორედ იმ წერტილში სრულდება, რომელიც ნამდვილად გაღელვებთ. კაუჭები სრულდება იმის უფლებებით, რაც მათ გამოიძახა, ამიტომ ქსელის ხელახლა გამშვებ კაუჭს სჭირდება ცხადი წესი და არა ვარაუდი. შეინარჩუნეთ ზუსტად ერთი მფლობელი კავშირის მთელი სიცოცხლის განმავლობაში.
როცა ორი ზედამხედველი ერთსა და იმავე პროფილს იწყებს და აჩერებს, შედეგია ხელახალი დაკავშირების მარყუჟი, რომელიც მომწოდებლის შეფერხებად იკითხება. Runbook მთავრდება, როცა ფენა დოკუმენტირებულია, საიდუმლოს აქვს არხი, რომელიც argv არ არის, ლოდინის პირობა არის მდგომარეობის შემოწმება დროის ლიმიტით, და სასიცოცხლო ციკლს ერთი პროცესი ფლობს.