در توسعه نرمافزارهای مدرن، سیستمهای مدیریت نسخه (Version Control Systems) شریان اصلی چرخه حیات نرمافزار (SDLC) را تشکیل میدهند. پلتفرم داتنت (.NET) مایکروسافت در نسخههای مدرن خود، سازگاری و بهینهسازی فوقالعادهای با محیطهای لینوکسی پیدا کرده است؛ به طوری که امروزه توزیعهای لینوکس و بهویژه اوبونتو (Ubuntu Server)، به یکی از گزینههای استاندارد و اقتصادی برای میزبانی و استقرار برنامههای ASP.NET Core تبدیل شدهاند.
در این سناریو، تسلط بر نحوه راهاندازی Git روی لینوکس و برقراری ارتباط کاملاً امن و خودکار با مخازنی مانند گیتهاب (GitHub) حیاتی است. در این مقاله علمی و تخصصی، ابتدا به نصب و پیکربندی اولیه Git در اوبونتو پرداخته، سپس معماری اتصال از طریق پروتکل رمزنگاریشدهی SSH را بررسی میکنیم و در نهایت به حل چالش رایج درخواست مکرر نام کاربری و رمز عبور (به دلیل تداخل پروتکلهای HTTPS و SSH) میپردازیم.
۱. نصب ابزار Git بر روی اوبونتو
جهت شروع، ابتدا با استفاده از کلاینت SSH مورد نظر خود به سرور اوبونتو متصل شوید. پیش از نصب هر پکیج جدید، اکیداً توصیه میشود که شاخص پکیجهای محلی توزیع را بهروزرسانی کنید تا مطمئن شوید آخرین نسخه پایدار از مخازن رسمی دریافت میشود.
گام اول: بهروزرسانی مخازن و نصب
با اجرای دستورات زیر در ترمینال لینوکس، فرآیند آمادهسازی و نصب آغاز میشود:
sudo apt update
sudo apt install git -y
نکته فِلگ -y: این سوئیچ به سیستم اعلام میکند که تمامی تاییدیههای حین نصب را به صورت خودکار تایید (yes) کند.
گام دوم: تایید صحت نصب
جهت اطمینان از قرارگیری صحیح باینریهای گیت در مراجع سیستم (Environment Variables)، دستور زیر را وارد کنید:
git --version
خروجی این دستور نسخهی رسمی و فعال Git بر روی سرور شما را نشان خواهد داد.
۲. پیکربندی اطلاعات کاربری جهانی (Global Configuration)
هر تعهدی (Commit) که در Git ثبت میشود، پیوسته نیازمند الصاق هویتی نویسنده (شامل نام و ایمیل) است. این اطلاعات در تاریخچه ساختاری مخزن (Git History) هک میشود و تغییر بعدی آن دشوار است.
با استفاده از دستورات زیر، هویت جهانی خود را بر روی سرور تنظیم کنید:
git config --global user.name "Your Name"
git config --global user.email "youremail@example.com"
نکته تخصصی برای توسعهدهندگان:
پیشنهاد میشود ایمیلی که در این بخش وارد میکنید دقیقاً همان ایمیلی باشد که در حساب کاربری گیتهاب شما ثبت شده است. این همگامسازی سبب میشود که مشارکتها (Contributions) و گراف فعالیتهای شما در گیتهاب به درستی به نام شما ثبت شود.
جهت بازبینی و صحهگذاری بر روی تنظیمات ثبتشده، میتوانید از دستور زیر استفاده کنید:
git config --list
۳. اتصال امن سرور به GitHub از طریق پروتکل SSH
استفاده از پروتکل سنتی HTTPS و احراز هویت با رمز عبور عادی از سال ۲۰۲۱ توسط گیتهاب منسوخ شدهاست. استفاده از جفتکلیدهای نامتقارن SSH (Asymmetric Cryptography) نه تنها امنیت سرور شما را تضمین میکند، بلکه نیاز به وارد کردن مکرر رمز عبور را در فرآیندهای خودکارسازی (مانند pipelines در CI/CD) کاملاً مرتفع میسازد.
گام اول: تولید جفتکلید SSH (SSH Key Pair)
امروزه الگوریتم Ed25519 به دلیل امنیت بالاتر، حجم کلید کوچکتر و سرعت رمزنگاری بیشتر، جایگزین الگوریتمهای قدیمی شده و توسط گیتهاب به عنوان الگوریتم پیشنهادی معرفی میشود:
ssh-keygen -t ed25519 -C "youremail@example.com"
در صورتی که به هر دلیلی محیط سیستمعامل شما قدیمی بوده و از این الگوریتم مدرن پشتیبانی نمیکند، میتوانید از الگوریتم سنتی اما مطمئن RSA با طول کلید ۴۰۹۶ بیت استفاده کنید:
ssh-keygen -t rsa -b 4096 -C "youremail@example.com"
در طول فرآیند تولید کلید، سیستم دو سوال از شما میپرسد:
- Enter file in which to save the key: بدون تایپ کردن چیزی، دکمه
Enter را بزنید تا کلید در مسیر پیشفرض سیستم (~/.ssh/) ذخیره شود. - Enter passphrase: یک عبارت عبور برای محافظت از کلید خصوصی شماست. اگر میخواهید فرآیندهای استقرار کدهای داتنت کاملاً خودکار و بدون دخالت اپراتور انجام شود، این بخش را خالی گذاشته و دو بار
Enter را بزنید.
گام دوم: فعالسازی و ثبت کلید در کارگزار SSH (SSH Agent)
برای اینکه سیستمعامل بتواند مدیریت کلیدها را در پسزمینه به دست بگیرد، ابتدا کارگزار سیستم را فعال کرده و سپس کلید خصوصی ساخته شده را به آن معرفی کنید:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
(توجه: در صورت استفاده از الگوریتم قدیمی RSA، نام فایل کلید خصوصی شما id_rsa خواهد بود).
گام سوم: ثبت کلید عمومی در حساب کاربری GitHub
کلیدها به صورت جفت ساخته میشوند؛ کلید خصوصی باید مکتوم و در سرور بماند، اما کلید عمومی (Public Key) باید به گیتهاب معرفی شود. ابتدا محتویات کلید عمومی را در ترمینال چاپ کرده و آن را کامل کپی کنید:
cat ~/.ssh/id_ed25519.pub
حالا وارد اکانت گیتهاب خود شده و مسیر زیر را دنبال کنید:
- از گوشه سمت راست بالا بر روی آیکون پروفایل خود کلیک کرده و وارد بخش Settings شوید.
- در منوی سمت چپ، گزینه SSH and GPG keys را انتخاب کنید.
- بر روی دکمه New SSH key کلیک کنید.
- در بخش Title یک نام مشخص (مانند
Ubuntu-Production-Server) انتخاب کرده و در بخش Key، متن کپیشده را پیست کنید و دکمه Add SSH key را بفشارید.
گام چهارم: تست نهایی صحت ارتباط
جهت اطمینان از اینکه لینوکس اوبونتو با موفقیت توسط گیتهاب احراز هویت میشود، دستور زیر را اجرا کنید:
ssh-T git@github.com
هنگام برقراری اولین ارتباط، اعتبارسنجی اثر انگشت سرور (Fingerprint) از شما سوال میشود:
Are you sure you want to continue connecting (yes/no)?
کلمه yes را تایپ کرده و Enter بزنید. در صورت موفقیتآمیز بودن تنظیمات، پیام زیر را دریافت خواهید کرد:
Hi USERNAME! You've successfully authenticated, but GitHub does not provide shell access.
۴. رفع عیب: چرا ابزار Git کماکان نام کاربری و رمز عبور درخواست میکند؟
ریشه مشکل
بسیاری از توسعهدهندگان پس از طی کردن تمام مراحل بالا، هنگام اجرای دستوراتی مانند git push -u origin main با این چالش مواجه میشوند که گیت مجدداً از آنها کلمه عبور یا Token درخواست میکند. دلیل این پدیده تقریباً همیشه این است که آدرس مخزن راه دور (Remote URL) پروژه شما به جای ساختار SSH با ساختار HTTPS تنظیم شده است. برای بررسی این موضوع، در دایرکتوری پروژه خود دستور زیر را اجرا کنید:
git remote -v
اگر خروجی نمایش داده شده شبیه به متن زیر باشد، یعنی حدس ما درست است و گیت به اشتباه از بستر HTTPS استفاده میکند:
origin https://github.com/USERNAME/REPO.git (fetch)
origin https://github.com/USERNAME/REPO.git (push)
راهکار حل مشکل (انتقال ریموت به SSH)
بدون نیاز به حذف یا شبیهسازی مجدد پروژه، کافیست با دستور زیر، آدرس ریموت مخزن خود را به فرمت استاندارد SSH تغییر دهید:
git remote set-url origin git@github.com:USERNAME/REPO.git
(توجه: به جای USERNAME نام کاربری گیتهاب و به جای REPO نام مخزن خود را قرار دهید).
حال با اجرای مجدد دستور بررسی ریموت، مطمئن شوید خروجی به شکل زیر اصلاح شده است:
origin git@github.com:USERNAME/REPO.git (fetch)
origin git@github.com:USERNAME/REPO.git (push)
از این پس، تمامی تعاملات فشاری و کششی (Push & Pull) کدهای شما بر روی سرور بدون سوال و جواب، در بستری فوق امن انجام خواهد گرفت.
نتیجهگیری
پیکربندی اصولی زیرساختهای مدیریت نسخه، یکی از ستونهای اصلی استقرار بدون نقص (Seamless Deployment) نرمافزار است. در این مقاله آموختیم که چگونه در محیط پایدار لینوکس اوبونتو، ابزار گیت را نصب کرده و با استفاده از امنترین الگوهای رمزنگاری مدرن (Ed25519) یک ارتباط بدون رمز عبور و پایدار با گیتهاب بنا کنیم. درک این مفاهیم گام نخست برای ورود توسعهدهندگان .NET به دنیای دِوآپس، داکرایز کردن برنامهها و پیادهسازی خط لولههای خودکار لینوکسی است.