اخیرا برای انجام یکی از پروژههایی که همکاری داشتم لازم بود که با یک اکانت دیگه غیر از اکانت ایران وصل بشم و فایلهای پروژه رو با اکانت شرکتی بفرستم بر روی گیتهاب ولی مشکلی که وجود داشت این بود که اکانت شخصیم هم لازم داشتم و نمیشد از یک ssh key برای هر دو اکانت استفاده کنم. برای اینکار برای هر کدام از اکانتها ssh key اختصاصی خودش رو ایجاد کردم.
ایجاد چندین SSH KEY
قبلا در مقاله “آرشیو دستورات گیت” در رابطه با نحوه ایجاد ssh key صحبت کردم، همانطور که میدانید فایل ssh key در سیستم مکینتاش در مسیر زیر تشکیل میشود.
~/.ssh/
حالا که وارد این مسیر شدیم فایل جدید ssh key ایجاد میکنیم.
ssh-keygen -t rsa -b 4096 -C "your-email"
وقتی کد فوق را وارد کردیم چند دستور از ما پرسیده میشود که لازم است نام فایل را تغییر دهیم.
بعد از اینکه فایل جدید را ایجاد کردیم با دستور زیر آن را برای سیستم تعریف میکنیم.
ssh-add id_rsa_personal
که بعد از وارد کردن آن باید نتیجه مشابه زیر را مشاهده کنیم.
ایجاد فایل config برای map کردن ssh key
بعد از انجام مراحل فوق باید فایل کانفیگ را ایجاد کنیم و مشخص کنیم هر کدام از ssh key ها به چه Hostی اشاره میکنند. برای اینکار در کنار فایلهای ssh key ایجاد شده یک فایل config ایجاد میکنیم. (یعنی در مسیر ~/.ssh/ )
touch config
در صورتیکه VS Code را بر روی سیستم خود دارید با اجرای دستور زیر فایل config که ایجاد کرده اید را باز کنید تا ویرایش را بر روی آن انجام دهید.
code config
من برای ssh key هایی که دارم ۲ تا ssh key یکی برای کارهای شخصیم و یکی برای شرکتی که باهاشون کار میکنم ایجاد کردم به نام های personal و company که بر اساس این نام ها تنظیمات زیر را انجام میدهم.
HOST github.com-personal
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_personal
HOST github.com-companyName
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_companyName
حالا برای Repositoryهای شخصی وارد مسیر پروژه میشوم و دستور code .git را وارد میکنم تا فایل config گیت را بتوانم ویرایش کنم. به remot origin کافی است نام personal را اضافه کنیم تا از ssh key مربوطه استفاده کند.
[remote "origin"]
url = git@github.com-personal:ACCOUNT_NAME/YOUR-REPOSITORY.git
[user]
email = Your Email
name = Your Name
من شخصا برای Repositoryهای شرکتی تست کردم لازم نیست هیچ تغییری ایجاد کنیم کافی است نام شرکت را درست وارد کرده باشیم.
[remote "origin"]
url = https://github.com/COMPANY-NAME/project.git
[user]
email = Your Email
name = Your Name
اما برای اطمینان و نظم کارتون پیشنهاد میکنم به صورت زیر تغییرات را اعمال کنید.
# Before
$ git clone git@github.com:work/repository.git
# After
$ git clone git@github.com-companyName:work/repository.git
نکته: دقت کنید که برای هر پروژه چونکه از اکانتهای مختلف استفاده میکنید با استفاده از دستور زیر حتما نام و ایمیل خود را برای پروژه مشخص کنید که گیت با نام موردنظرتان تغییرات شما را آپلود کند.
git config user.name "Work Account"
git config user.email "work@email.com"
حالا میتوانید برای اکانتهای مختلف در gitlab و bitbucket هم ssh keyهای مجزا تعریف کرد.
مطالعه بیشتر:
شاد و موفق باشید.