واحد 2 / 11

اسکریپت های اتوماسیون: تولید Bash، PowerShell و Python به صورت ایمن

سود:

  • توانایی تولید اسکریپت های اتوماسیون Bash، PowerShell و Python با محدودیت های واضح و حفاظ های امنیتی با هوش مصنوعی
  • امکان اضافه کردن اصولی مانند عدم توانایی، اجرای خشک، مدیریت خطا و بازگشت به هر اسکریپت و اعمال چرخه «تولید، سخت شدن، تأیید»
  • توانایی درک این موضوع که اجرای فیلمنامه تولید شده به معنای ایمن بودن آن نیست و با خواندن و آزمایش خطوط مخرب، عادت به مسئولیت پذیری را به دست آورید.

اسکریپت های اتوماسیون: تولید Bash، PowerShell و Python به صورت ایمن با هوش مصنوعی

بدترین دشمن مدیر سیستم، کارهای دستی مکرر است: اتصال به هر دستگاه و پاک کردن گزارش‌ها، باز کردن یک کاربر روی بیست سرور، اجرای همان بررسی سلامت هر روز صبح. این تکرار هم برای زمان و هم خطای انسانی باز است. یک اسکریپت اتوماسیون برنامه کوچکی است که این تکرارها را به رایانه واگذار می‌کند - اغلب به زبان Bash (زبان فرمان پوسته) در دنیای لینوکس، PowerShell (پوسته اتوماسیون مایکروسافت) در دنیای ویندوز و پایتون برای کارهای مستقل از پلتفرم نوشته می‌شود. هوش مصنوعی در تولید، توضیح و بهبود اولین پیش نویس این اسکریپت ها فوق العاده سریع است. اما فیلمنامه یک متن نیست، نیرویی است که در سیستم شما کار می کند. برخلاف فرمول اکسل، اگر نادرست باشد، فایل را حذف می کند، سرویس را متوقف می کند و دسترسی را قطع می کند. به همین دلیل است که وعده این واحد این است: هوش مصنوعی اسکریپت را می نویسد، شما آن را می خوانید، آزمایش می کنید و با مسئولیت اجرا می کنید.

در این بخش، نحوه تولید اسکریپت های ایمن، خوانا و قابل بازیابی با هوش مصنوعی را یاد خواهید گرفت. اصول نجات بخش مانند بی توانی (دوبار اجرای یک فیلمنامه باعث آسیب نمی شود) و اجرای خشک. و بررسی هایی را که یک فیلمنامه باید قبل از تولید آن انجام دهد، یاد خواهید گرفت.

چرا اسکریپت نویسی با هوش مصنوعی اینقدر قدرتمند است؟

حتی یک مدیر باتجربه ممکن است نحو دقیق حلقه Bash، پارامترهای یک cmdlet (فرمان) PowerShell یا یک بلوک آزمایشی/به جز Python را نداند. هوش مصنوعی فوراً این شکاف را پر می‌کند: شما قصد را به زبان ترکی ساده توضیح می‌دهید و یک طرح کلی ایجاد می‌کند. علاوه بر این، می‌توانید یک اسکریپت موجود را به هوش مصنوعی بدهید و بگویید «این را توضیح دهید»، «افزودن رسیدگی به خطا»، «آن را خواناتر کنید». این منحنی یادگیری را کوتاه می کند و اعضای تیم جوان را به سرعت می رساند.

اما با قدرت، مسئولیت نیز به وجود می آید. اغلب اوقات، یک اسکریپت تولید شده توسط هوش مصنوعی، "مسیر شاد" را به درستی می نویسد (اگر همه چیز خوب باشد). اما می تواند موارد لبه (پرونده از دست رفته، دیسک کامل، شبکه خراب) را از دست بدهد یا مفروضات خطرناکی ایجاد کند. بنابراین به تولید اسکریپت با هوش مصنوعی در سه مرحله فکر کنید: تولید، سخت شدن، تأیید.

