کلاینت VPN برای پیکربندی دوبارهٔ شبکه به کمک دارای امتیاز نیاز دارد، و این واقعیت بیش از حد به همه‌چیز پیرامونش تعمیم داده می‌شود. اسکریپتی که یک اشتراک فایل را سوار می‌کند به root نیاز ندارد، چون اشتراک به نشست کاربر واردشده و به اعتبارنامه‌های همان کاربر تعلق دارد. بیرون آوردن سوار کردن از مسیر دارای امتیاز، نیاز به قواعد sudo، قلاب‌های root و تغییر برنامه‌های همراه را از میان برمی‌دارد. آنچه می‌ماند یک اپلت کوچک است که باز می‌ماند، یک نمایه را پایش می‌کند و یک تلاش انجام می‌دهد.

چرا این به نشست کاربر تعلق دارد

جلد سوارشده ویژگی نشستی است که آن را سوار کرده است. نشست کاربر دیگر آن را نمی‌بیند، و سواری که مالکش root است متفاوت از سواری رفتار می‌کند که Finder ساخته است. نگه داشتن سواری در نشست کاربر همان معناشناسی را حفظ می‌کند.

کمک‌کننده‌های دارای امتیاز برای بخش‌هایی وجود دارند که واقعاً به آن‌ها نیاز دارند: ساختن رابط تونل، تغییر مسیرها، به‌روزرسانی حل‌کننده. سوار کردن اشتراک SMB یکی از آن بخش‌ها نیست. برخورد با آن چنان‌که گویی هست، انتخاب میان sudo بدون گذرواژه و اسکریپت root را که وقتی کسی نیست اجرا می‌شود اجباری می‌کند. هر دو خطری بزرگ‌تر از آن‌اند که مشکل توجیه کند، و رویکرد نشست کاربر این انتخاب را کاملاً دور می‌زند.

قلاب‌های اتصال خود Tunnelblick اینجا جایگزین نیستند، چون بیرون از نشست رومیزی اجرا می‌شوند و ترتیبشان نسبت به اسکریپت‌های کلاینت تعریف نشده است. پرسیدن وضعیت از اپلت کاربر سازوکاری کوچک‌تر با فرض‌های کمتر است.

نخست دستی ثابت کنید اشتراک کار می‌کند

خودکارسازی نمی‌تواند مسیر، اجازه یا حسابی را که وجود ندارد فراهم کند. پیش از نوشتن هر اسکریپتی، دستی به VPN وصل شوید و اشتراک را در Finder باز کنید. اگر این شکست بخورد، اسکریپت به شکلی گیج‌کننده‌تر شکست می‌خورد.

سه مقداری را که اسکریپت به کار می‌برد ثبت کنید: نام نمایه دقیقاً همان‌گونه که Tunnelblick فهرست می‌کند، نشانی URL اشتراک و نام جلدی که Finder پس از سوار کردن نشان می‌دهد. نام جلد مهم است چون بررسی سواری موجود از آن استفاده می‌کند، و بررسی تنها بر پایهٔ نام یک محافظ آسودگی است نه اثبات هویت کارساز. نامی یکتا روی دستگاه به کار ببرید. سپس تأیید کنید که کارساز اصلاً پاسخ می‌دهد.

smbutil view //files.corp.example
osascript -e 'tell application "Tunnelblick" to get state of first configuration whose name is "Office"'
mount | grep -i smbfs

فرمان نخست ثابت می‌کند کارساز پاسخ می‌دهد، دومی ثابت می‌کند نام نمایه حل می‌شود، و سومی نشان می‌دهد سواری موفق چگونه است. پیش از خودکارسازی هر چیز، هر سه را ثبت کنید.

وضعیت نمایه را از Tunnelblick بخوانید

Tunnelblick پیکربندی‌ها و وضعیت‌هایشان را از طریق AppleScript آشکار می‌کند، و این تنها قلابی است که این طرح نیاز دارد. وضعیت مهم رشته‌ای است که برای همان یک نمایه گزارش می‌شود، نه حضور برنامه.

