Vendor VPN müştərisini işə salan skript vaxt bitənə qədər asılır və jurnal müştərinin heç kimin yazmadığı təsdiq kodu istədiyini göstərir. Parol verilmişdi, ona görə də aşkar nəticə parolun səhv olduğudur. Belə deyil. Kod sorğusu ayrı kanalda ayrı söhbətdir və skriptiniz onu heç vaxt açmayıb.

Aşağıdakı beş yoxlamanı sıra ilə keçin. Uğursuz olan ilk yoxlamada dayanın, çünki hər sonrakı addım əvvəlkilerin doğru olduğunu fərz edir.

Yoxlama 1: müştəri ümumiyyətlə standart girişi oxuyurmu?

Hər hansı avtomatlaşdırma yazmazdan əvvəl sınayın: müştəriyə boru ilə saxta sirr ötürün və nə baş verdiyinə baxın. Sorğusunu çap edib sonra gözləyirsə, borunu oxumur.

Bir çox müştəri terminal qurğusunu birbaşa açır və ya qeyri-terminal axınından sirr götürməkdən imtina edir ki, təsadüfi boru parolu sızdırmasın. OpenVPN sənədləşdirilmiş istisnadır, çünki --auth-user-pass fayl yolu qəbul edir. Birdəfəlik kod istəyən vendor müştərilərində adətən ekvivalent bayraq olmur və onların sorğusu skriptinizin heç vaxt təqdim etmədiyi terminalı gözləyir.

Yoxlama 2: uşaq prosesin terminalı varmı?

pty uşaq prosesə terminal ayırır və sorğuları sıra ilə cavablandıra biləcəyiniz oxunaqlı çıxışa çevirir.

import pexpect

child = pexpect.spawn("openconnect vpn.example.net", encoding="utf-8", timeout=30)
child.expect("GROUP:")
child.sendline("staff")
child.expect("USERNAME:")
child.sendline("alice")
child.expect("PASSWORD:")
child.sendline(PASSWORD)
child.expect("Connected as", timeout=60)

Yuxarıdakı sorğu sətirləri nümunədir; müştərinizin çap etdiyi dəqiq mətni hərf registrinə və durğu işarələrinə qədər kopyalayın. Hər gözləmənin vaxt limiti var və bağlanmış uşaq proses status qaytarmaq əvəzinə istisna atır, ona görə ardıcıllığı sarın və fayl sonunu uğursuzluq sayın. Bu blokun nə etmədiyinə diqqət yetirin: uşaq proses skriptlə birlikdə ölür, çünki pty ayırma mexanizmi deyil və disown qabıq daxili əmridir, skriptinizin yaratdığı prosesə çata bilməz.

Yoxlama 3: dəstəklənən qeyri-interaktiv giriş varmı?

Ekran qırpma müştəri yeniləmələrində pozulur, ona görə əvvəlcə sənədləşdirilmiş bayraq axtarın.

Kömək çıxışında token və ya birdəfəlik kod seçimi olub-olmadığını və xidmətin parol sahəsinə əlavə edilmiş kodu qəbul edib-etmədiyini yoxlayın. Müştəri etimad faylı oxuyursa, sorğu yerinə faylı verin:

openvpn --config office.ovpn --auth-user-pass <(printf "%s\n%s\n" "$USER_NAME" "$PASSWORD")

Proses əvəzləməsi /dev/fd təqdim edən sistemlərdə müştəriyə oxunaqlı yol verir. Sirr müştərinin nöqteyi-nəzərindən yenə də sirdir, ona görə onu jurnallardan, qabıq tarixindən və proses siyahılarından uzaq saxlayın. Müştəri /dev/fd-ni rədd edirsə və ya etimad yolunu birdən çox dəfə açırsa, məhdud icazələrlə real fayl yazın və onu həmin skriptdə silin.

Yoxlama 4: tunel skriptdən uzun yaşayacaqmı?

Susmaya görə tunel valideyni ilə birlikdə ölür, bu isə ilkin qurulum skriptinin ehtiyacının əksidir.

disown -h yalnız müştəri qabıq işi kimi işə saldıqda kömək edir, çünki o qabığın iş cədvəlini dəyişir və skriptinizin pty vasitəsilə yaratdığı prosesə çata bilmir. Nəzarətsiz yenidən qoşulmalı olan hər şey üçün xidmət meneceri daha yaxşı yerdir, çünki müştərini yenidən başladır və niyə öldüyünü qeyd edir. Hər halda hər yenidən qoşulmadan sonra yeni kod gözləyin: birdəfəlik token ilk uğurlu autentifikasiyada tükənir.

sudo-nun ardıcıllığa nə etdiyinə baxın. sudo parol sorğusu VPN-in sorğusu deyil və ona VPN parolu ilə cavab vermək, əks halda düzgün olan gözləmə sırasının uğursuz olmasının ən çox yayılmış yoludur.

Yoxlama 5: bir insanın kodu skriptdə olmalıdırmı?

Bu, insanların atladığı yoxlamadır. Token bir insana aiddir, cədvəl üzrə qalxmalı olan tunel isə maşına.

Əgər iş nəzarətsiz yenidən qoşulmalıdırsa, maşın sertifikatının və ya xidmət hesabının interaktiv girişi əvəz edib-edə bilməyəcəyini soruşun. Kiminsə birdəfəlik kodunu avtomatlaşdırmaq ikinci faktoru saxlanılan sirrə çevirir ki, bu da skript rahatlığı deyil, siyasət dəyişikliyidir. Xidmət hər ikisini dəstəkləyirsə, işin həqiqətən necə işlədiyinə uyğun etimadı seçin. Cavabı yazın, çünki növbəti şəxs skriptin niyə token saxladığını soruşacaq.

İşləyən skript necə görünür

Skript çatdığı addımı çap edir, sirri heç vaxt çap etmir və hər uğursuz gözləmədə sıfırdan fərqli çıxış edir.

Onu qəsdən pozaraq sınayın: səhv parol, səhv qrup, vaxtı keçmiş token. Hər uğursuzluq asılmaq əvəzinə adlı addımda dayanmalıdır. Sonra onu real xidmətə qarşı bir dəfə işə salın və tuneli skriptin içindən deyil, xaricindən yoxlayın.

Əlaqəli məqalələr