گام به گام: تولید اسکریپت امن

  1. قصد و محدودیت را به وضوح بنویسید. کدام سیستم عامل، کدام نسخه پوسته، کدام مسیر فایل، چه حقوقی؟ مانند "اوبونتو 22.04، Bash 5، sudo روت نیست، فقط تحت /opt/app/logs اجرا می شود". تقاضای مبهم فرض خطرناکی ایجاد می کند.
  2. نرده های ایمنی را بخواهید. از اسکریپت بخواهید که "stop on شکست" (تنظیم -euo pipefail در Bash)، درخواست تایید عملیات مخرب، پشتیبان گیری قبل از عملیات، و حالت خشک اجرا شود. این نرده‌های حفاظ لبه‌ای را نشان می‌دهند که هوش مصنوعی دور می‌زند.
  3. بی قدرت بنویس اسکریپت نباید هنگام اجرای بار دوم باعث ایجاد خطا یا آسیب شود. یک منطق "پرش اگر کاربر از قبل وجود دارد"، "در صورت نبود دایرکتوری ایجاد کنید، اگر وجود دارد آن را لمس نکنید" را ایجاد کنید. این به اتوماسیون اجازه می دهد تا بارها و بارها با خیال راحت اجرا شود.
  4. بخوانید و بفهمید. هر خط تولید شده را بخوانید. از هوش مصنوعی بخواهید تا دستورات مخرب (rm، Remove-Item، DROP) را به طور جداگانه علامت گذاری کند.
  5. با اجرای خشک تست کنید. ابتدا به جای عملیات واقعی، آن را در حالت «گفتن چه باید کرد» اجرا کنید. اگر خروجی همان چیزی است که انتظار دارید، به حالت واقعی تغییر دهید — و ابتدا روی دستگاه تست.
  6. بازگشت خود را آماده کنید. آیا اسکریپت پشتیبان می گیرد؟ آیا می دانید چگونه بک آپ را بازیابی کنید؟ آیا ورود به سیستم وجود دارد، بعداً می توانید ببینید چه کاری انجام می دهد؟
نکته: از هر اسکریپت مخرب یک متغیر DRY_RUN=true و یک پرچم --apply بخواهید. رفتار پیش فرض این است که بدون حذف چیزی بنویسید چه اتفاقی می افتد. اجازه دهید حذف واقعی فقط در صورتی کار کند که --apply به صراحت داده شده باشد. این یک عادت از بلایای طولانی شغلی جلوگیری می کند.

سه کیف کوچک

مورد 1 - عدم توانایی 3 ساعت صرفه جویی شد. یک مدیر اسکریپتی نوشت که همان عامل نظارت را روی 25 سرور نصب می کرد. نسخه اول بی قدرت نبود: اگر عامل قبلاً نصب شده بود، پیکربندی را در اجرای دوم شکست. مهندس هوش مصنوعی را اضافه کرد که منطق "بررسی کنید نصب شده است، اگر هست از آن بگذرید". در طول پنجره نگهداری بعدی، اسکریپت به طور تصادفی دو بار فعال شد، اما هیچ آسیبی نداشت. Idempotency بازیابی 25 سرور را غیر ضروری کرد.

مورد 2 - اجرای خشک یک دایرکتوری ریشه را ذخیره کرد. یک تیم یک اسکریپت Bash دریافت کرد که پشتیبان‌های قدیمی را پاک می‌کرد. اگر متغیر خالی بود، مسیر به / به جای /backups/ تبدیل می شد - یک خطر کلاسیک. مهندس ابتدا آن را در حالت DRY_RUN اجرا کرد، وقتی خطی شبیه به rm -rf / را در خروجی دید ثابت کرد و یک بررسی متغیر اضافه کرد (: "${BACKUP_DIR:?cannot be خالی}"). در حال اجرا خشک مشکلی را گرفت که کل دیسک را قبل از تولید پاک می کرد.

