İstemcinin API veya CLI sunmadığı durumda VPN girişini otomatikleştirin
Betik yolunu istemcinin sunduğu şeye göre seçin: işletim sisteminin sahip olduğu profil, stdin'den gizli bilgi okuyan sağlayıcı CLI'si veya son çare olarak GUI otomasyonu.
Buna üç soru karar verir ve yalnızca üç. İstemci, yeniden başlatmadan sonra da kalan bir bağlantı girdisini işletim sisteminde oluşturuyor mu? Gizli bilgiyi kendi argüman listesinden başka bir yerden alabilen bir komut satırı sunuyor mu? Kimlik gereksinimi bir insanı tarayıcı istemine yanıt vermeye zorluyor mu? Bu sırayla yanıtlayın ve seçim artık bir zevk meselesi olmaktan çıkar, çünkü zamanlanmış bir iş ancak üç yanıtın en zayıfının izin verdiği kadar başsız olabilir.
İstemciyi üç betiklenebilir katmanla eşleştirin
Yerel bir OS profili, sağlayıcı CLI'si, yalnızca GUI olan bir istemci ve tarayıcı SSO'lu bir istemci dört farklı yaklaşım gerektirir. İlk ikisi gözetimsiz yeniden başlatmalara dayanır ve gözetimsiz yeniden başlatma işin özüdür. Diğer ikisi betikten önce bir tasarım kararı gerektirir.
| What the client exposes | What to script | What still bites |
|---|---|---|
| OS-native connection entry | rasdial, scutil --nc, nmcli | Tunnel is up before DNS and routes settle |
| Vendor CLI reading stdin | CLI wrapped by the scheduler, secret from the credential store | Prompt text changes between releases |
| GUI only | Pinned version plus a state assertion | Locale and DPI break the click targets |
Birinci yol: profilin sahibi zaten işletim sistemi
Bu en ucuz yoldur ve çoğu kişinin gözden kaçırdığı yoldur. Windows'ta rasdial "Office" bağlanır ve rasdial "Office" /disconnect bağlantıyı kapatır; rasphone -d "Office" aynı girdiyi çevirmeli bağlantı arayüzü üzerinden sürer. macOS kayıtlı hizmetleri scutil --nc list ile listeler ve birini scutil --nc start ile başlatır. Linux işi NetworkManager'a devreder.
rasdial "Office" user *
scutil --nc start "Office"
nmcli connection up id Office
nmcli -t -f GENERAL.STATE connection show OfficeBu arayüzler yalnızca işletim sisteminin sahip olduğu profilleri tanır, bu yüzden herhangi bir üçüncü taraf istemciyi süremezler. Profil yoksa bir kez oluşturun ve her çalıştırmada yeniden oluşturmak yerine betiğin onu denetlemesine izin verin. Betiği idempotent yapın: geçerli durumu okuyun, yalnızca bağlantı kesildiğinde bağlanın ve ardından işin gerçekten ihtiyaç duyduğu özel adı sınayın.
İkinci yol: sağlayıcı bir komut satırı sunuyor
Bazı istemciler sarılabilecek kadar komut satırı sunar: Cisco AnyConnect yıllardır yalnızca bağlanmaya yarayan bir yardımcı taşır ve OpenConnect AnyConnect, GlobalProtect ve Pulse protokollerini tek bir ikili dosyadan konuşur. Önemli olan gereksinim bayrak listesi değil, gizli bilginin nereden geldiğidir, çünkü argüman listesindeki bir parolayı süreçleri listeleyebilen herkes okuyabilir.
printf '%s\n' "$VPN_PASS" | openconnect --protocol=anyconnect \
--user "$VPN_USER" --passwd-on-stdin vpn.example.comFortiClient ve bazı GlobalProtect yapılarında desteklenen hiçbir CLI yoktur ve topluluk istemcisi veya sağlayıcı lisanslı bir yedek, bir satın alma kararıdır, bir geçici çözüm değildir. CI'da hizmet hesabına bir kabuğa değil, tam olarak o ikili dosyaya hak verin, böylece enjekte edilen bir argüman root komutuna dönüşemez.
Üçüncü yol: GUI otomasyonu ve neden en sonda
Resmi istemcinin arayüzü yoksa betikler düğmelere pencere iletileri veya SendKeys ile tıklar. Bu, sürüme ve dile karşı kırılgandır, yarı bağlı bir oturum bırakabilir ve iletişim kutusu yanlış dilde göründüğünde sessizce başarısız olur. Bu yolu seçerseniz istemci sürümünü sabitleyin, ardından oluşan bağlantı durumunu doğrulayın ve betiğin yanında belgelenmiş bir el ile geri dönüş planı bulundurun.
Aynı dikkat, bir istemciyi sürecini öldürerek zorla bağlantıdan koparmak için de geçerlidir. Tünel süreçten daha uzun yaşayabilir veya bir gözetleyici onu yeniden başlatabilir, bu yüzden öldür-ve-yeniden-başlat da güvenilir bir sıfırlama değildir.
Tünel ayağa kalktıktan sonra ne bozulur
Başarılı bir bağlantı yalnızca kimlik doğrulamayı kanıtlar, başka bir şeyi değil. İşin var olma nedeni olan kaynağı kendi protokolü ve kısa bir zaman aşımıyla sınayın ve hata iletisinde aşamayı adlandırın. Masaüstünüzde görünen profiller, sertifikalar ve saklanan kimlik bilgileri hizmet oturumuna görünmez olabilir, bu yüzden ona güvenmeden önce işi bir kez zamanlayıcının kendi hesabıyla çalıştırın.
Yeniden denemeleri sınırlayın. Reddedilen kimlik bilgilerini yineleyen bir döngü hesapları kilitler ve MFA istemine başsız bir iş, kayıt tasarımı olmadan yanıt veremez; tarayıcı SSO akışına karşı betikli yeniden denemeler yalnızca denemeleri yakar. Bir filo için MDM ile dağıtılan VPN yükünü veya yapılandırma profilini tercih edin; orada kimlik bilgilerinin yaşam döngüsü platforma aittir ve betikleri bu şekilde yönetilemeyen istemciler için saklayın.
Çıkış kodunu ve ilk başarısız kaynağı günlüğe yazın, betiğin çalıştığı gerçeğini değil. O tek satır, zamanlayıcı uyarısını beş dakikalık bir tanıya dönüştüren şeydir.