Τρεις ερωτήσεις το αποφασίζουν, και μόνο τρεις. Δημιουργεί ο πελάτης καταχώριση σύνδεσης στο λειτουργικό σύστημα που επιβιώνει από επανεκκίνηση; Παρέχει γραμμή εντολών που μπορεί να πάρει μυστικό από κάτι άλλο εκτός από τη λίστα ορισμάτων της; Αναγκάζει η απαίτηση ταυτότητας έναν άνθρωπο να απαντήσει σε προτροπή του προγράμματος περιήγησης; Απαντήστε με αυτή τη σειρά και η επιλογή παύει να είναι θέμα γούστου, γιατί μια προγραμματισμένη εργασία μπορεί να είναι τόσο χωρίς κεφαλή όσο επιτρέπει η ασθενέστερη από τις τρεις απαντήσεις.

Αντιστοιχίστε τον πελάτη στα τρία επίπεδα που δέχονται σενάριο

Ένα εγγενές προφίλ λειτουργικού συστήματος, ένα CLI προμηθευτή, ένας πελάτης μόνο με GUI και ένας πελάτης με SSO περιηγητή απαιτούν τέσσερις διαφορετικές προσεγγίσεις. Τα δύο πρώτα επιβιώνουν από επανεκκινήσεις χωρίς επίβλεψη, και οι επανεκκινήσεις χωρίς επίβλεψη είναι όλο το νόημα. Τα άλλα δύο χρειάζονται απόφαση σχεδιασμού πριν χρειαστούν σενάριο.

What the client exposesWhat to scriptWhat still bites
OS-native connection entryrasdial, scutil --nc, nmcliTunnel is up before DNS and routes settle
Vendor CLI reading stdinCLI wrapped by the scheduler, secret from the credential storePrompt text changes between releases
GUI onlyPinned version plus a state assertionLocale and DPI break the click targets

Διαδρομή πρώτη: το λειτουργικό σύστημα κατέχει ήδη το προφίλ

Αυτή είναι η φθηνότερη διαδρομή και εκείνη που οι περισσότεροι παραβλέπουν. Στα Windows το rasdial "Office" συνδέεται και το rasdial "Office" /disconnect το κλείνει· το rasphone -d "Office" οδηγεί την ίδια καταχώριση μέσω της διεπαφής κλήσης. Το macOS απαριθμεί τις αποθηκευμένες υπηρεσίες με το scutil --nc list και ξεκινά μία με το scutil --nc start. Το Linux παραδίδει τη δουλειά στο NetworkManager.

rasdial "Office" user *
scutil --nc start "Office"
nmcli connection up id Office
nmcli -t -f GENERAL.STATE connection show Office

Αυτές οι διεπαφές γνωρίζουν μόνο προφίλ που ανήκουν στο λειτουργικό σύστημα, άρα δεν μπορούν να οδηγήσουν έναν αυθαίρετο πελάτη τρίτου. Όταν λείπει το προφίλ, δημιουργήστε το μία φορά και αφήστε το σενάριο να το ελέγχει αντί να το αναδημιουργεί σε κάθε εκτέλεση. Κάντε το σενάριο αδρανές ως προς επαναλήψεις: διαβάστε την τρέχουσα κατάσταση, συνδεθείτε μόνο όταν είναι αποσυνδεδεμένο, και μετά δοκιμάστε το ιδιωτικό όνομα που χρειάζεται πραγματικά η εργασία.

Διαδρομή δεύτερη: ο προμηθευτής παρέχει γραμμή εντολών

Ορισμένοι πελάτες εκθέτουν αρκετή γραμμή εντολών ώστε να μπορούν να περιβληθούν: το Cisco AnyConnect είχε επί χρόνια βοηθό μόνο για σύνδεση, και το OpenConnect μιλά τα πρωτόκολλα AnyConnect, GlobalProtect και Pulse από ένα μόνο δυαδικό. Η απαίτηση που μετρά δεν είναι η λίστα σημαιών αλλά από πού προέρχεται το μυστικό, γιατί έναν κωδικό στη λίστα ορισμάτων μπορεί να τον διαβάσει όποιος μπορεί να απαριθμήσει διεργασίες.