مورد 3 - مدیریت خطا مانع از بیدار شدن آن در یک شب شد. زمانی که دیسک پر شد، یک اسکریپت PowerShell در حال آرشیو کردن گزارش‌ها بود. اگر اشتراک شبکه غیرقابل دسترسی بود، نسخه اول بی‌صدا شکست می‌خورد و همچنان دیسک را پر می‌کرد. "تأیید موفقیت در هر مرحله، اگر ناموفق بود، به ایمیل اطلاع دهید و متوقف شوید" به هوش مصنوعی اضافه شد. پس از یک هفته، پست شکسته شد. اسکریپت متوقف شد و هشدار داد، دیسک پر نبود، هیچ کس ساعت 3 صبح از خواب بیدار نشد.

چهار قالب قابل کپی

1) تولید اسکریپت Bash ایمن:

نقش شما: مهندس ارشد اتوماسیون لینوکس. یک اسکریپت برای اوبونتو 22.04 / Bash 5 بنویسید. هدف: [هدف]. قوانین:- با "set -euo pipefail" شروع کنید.- متغیرهای مورد نیاز را با ": ${VAR:?}" اعتبارسنجی کنید.- عملیات مخرب را با پیش فرض DRY_RUN=true انجام دهید. اجازه دهید برنامه واقعی فقط با پرچم --apply اجرا شود. - هر مرحله را به stdout وارد کنید، با یک پیام معنی دار در مورد خطا متوقف شوید. - آن را بی قدرت کنید (به طوری که در اجرای دوم آسیبی به آن وارد نشود). سپس: خطوط بالقوه مخرب را جداگانه علامت بزنید و 3 مورد را بنویسید که باید قبل از تولید آزمایش کنم.

2) سخت کردن اسکریپت موجود:

اسکریپت زیر را برای تولید آماده کنید: (1) مدیریت خطا و ثبت اطلاعات را اضافه کنید، (2) آن را بی قدرت کنید، (3) دستورات مخرب را پشت اجرای خشک قرار دهید، (4) مسیرها و اسرار رمزگذاری شده را به متغیر استخراج کنید. هر خطی را که تغییر دادید و دلیل آن را به طور خلاصه شرح دهید. اسکریپت: [اسکریپت]

3) اتوماسیون ایمن PowerShell:

نقش شما: کارشناس اتوماسیون ویندوز. یک اسکریپت سازگار با PowerShell 5.1 بنویسید. غرض: [هدف]. قوانین: - با "$ErrorActionPreference = "توقف" شروع کنید.- پشتیبانی -WhatIf را به cmdlet های تخریب کننده اضافه کنید (پیش فرض WhatIf).- هر اقدام را با try/catch، خطای ثبت بپیچید. از پارامتر یا ورودی ایمن استفاده کنید. خطوط مخرب را علامت گذاری کنید و مراحل لغو را بنویسید.

4) رمزگشایی و تأیید عبارت Cron/schedule:

عبارت cron زیر را به زبان ترکی ساده توضیح دهید و 3 زمان اجرا بعدی را بنویسید: [expression] همچنین، اگر هدف من "[هدف]) باشد، آیا این عبارت درست است یا راه حلی پیشنهاد می کنید؟ همچنین به اثر دوره زمانی توجه کنید.

اعلان ضعیف / اعلان قوی

اعلان ضعیف:

برای من یک اسکریپت بنویس که لاگ را پاک کند.

این اعلان خطرناک است: مشخص نیست کدام سیستم عامل، کدام فهرست، کدام محدودیت سنی، کدام حفاظ امنیتی. هوش مصنوعی می تواند یک rm یک خطی، مخرب و غیرقابل تایید را ارائه دهد.

اعلان قدرتمند:

