اسکریپتی می‌نویسید که scutil --nc start را با نام اتصال اجرا می‌کند، روی Mac شما کار می‌کند و روی هر دستگاه تازه نصب‌شده در دفتر شکست می‌خورد. اسکریپت خراب نیست. از آن چیزی خواسته می‌شود که هرگز نمی‌توانست انجام دهد: شروع یک اتصال موجود همان عملیات ساختن یک اتصال تازه نیست.

آماده‌سازی و کنترل نشست دو کار با دو مالک هستند، و گردش کاری که خلاف آن را فرض کند، همه آزمون‌ها را روی دستگاهی که در آن نوشته شده پس می‌دهد.

فرمان شروع واقعاً با چه چیزی حرف می‌زند

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

به همین دلیل خرابی روی سخت‌افزار تازه پدیدار می‌شود و نه روی لپ‌تاپ مدیر. لپ‌تاپ ماه‌ها پیش توسط کسی آماده شده که از آن زمان فراموش کرده چنین کاری کرده است. فرمان شروع را مانند زنگ دری بدانید که کسی در سه‌ماهه گذشته سیم‌کشی کرده است. فشردن آن همان نصب سیم‌کشی نیست.

سه مالک یک پیکربندی VPN

نمایه‌ای که سازمان مدیریت می‌کند از مدیریت دستگاه می‌آید. نمایه نشانی‌های سرور، ترتیب احراز هویت و سیاستی را که سازمان لازم دارد حمل می‌کند، و مدیر VPN همان کسی است که آن‌ها را فراهم می‌کند. اسکریپت نباید آن تنظیمات را از یک نام نمایشی که در فهرست یافته بازسازی کند.

پیکربندی VPN شخصی بومی از طریق Network Extension API شرکت Apple ساخته می‌شود که پروتکل‌های IPsec و IKEv2 داخلی را پوشش می‌دهد. آن یک رابط برنامه با مرحله ذخیره و تأیید کاربر است، نه فرمان پوسته‌ای که بی‌صدا هر نوع تونلی را که فروشنده عرضه کند می‌سازد.

کارخواه شخص ثالث حالت سوم است با قالب درون‌ریزی خودش، ابزار مدیریت خودش و اغلب کمک‌کننده دارای دسترسی ویژه خودش. نشست آن متعلق به فرایند همان فروشنده است. یافتن یک سرویس سیستم با نام مشابه شاهد آن نیست که فرمانی در سیستم تونل را کنترل می‌کند، و فرض کردن آن اسکریپت‌هایی می‌سازد که کارآمد به نظر می‌رسند تا زمانی که فروشنده کارخواه را به‌روزرسانی کند.

آماده‌سازی بومی یک ذخیره و یک تأیید دارد

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

نخستین ذخیره همچنین نیاز دارد که کاربر برنامه را تأیید کند. این یک مرز امنیتی عمدی است، و یعنی نخستین اجرا روی یک Mac تازه تعاملی است حتی وقتی هر اتصال و قطع اتصال بعدی می‌تواند خودکار شود. نخستین اجرا را کاری انسانی با حضور یک انسان برنامه‌ریزی کنید. اجرای دوم به بعد را خودکار کنید، و آن را در دفترچه اجرا بنویسید تا کسی وعده ناممکن ندهد. طرح استقراری که نخستین اجرای کاملاً بی‌سرپرست را وعده می‌دهد، چیزی را وعده می‌دهد که سکو ارائه نمی‌کند.

Apple همچنین توصیه می‌کند پیش از تکیه بر API، سازگاری سرور را با یک نمایه پیکربندی اعتبارسنجی کنید. انجام این بررسی در ابتدا «سرور این کارخواه را نمی‌پذیرد» را از «کارخواه هرگز تنظیمات را ذخیره نکرد» جدا می‌کند، که بلیت‌های متفاوتی برای تیم‌های متفاوت هستند.

یک فرمان شروع تکرارپذیر چه چیزی را می‌تواند فرض کند

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

برای اتصال‌های بومی، یک درخواست نشست نامدار مانند scutil --nc start یک عملیات کنترلی است. تنظیمات سرور را نصب نمی‌کند، اعتبارنامه درون‌ریزی نمی‌کند و مجوز نخستین ذخیره را انجام نمی‌دهد. آن را آخرین گام یک زنجیره بدانید، هرگز کل زنجیره نه.

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

دو بررسی پذیرش

بررسی نخست آماده‌سازی است: یک Mac تازه نصب‌شده بردارید و ثابت کنید پیکربندی وجود دارد، مال مدیر درست است و کاملاً تأیید شده است. این را پیش از آزمودن اتصال انجام دهید، چون آزمون اتصال روی دستگاهی آماده‌نشده چیزی درباره اسکریپت ثابت نمی‌کند.

بررسی دوم نشست است: متصل شوید، به منبع مجاز برسید و تمیز قطع اتصال کنید. هر شکست اکنون یک مالک دارد، و این سود عملی جدا کردن دو کار است. نمایه غایب مسئله تحویل است، خطای ذخیره مسئله تأیید است، ورود ردشده مسئله احراز هویت است، و پایان مهلت پس از شروع موفق لایه نشست است. هیچ‌کدامشان «اسکریپت خراب است» نیست.

مقالات مرتبط