printf '%s\n' "$VPN_PASS" | openconnect --protocol=anyconnect \
  --user "$VPN_USER" --passwd-on-stdin vpn.example.com

Το FortiClient και ορισμένες εκδόσεις του GlobalProtect δεν έχουν καθόλου υποστηριζόμενο CLI, και ένας πελάτης κοινότητας ή αντικαταστάτης με άδεια προμηθευτή είναι απόφαση προμήθειας, όχι παράκαμψη. Στο CI, δώστε στον λογαριασμό υπηρεσίας δικαιώματα σε αυτό ακριβώς το δυαδικό και όχι σε ένα κέλυφος, ώστε ένα έγχυτο όρισμα να μην μπορεί να γίνει εντολή root.

Διαδρομή τρίτη: αυτοματοποίηση GUI, και γιατί έρχεται τελευταία

Όταν ο επίσημος πελάτης δεν έχει διεπαφή, τα σενάρια κάνουν κλικ σε κουμπιά μέσω μηνυμάτων παραθύρου ή SendKeys. Αυτό είναι εύθραυστο ως προς την έκδοση και τη γλώσσα, μπορεί να αφήσει μισοσυνδεδεμένη συνεδρία, και αποτυγχάνει σιωπηλά όταν ένα παράθυρο διαλόγου εμφανιστεί σε λάθος γλώσσα. Αν πάρετε αυτή τη διαδρομή, καρφώστε την έκδοση του πελάτη, επιβεβαιώστε μετά την κατάσταση σύνδεσης που προκύπτει, και κρατήστε τεκμηριωμένη χειροκίνητη εφεδρεία δίπλα στο σενάριο.

Η ίδια προσοχή ισχύει για βίαιη αποσύνδεση πελάτη σκοτώνοντας τη διεργασία του. Η σήραγγα μπορεί να επιβιώσει της διεργασίας, ή ένας επόπτης να την επανεκκινήσει, άρα ούτε το σκότωσε-και-επανεκκίνησε είναι αξιόπιστο reset.

Τι σπάει αφού σηκωθεί η σήραγγα

Μια επιτυχημένη κλήση αποδεικνύει ταυτοποίηση και τίποτε άλλο. Δοκιμάστε τον πόρο για τον οποίο υπάρχει η εργασία, με το δικό του πρωτόκολλο και σύντομο χρονικό όριο, και ονομάστε το στάδιο στο μήνυμα αποτυχίας. Προφίλ, πιστοποιητικά και αποθηκευμένα διαπιστευτήρια ορατά στην επιφάνεια εργασίας σας μπορεί να είναι αόρατα στη συνεδρία υπηρεσίας, γι αυτό εκτελέστε την εργασία μία φορά κάτω από τον λογαριασμό του ίδιου του χρονοπρογραμματιστή πριν την εμπιστευτείτε.

Περιορίστε τις επαναλήψεις. Ένας βρόχος που επαναλαμβάνει απορριφθέντα διαπιστευτήρια κλειδώνει λογαριασμούς, και μια προτροπή MFA δεν μπορεί να απαντηθεί από εργασία χωρίς κεφαλή χωρίς σχεδιασμό εγγραφής· οι σεναριακές επαναλήψεις κατά ροής SSO περιηγητή απλώς καίνε προσπάθειες. Προτιμήστε ωφέλιμο φορτίο VPN που παραδίδεται μέσω MDM ή προφίλ διαμόρφωσης για στόλο, όπου η πλατφόρμα κατέχει τον κύκλο ζωής των διαπιστευτηρίων, και κρατήστε σενάρια για τους πελάτες που δεν μπορούν να διαχειριστούν έτσι.

Καταγράψτε τον κωδικό εξόδου και τον πρώτο πόρο που αποτυγχάνει, όχι το γεγονός ότι έτρεξε το σενάριο. Αυτή η μία γραμμή είναι που μετατρέπει μια ειδοποίηση χρονοπρογραμματιστή σε διάγνωση πέντε λεπτών.

Σχετικά άρθρα