نقش شما: مهندس ارشد اتوماسیون لینوکس. یک اسکریپت پاکسازی گزارش برای اوبونتو 22.04 / Bash بنویسید. فقط فایل‌های log. را در زیر /opt/app/logهایی که قدیمی‌تر از 30 روز هستند حذف کنید. قوانین: set -euo pipefail; اعتبارسنجی متغیرهای BACKUP_DIR و LOG_DIR (توقف در صورت خالی بودن). لیست فایل لاگ قبل از حذف. اجازه دهید DRY_RUN=true پیش فرض باشد، حذف واقعی فقط با --apply; بذار بی قدرت باشه خطوط مخرب را علامت بزنید و 3 سناریو را که باید آزمایش کنم بنویسید.

ویژگی

اسکریپت ضعیف/سریع

اسکریپت سخت شده

رسیدگی به خطا

نه، شکست خاموش

set -euo pipefail، try/catch

اقدام مخرب

مستقیم کار می کند

Dry-run + open check flag

راه اندازی مجدد

ممکن است باعث آسیب شود

بی توان، ایمن

مدیریت مخفی

سخت کد شده

ورودی متغیر/مخفی

لغو کردن

هیچ کدام

مرحله پشتیبان گیری + بازیابی

اشتباهات رایج

  • اجرای اسکریپت مخرب بدون اجرای خشک. ندیدن اسکریپت حاوی rm، Remove-Item، DROP اول در حالت خشک هزینه دیسک را دارد.
  • از بررسی متغیر تهی بگذرید. یک متغیر مسیر خالی / به جای /backups/ را می سازد. : حتما با "${VAR:?}" تأیید کنید.
  • فراموش کردن بی‌توانی اسکریپت با دو بار اجرا خراب می شود و اتوماسیون را غیر قابل اعتماد می کند.
  • اسرار سخت کدگذاری نوشتن رمز عبور و کلید در اسکریپت زمانی که آن اسکریپت را به اشتراک می گذارید نشت می کند.
  • تست در تولید انجام اولین اجرا در تولید به معنای تمرین روی صحنه است. ابتدا دستگاه تست
توجه: اسکریپت ارائه شده توسط هوش مصنوعی را فقط به این دلیل که "کار کرد، یعنی درست است" قبول نکنید. فقط به این دلیل که کار می کند به این معنی نیست که مخرب نیست. یک اسکریپت می تواند در مسیر شاد اجرا شود و داده ها را در حالت لبه حذف کند. آزمون واقعی موارد لبه است.

به طور خلاصه

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

وظیفه کاربردی

کاری را انتخاب کنید که به صورت دستی در کار خود تکرار کنید (مانند پاکسازی گزارش، باز کردن کاربر، بررسی سلامت). با الگوی «Secure Bash script» یا «PowerShell safe automation» در بالا، یک طرح کلی از هوش مصنوعی درخواست کنید. خط به خط اسکریپت تولید شده را بخوانید و خطوط مخرب را علامت بزنید. ابتدا آن را در حالت خشک اجرا بر روی دستگاه تست اجرا کنید، خروجی را با انتظارات خود مقایسه کنید. سپس اسکریپت را به هوش مصنوعی برگردانید و آن را با قالب "harden" اصلاح کنید و 5 تفاوت بین دو نسخه را یادداشت کنید.

چک لیست

  • [ ] آیا محدودیت هایی مانند سیستم عامل، نسخه پوسته، مسیرها و حقوق را در اعلان قرار داده ام؟
  • [ ] آیا اسکریپت با set -euo pipefail / $ErrorActionPreference='Stop' تحمل خطا دارد؟
  • [ ] آیا عملیات مخرب پشت خشک اجرا/-WhatIf است و نیاز به یک پرچم چک صریح دارد؟
  • [ ] آیا اسکریپت فاقد قدرت (در اجرای دوم ایمن) است؟
  • [ ] آیا من اسرار ورودی متغیر/مخفی را به جای کدنویسی سخت استخراج کرده ام؟
  • [ ] آیا اولین اجرا را روی دستگاه آزمایش انجام داده ام و یک طرح بازگشت آماده کرده ام؟