Нийлүүлэгчийн VPN клиентийг эхлүүлдэг скрипт хугацаа дуустал дүүжин байна, бүртгэлд хэн ч бичээгүй баталгаажуулах код клиент асууж байгааг харуулна. Нууц үг өгөгдсөн байсан тул нууц үг буруу гэсэн дүгнэлт тодорхой мэт харагдана. Тийм биш. Кодын хүсэлт нь өөр суваг дээрх өөр яриа бөгөөд таны скрипт түүнийг хэзээ ч нээгээгүй.

Доорх таван шалгалтыг дарааллаар нь хийгээрэй. Эхний бүтэлгүйтсэн дээр зогсо, учир нь дараагийн алхам бүр өмнөх нь биелсэн гэж үздэг.

Шалгалт 1: клиент стандарт оролтыг ер нь уншиж байна уу?

Ямар ч автоматжуулалт бичихээс өмнө туршаад үз: хоолойгоор клиент руу хуурамч нууц илгээж, юу болохыг ажигла. Хэрэв өөрийн хүсэлтийг хэвлээд дараа нь хүлээж байвал хоолойг уншихгүй байна.

Олон клиент терминалын төхөөрөмжийг шууд нээдэг, эсвэл терминал бус урсгалаас нууц авахаас татгалздаг, ингэснээр төөрсөн хоолой нууц үгийг алдахаас сэргийлдэг. OpenVPN бол баримтжуулсан үл хамаарах тохиолдол, учир нь --auth-user-pass файлын зам авдаг. Нэг удаагийн код асуудаг нийлүүлэгчийн клиентүүдэд ихэвчлэн ижил сонголт байдаггүй бөгөөд тэдний хүсэлт таны скрипт өгөөгүй терминалыг хүлээж байна.

Шалгалт 2: хүүхэд процесс терминалтай юу?

pty хүүхдэд терминал хуваарилдаг бөгөөд энэ нь хүсэлтүүдийг дарааллаар хариулж болох уншигдахуйц гаралт болгоно.

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)

Дээрх хүсэлтийн мөрүүд жишээ юм; клиент тань хэвлэдэг яг текстийг том жижиг үсэг, цэг таслалын хамт хуулж ав. Аливаа хүлээлт хугацааны хязгаартай бөгөөд хаагдсан хүүхэд төлөв буцаахын оронд үл хамаарах зүйл шиддэг тул дарааллыг боож, файлын төгсгөлийг бүтэлгүйтэл гэж үз. Энэ блок юу хийдэггүйг анхаар: хүүхэд скрипттэй хамт үхдэг, учир нь pty нь салгах механизм биш, disown нь бүрхүүлийн суулгасан команд бөгөөд таны скриптийн үүсгэсэн процесст хүрч чадахгүй.

Шалгалт 3: дэмжигдсэн интерактив бус оролт байна уу?

Дэлгэц маажих нь клиентийн шинэчлэлтэд эвдэрдэг тул эхлээд баримтжуулсан сонголт хай.

Тусламжийн гаралтаас токен эсвэл нэг удаагийн кодын сонголт байгаа эсэхийг, мөн үйлчилгээ нууц үгийн талбарт хавсаргасан кодыг хүлээж авах эсэхийг шалга. Клиент итгэмжлэлийн файл уншдаг газарт хүсэлтийн оронд файлыг нь өг:

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

Процесс орлуулалт нь /dev/fd санал болгодог системд клиентэд уншигдахуйц зам өгдөг. Нууц нь клиентийн хувьд нууц хэвээр байгаа тул бүртгэл, бүрхүүлийн түүх, процессын жагсаалтаас хол байлга. Хэрэв клиент /dev/fd-г үгүйсгэх эсвэл итгэмжлэлийн замыг нэгээс олон удаа нээх юм бол хатуу эрхтэй бодит файл бичээд мөн тэр скриптэд устга.

Шалгалт 4: туннель скриптээс урт насалж чадах уу?

Анхдагчаар туннель эцэг эхтэйгээ хамт үхдэг нь эхлүүлэх скриптэд хэрэгтэй зүйлийн эсрэг юм.

disown -h нь зөвхөн клиентийг бүрхүүлийн ажил болгон эхлүүлсэн үед тус болно, учир нь энэ нь тэр бүрхүүлийн ажлын хүснэгтийг засварладаг бөгөөд таны скрипт pty-ээр үүсгэсэн процесст хүрч чадахгүй. Хяналтгүй дахин холбогдох ёстой бүх зүйлд үйлчилгээний менежер илүү сайн газар, учир нь клиентийг дахин эхлүүлж, яагаад үхсэнийг бүртгэдэг. Ямар ч тохиолдолд дахин холбогдсон бүрийн дараа шинэ код хүлээ: нэг удаагийн токен эхний амжилттай баталгаажуулалтад зарцуулагдана.

sudo дараалалд юу хийдгийг ажигла. sudo-гийн нууц үгийн хүсэлт нь VPN-ийн хүсэлт биш бөгөөд түүнд VPN-ийн нууц үгээр хариулах нь бусад талаар зөв хүлээлтийн дараалал бүтэлгүйтэх хамгийн түгээмэл арга.

Шалгалт 5: хүний код скриптэд байх ёстой юу?

Энэ бол хүмүүсийн алгасдаг шалгалт. Токен нь хүнд хамаардаг бол хуваарийн дагуу өргөгдөх ёстой туннель нь машинтай хамаарна.

Хэрэв ажил хяналтгүй дахин холбогдох ёстой бол машины гэрчилгээ эсвэл үйлчилгээний бүртгэл интерактив нэвтрэлтийг орлож чадах эсэхийг асуу. Хэн нэгний нэг удаагийн кодыг автоматжуулах нь хоёр дахь хүчин зүйлийг хадгалсан нууц болгох бөгөөд энэ нь скриптийн тав тух биш бодлогын өөрчлөлт юм. Үйлчилгээ хоёуланг нь дэмждэг бол ажил бодитоор хэрхэн явагдаж байгаад тохирох итгэмжлэлийг сонго. Хариултыг бичиж үлдээ, учир нь дараагийн хүн скрипт яагаад токен барьдаг гэж асууна.

Ажилладаг скрипт хэрхэн харагддаг вэ

Скрипт хүрсэн алхмаа хэвлэдэг, нууцыг хэзээ ч хэвлэдэггүй, бөгөөд аливаа бүтэлгүй хүлээлтэд тэгээс ялгаатай кодоор гардаг.

Санаатай эвдэж туршаад үз: буруу нууц үг, буруу бүлэг, хугацаа дууссан токен. Аливаа бүтэлгүйтэл дүүжин байхын оронд нэрлэсэн алхам дээр зогсох ёстой. Дараа нь бодит үйлчилгээний эсрэг нэг удаа ажиллуулаад туннелийг скриптийн гаднаас шалга, дотроос биш.

Холбоотой нийтлэлүүд