پرسیدن پیامدهایی دارد که ارزش گفتن دارند. اتصال دوبارهٔ کوتاه‌تر از فاصله ممکن است بی‌دیده بگذرد، و اپلت آن گذار را به‌کلی نمی‌بیند. این برای نگهبان سواری پذیرفتنی و برای هر چیز که باید به هر رویداد واکنش دهد ناپذیرفتنی است. اگر به وفاداری رویدادها نیاز دارید، این سازوکار نادرست است نه سازوکاری که به زمان‌سنج کوتاه‌تر نیاز دارد. فاصله را با در نظر گرفتن این بده‌وبستان برگزینید.

property attempted : false

on idle
    set profileName to "Office"
    set shareURL to "smb://files.corp.example/OfficeTeam"
    set volName to "OfficeTeam"
    tell application "Tunnelblick" to set vpnState to state of first configuration whose name is profileName
    if vpnState is not "CONNECTED" then
        set attempted to false
        return 20
    end if
    tell application "Finder" to set mounted to (exists disk volName)
    if (not mounted) and (not attempted) then
        set attempted to true
        try
            mount volume shareURL
        end try
    end if
    return 20
end idle

آن را با گزینهٔ باز ماندن به‌عنوان برنامه صادر کنید، سپس آن را در نشست واردشده و نه از طریق sudo اجرا کنید.

یک بار سوار کنید، سپس از تلاش دست بردارید

پرچم تلاش همان چیزی است که نمی‌گذارد این به حلقه‌ای برای حدس اعتبارنامه‌ها تبدیل شود. پس از اینکه اپلت تلاش کرد، منتظر می‌ماند وضعیت اتصال تغییر کند و بعد دوباره تلاش می‌کند.

این رفتار عمدی است. اشتراکی که سواری را رد می‌کند معمولاً به دلیلی رد می‌کند که تلاش دوباره آن را درست نمی‌کند، و تلاش‌های مکرر یک درخواست را به جریانی از آن‌ها تبدیل می‌کند. پرچم هنگامی بازنشانی می‌شود که نمایه از وضعیت متصل خارج شود، بنابراین یک اتصال دوبارهٔ واقعی دقیقاً یک تلاش تازه می‌سازد. خروج و اجرای دوبارهٔ اپلت هم آن را بازنشانی می‌کند، و این همان دخالت دستی است. هیچ‌کدام از دو مسیر شکستی را پنهان نمی‌کند؛ هر دو آن را در Finder دیدنی می‌گذارند.

اسکریپت هیچ گذرواژه‌ای حمل نمی‌کند، و باید همین‌گونه بماند. بگذارید عملیات سواری بپرسد، و بگذارید جاکلیدی کاری را بکند که سازمان پشتیبانی می‌کند. گنجاندن اعتبارنامه در URL یک اسکریپت آسودگی را به رازی تبدیل می‌کند که باید چرخانده شود.

چیزهایی که کمک‌کننده نمی‌تواند

سه محدودیت ارزش نوشتن در کنار اپلت را دارند. نمی‌تواند جلدی مشغول را پس از خرابی شبکه بیرون بکشد، نمی‌تواند تضمین کند DNS و کارساز هنگامی که وضعیت می‌گوید متصل است آماده‌اند، و به هر اتصال دوباره واکنش نمی‌دهد.

محدودیت نخست در عمل مهم‌ترین است. اشتراکی که کارسازش ناپدید می‌شود جلدی بر جای می‌گذارد که سوارشده به نظر می‌رسد و هنگام دسترسی بلوکه می‌کند، و اصلاح مؤدبانه این است که عملیات فایل را تمام کنید و پیش از قطع برنامه‌ریزی‌شده آن را بیرون بکشید. دومی بیشتر تلاش‌های نخست ناکام را توضیح می‌دهد: تونل برپاست در حالی که حل‌کننده هنوز نرسیده است، پس صبر کنید و سپس یک بار دستی سوار کنید تا تأیید شود. سومی همان بده‌وبستان پرسیدن است و نه اشکالی که باید وصله شود.

برای دستگاهی بدون نظارت یا ناوگانی مدیریت‌شده، این طرح شکل نادرست دارد. به‌جای گسترش یک اپلت رومیزی به سرویس دارای امتیاز، از سیاست سواری متعلق به مدیر استفاده کنید.

مقالات مرتبط