
فرض کن یه پایپلاین CI/CD داری که قراره پروژه رو روی یه سرور دیگه دیپلوی کنه. برای این کار رانرِ گیتلب باید به اون سرور وصل بشه و دستورهای لازم رو اجرا کنه؛ ولی مشکل اینجاست که اتصال SSH معمولاً یا پسورد میخواد یا نیاز به یه تعامل دستی داره، در حالی که پایپلاین قراره کاملاً خودکار اجرا بشه و کسی پشتش نشسته که پسورد وارد کنه.
راهحل این مشکل استفاده از SSH key هست. بهجای پسورد، یه جفت کلید (عمومی و خصوصی) میسازیم؛ کلید عمومی رو روی سرور مقصد میذاریم و کلید خصوصی رو یه جای امن نگه میداریم که فقط پایپلاین بهش دسترسی داشته باشه. گیتلب هم دقیقاً برای همین کار امکانی به اسم Variables داره که میتونیم کلید خصوصی رو بهصورت protected توش تعریف کنیم تا موقع اجرای پایپلاین در دسترس باشه، بدون اینکه جایی توی کد یا لاگها لو بره.
توی این مقاله قدمبهقدم میبینیم چطور یه SSH key بسازیم، چطور به سرور معرفیش کنیم و در نهایت چطور کلید خصوصی رو بهعنوان یه متغیر امن وارد گیتلب کنیم تا پایپلاین بتونه ازش استفاده کنه.
اول از همه یک جفت کلید جدید درست میکنیم
ssh-keygen
یک کلید مناسب بدون پسورد برای خود اون کلید درست کنیم (در زمان درست کردن کلید از کاربر درخواست میشه که یک پسورد برای این کلید ssh تعریف کنه که میتونیم با زدن enter و خالی گذاشتن اون بخش هیچ پسوردی برای کلیدمون تعریف نکنیم)
این دستور در مسیری که توی خط اول ازمون پرسید دوتا فایل جدید درست میکنه یکی با پسوند .pub و دیگری بدون پسوند، فایل .pub محتوای کلید عمومی رو داره و فایل بدون پسوند هم کلید خصوصی شماست.
حالا باید اون کلید عمومی رو به سرور مورد نظرمون معرفی کنیم تا از این به بعد هرکسی که کلید خصوصی مربوط به این کلید رو در اختیار داشت بتونه بصورت مستقیم و بدون هیچ احراز دیگری به سرور وصل شه با دستور
ssh-copy-id -i ~/.ssh/path/to/public/key user@hostاین فایل منتقل و تعریف میشه
بعد از اون باید کلید خصوصی مون رو به دلیل سطح اهمیت بالایی که این کلید داره (چون دسترسی مستقیم بدون رمز به سرور پروداکشن رو مهیا میکنه) بصورت یک variable از نوع protected یا محافظت شده توی گیتلب تعریف کنیم. فرایندش هم به این صورته که مقدار فایل کلید خصوصی رو کامل کپی میکنیم و توی گیتلب با دنبال کردن این مسیر اون کلید خصوصی رو وارد میکنیم

اول وارد settings بخش cicd میشیم

گزینه variables رو انتخاب میکنیم

و در ادامه به پایین صفحه که بریم گزینه add variable رو میتونیم پیدا کنیم

برای تعریف کردن مقدار ssh key نیازه که نوع متغیر رو به نوع فایل تغییر بدیم و برای استفاده از اون متغیر باید در نظر داشته باشیم که این متغیر به مسیر فایل اشاره میکنه نه به خود مقدار ذخیره شده در فایل
در ادامه هم گزینه ها و حالت های مد نظر رو تیکشون رو روشن یا خاموش میتونیم بکنیم با توجه به توضیحی که زیر هر گزینه نوشته و در نهایت مقدار key اسم متغیر و مقدار variable مقدار اون متغیر رو مشخص میکنه
البته باید مقدار visibility رو از حالت masked به visible تغییر داد
از الان به بعد ما میتونیم در هر جایی از پایپ لاین به این متغیر به شکل $SSH_KEY دسترسی پیدا کنیم
فقط حواستون باید باشه که سطح دسترسی این فایل رو هنگام اجرای هر جابی در پایپ لاین باید مشخص کرده باشید وگرنه سیستم امنیتی گیتلب به شما اجازه اجرا کردن پایپ لاین رو نمیده
شیوه مرسوم انجام دادنش هم اینه که توی before-script یک خط دستور chmod 400 $SSH_KEY بنویسین و تمام
مثال واقعی تر از نحوه کار کردن با فایل SSH-KEY رو در مقاله پایپ لاین نویسی میتونین دنبال کنین و ببینید که چطور در پایپ لاین ها از این متغیر استفاده میشه


