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

کلاینت را با سه لایه قابل‌اسکریپت هم‌تراز کنید

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

What the client exposesWhat to scriptWhat still bites
OS-native connection entryrasdial, scutil --nc, nmcliTunnel is up before DNS and routes settle
Vendor CLI reading stdinCLI wrapped by the scheduler, secret from the credential storePrompt text changes between releases
GUI onlyPinned version plus a state assertionLocale and DPI break the click targets

مسیر یک: سیستم‌عامل از قبل مالک پروفایل است

این ارزان‌ترین مسیر است و همانی که بیشتر مردم نادیده می‌گیرند. در Windows، rasdial "Office" متصل می‌شود و rasdial "Office" /disconnect آن را می‌بندد؛ rasphone -d "Office" همان ورودی را از طریق رابط شماره‌گیری هدایت می‌کند. macOS خدمات ذخیره‌شده را با scutil --nc list فهرست می‌کند و یکی را با scutil --nc start شروع می‌کند. Linux کار را به NetworkManager می‌سپارد.

rasdial "Office" user *
scutil --nc start "Office"
nmcli connection up id Office
nmcli -t -f GENERAL.STATE connection show Office

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

مسیر دو: فروشنده خط فرمان ارائه می‌دهد

برخی کلاینت‌ها آنقدر خط فرمان ارائه می‌دهند که بتوان بسته‌بندی‌شان کرد: Cisco AnyConnect سال‌ها یک کمک‌کننده فقط برای اتصال داشته است، و OpenConnect پروتکل‌های AnyConnect و GlobalProtect و Pulse را از یک باینری صحبت می‌کند. الزام مهم فهرست سوییچ‌ها نیست، بلکه این است که راز از کجا می‌آید، زیرا گذرواژه در فهرست آرگومان‌ها را هر کسی که بتواند فرایندها را فهرست کند می‌خواند.

printf '%s\n' "$VPN_PASS" | openconnect --protocol=anyconnect \
  --user "$VPN_USER" --passwd-on-stdin vpn.example.com

FortiClient و برخی ساخت‌های GlobalProtect اصلاً CLI پشتیبانی‌شده ندارند، و کلاینت جامعه‌محور یا جایگزین دارای مجوز فروشنده یک تصمیم تدارکاتی است، نه راه‌حل. در CI به حساب سرویس حقوق روی همان باینری مشخص بدهید نه روی یک پوسته، تا آرگومان تزریق‌شده نتواند به فرمان root تبدیل شود.

مسیر سه: خودکارسازی GUI، و چرا آخرین است

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

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

چه چیزی پس از بالا آمدن تونل می‌شکند

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

تلاش‌های مجدد را محدود کنید. حلقه‌ای که اعتبارنامه ردشده را تکرار می‌کند حساب‌ها را قفل می‌کند، و اعلان MFA را کار بی‌سر بدون طراحی ثبت‌نام نمی‌تواند پاسخ دهد؛ تلاش‌های مجدد اسکریپتی در برابر جریان SSO مرورگر فقط تلاش‌ها را می‌سوزاند. محموله VPN تحویل‌شده با MDM یا پروفایل پیکربندی را برای یک ناوگان ترجیح دهید، جایی که پلتفرم مالک چرخه عمر اعتبارنامه است، و اسکریپت‌ها را برای کلاینت‌هایی نگه دارید که این‌گونه مدیریت نمی‌شوند.

کد خروج و نخستین منبع شکست‌خورده را ثبت کنید، نه این واقعیت که اسکریپت اجرا شد. همان یک خط است که هشدار زمان‌بند را به تشخیصی پنج‌دقیقه‌ای تبدیل می‌کند.

مقالات مرتبط