Bir VPN istemcisini betiklemek: paroladan önce katmanı seçin
Sağlayıcı CLI'sı, rasdial, bir uygulama amacı veya arayüz otomasyonu her biri farklı şekilde başarısız olur. Katmanı seçin, sırrı argv dışında tutun ve çıkış kodlarını değil durumu bekleyin.
Betikler VPN istemcilerini yazarın seçtiği katmanda başlatır ve bu katman nadiren işin ihtiyaç duyduğu katmandır. Sağlayıcının komut satırı, işletim sisteminin arayıcısı ve bir mobil uygulama amacı, bağlantının yaşamında farklı noktalarda döner. Sırrı da farklı ele alırlar ve bu fark, parolanın makinedeki her kullanıcı tarafından görülüp görülmeyeceğini belirler. Betiğin ilk satırını yazmadan önce katmanı seçin.
Katman 1: sağlayıcının komut satırı
Masaüstü istemcilerinin çoğu, bir profil adı ve çoğu zaman bir parola alan bir komut satırı sunar. Cisco'nun eski istemcisi kullanıcı ve parola bağımsız değişkenleriyle bir connect fiilini kabul ediyordu; macOS yerleşik hizmeti networksetup üzerinden sunar; NetworkManager nmcli'ye yanıt verir. Bu çağrılar komut bittiğinde döner, bu da tünelin kullanılabilir hale geldiği anla aynı an değildir. Dağıttığınız sürüm için sağlayıcının kendi belgelerini okuyun, çünkü bu arayüzler değişir ve bazıları tamamen kaldırılır.
nmcli connection up "Work VPN"
networksetup -connectpppoeservice "Work VPN"
Avantaj, sağlayıcının kendi profil deposunu bilmesidir, bu yüzden çağrı GUI'nin kullanacağı aynı yapılandırmayı kullanır. Dezavantaj, her sağlayıcının kendi fiillerini icat etmesi ve bir istemci için yazılan betiğin diğerine geçmemesidir. İstemci sabit ve sürüm kilitliyse bu katmanı en kısa yol olarak görün.
Katman 2: işletim sisteminin kendi hizmeti
Windows'ta arayıcı işletim sisteminin bir parçasıdır ve sağlayıcının profil deposu yerine bir telefon defteri girdisine karşı çalışır. Bu onu istemciler arasında daha taşınabilir ve bir hizmet hesabından betiklemeyi daha kolay kılar. Ayrıca bağlantının bir yerde var olup diğerinde olmayabileceği anlamına gelir, bu da yanlış listeye bakanları şaşırtır.
rasdial "Work VPN" user pass
Get-VpnConnection -Name "Work VPN" | Select-Object ConnectionStatus
Girdiyi aramak yerine oluşturmanız veya kaldırmanız gerektiğinde PowerShell yüzeyini kullanın. WMI ve cmdlet katmanları aynı nesneleri farklı adlarla sunar ve kaldırma, bağlantıyı kesmekten ayrı bir işlemdir. Yalnızca arayan bir betik, geçişten sonra eski girdiler bırakır. Temizliğin gerçekleşeceğine söz vermeden önce otomasyonunuzun hangi depoya yazdığını denetleyin.
Remove-VpnConnection -Name "Old VPN" -Force
Get-VpnConnection
macOS'ta eşdeğeri, mevcut bir hizmetin anında oluşturulmak yerine adıyla bağlandığı ağ hizmetleri listesidir.
Kimlik bilgileri her katmanda sızar, bu yüzden kanalı seçin
Komut satırında geçirdiğiniz her şey, her yerel kullanıcı için süreç tablosunda görünür ve genellikle kabuk geçmişinde de varlığını sürdürür. OpenVPN'in desteklenen alternatifi, sırrı bir dosyadan okumak ve --askpass kullanmaktır, ve dosyanın kendisi de ona duyduğunuz güvene uyan izinlere ihtiyaç duyar. Adlandırılmış bir boru, sırrı diske yazmaktan kaçınır ama onu açabilen herhangi bir sürecin oraya yazmasına izin verir. Windows'ta sırrı kimlik bilgileri yöneticisinde ya da yalnızca hizmet hesabının okuyabildiği bir dosyada saklayın ve asla bir toplu iş dosyasında literal olarak bırakmayın.
openvpn --config /etc/openvpn/work.conf --askpass /etc/openvpn/work.secret --auth-nocache --daemon
ls -l /etc/openvpn/work.secret
Aynı kural belirteçler ve tek kullanımlık kodlar için de geçerlidir: otomasyonun bunlara ihtiyacı varsa, otomasyonun komut satırı bağımsız değişkeni olmayan bir kanala ihtiyacı vardır. Mekanizmayı değiştirdiğinizde sırrı döndürün, çünkü eski değer bir yerde bir günlükte durmuştur. Çalışan ve sızdıran bir betik, çalışan bir betik değildir.
Durumu bekleyin, sonra tek bir sahibi denetleyin
Bu çağrıların her biri tünel hazır olmadan döner, bu yüzden istemcinin sunduğu durumu yoklayın veya içindeki bir hedefi zaman aşımıyla sınayın. Bağlantı çağrısından hemen sonra dosya kopyalamak veya veritabanı bağlantısı açmak bir yarıştır ve ağ arızası gibi görünen bir biçimde aralıklı olarak başarısız olur.
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
Bağlantıyı kesmenin ters yönde aynı sorunu vardır: süreç, rotalar gitmeden önce çıkabilir. İstemcinin kancalarını var oldukları yerde kullanın, örneğin OpenVPN için up ve down betikleri veya bir systemd biriminin ExecStartPost'u, çünkü bunlar gerçekten önemsediğiniz noktada çalışır. Kancalar, onları çağıranın ayrıcalıklarıyla çalışır, bu yüzden ağı yeniden başlatan bir kanca varsayım yerine açık bir kurala ihtiyaç duyar. Bağlantının ömrü boyunca tam olarak bir sahip tutun.
İki gözetici aynı profili hem başlatıp hem durdurduğunda, sonuç sağlayıcı kesintisi gibi okunan bir yeniden bağlanma döngüsüdür. Runbook, katman belgelendiğinde, sırrın argv olmayan bir kanalı olduğunda, bekleme koşulu zaman aşımlı bir durum denetimi olduğunda ve yaşam döngüsünün tek bir süreçte olduğunda sona erer.