چگونه برای دسترسی به گیت‌هاب هربار دستور ...eval رو اجرا نکنیم؟

این روزها با بسته شدن چندباره اکانت ما ایرانی‌ها تو GitHub شاید شما هم مثل من با مشکل اینکه نمی‌تونین با اکانت جدیدتون pull یا push کنین مواجه شده باشین:fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.و برای حلش مجبورین بعد از باز کردن هر باره ترمینال دستورات زیر رو اجرا کنین:eval &quot$(ssh-agent -s)&quot ssh-add ~/.ssh/keyبعد از اینکه این اتفاق برای من افتاد، یه جستجوی گذری انجام دادم و به راه‌حلی نرسیدم! چند روزی رو اینجوری سپری کردم‌. یه روز به خودم گفتم: خجالت بکش این چه کاریه؟! دوباره دنبالش گشتم و بدون اینکه دلیل مشکل رو بفهمم یه راه‌حل براش پیدا کردم و بعد از چند روز، اون راه‌حل هم دیگه کار نکرد. سمت راست، چپ و پشت خودمو نگاه کردم، کسی نبود و همون دستورات رو تکرار کردم و تا یکی دو ماه همونجوری با تکرار دستورات کارم رو ادامه دادم.سناریوی مشکلشما می‌تونین چندین جفت ssh key همزمان تو سیستمتون داشته باشین. وقتی جایی ssh می‌زنین، دستور ssh از کلیدهایی که توسط ssh-add به لیست اضافه شدن، برای برقراری ارتباط استفاده می‌کنه (لیست این کلید‌ها رو می‌تونین با دستور ssh-add -l ببینین). حالا فرض کنین شما یک اکانت به اسم account_1 تو گیت‌هاب دارین و روی این اکانت دسترسی یک پروژه به شما داده شده. برای دسترسی به اکانت account_1 از جفت کلید key_1 و key_1.pub استفاده می‌کنین. یه روز از خواب بیدار میشین و اون پیغام کمرشکن رو می‌بینین و مجبور میشین یه اکانت جدید بسازین(account_2). روی اکانت جدید، دوباره به شما دسترسی به پروژه داده میشه و دوباره میخواین که key_1.pub رو به اکانت جدید گیت‌هابتون اضافه کنین و گیت‌هاب ارور میده که این کلید تکراریه و شما میرین جفت جدید key_2 و key_2.pub رو میسازین و از کلید جدید استفاده می‌کنین.اما همونطور که می‌بینین وقتی میخواین push یا pull کنین، با ارور دسترسی مواجه میشین و هر بار بعد از باز کردن ترمینال باید قبلش دستورات زیر رو اجرا کنین:eval &quot$(ssh-agent -s)&quot ssh-add ~/.ssh/key_2دلیل مشکلترمینال رو بازکنین و تو مسیر پروژه‌تون دستور git remote -v رو بزنین، متوجه میشین که این url چه با اکانت قبلی و چه با اکانت جدید، هیچ فرقی نکرده. خب وقتی می‌خواین تو یه پروژه داخل گیت‌هاب پوش کنین، گیت‌هاب از کجا باید بفهمه این کسی که داره پوش می‌کنه کیه؟ وقتی دارین از ssh استفاده می‌کنین تنها راه اهراز هویت برای گیت‌هاب public key شماست.دستور ssh تو لیستش دوتا کلید داره(key_1 و key_2) که متناظر با دو اکانت جداگانه تو گیت‌هاب هستن. و موقعی که شما میخواین push کنین، اگر ابتدا از key_1 استفاده بشه، گیت‌هاب اکانت شما رو account_1 تشخیص میده و چون اون اکانت دیگه به پروژه‌تون دسترسی نداره، شما با ارور دسترسی مواجه میشین.راه‌حل مشکلبعد از فهمیدن دلیل مشکل، کارهای زیادی رو می‌تونین برای حلش انجام بدین که من تو این قسمت یک راه‌حل برای حالت خاص و یک راه‌حل کامل رو نوشتم: کلید‌ key_1.pub رو از account_1 حذف کنید. این راه‌حل برای موقعی که می‌خواین هر دو اکانت رو داشته باشین نمی‌تونه استفاده بشه.برای حل همیشگی این مشکل می‌تونین از کانفیگ فایل ssh استفاده کنین و سرور گیت‌هاب رو برای مثال با اسم github-work به این لیست اضافه کنین. فایل config رو باز کنین و کانفیگ زیر رو به انتهای فایل اضافه کنین:# ~/.ssh/config ... Host github-work HostName github.com User git IdentityFile ~/.ssh/key_2بعد، ترمینال رو باز کنین، برین به مسیر پروژه و دستورات زیر رو اجرا می‌کنین:git remote remove origin git remote add origin git@github-work:your_organization/your_repo.gitهمونطور که می‌بینین، به جای github.com از github-work استفاده کردیم و حالا می‌تونین بدون مشکل از گیت‌هاب استفاده کنین.پ.ن: چند روز پیش، کتاب در حال خوندن نداشتم، اینترنت نداشتم و بعد از تموم شدن ساعت کاری می‌خواستم برم خونه، وقتی صف طولانی تاکسی‌های شهران رو دیدم نمی‌دونستم چیکار کنم، تصمیم گرفتم شروع کنم به نوشتن این متن که چند وقتی بود تصمیمش رو داشتم. تمام این متن رو اون روز تو صف تاکسی و تو مسیر خونه نوشتم و تو تلگرام برای خودم فرستادم تا سر یه فرصت اینجا منتشرش کنم.