freeCodeCamp/guide/arabic/ssh/managing-multiple-ssh-keys/index.md

13 KiB

title localeTitle
Managing multiple SSH keys إدارة عدة مفاتيح SSH

إدارة عدة مفاتيح SSH

من الأسلم أن نقول أن معظم المطورين في مجال الويب لديهم في وقت ما مشكلة SSH. يعد SSH أحد البروتوكولات الأكثر استخدامًا لتبادل البيانات بأمان. تستخدم SSH للتوصيل بالخوادم البعيدة ، والتي تتضمن أيضًا إدارة شفرتك باستخدام git والمزامنة مع المستودعات عن بُعد.

على الرغم من أنه من الممارسات الجيدة أن يكون لديك زوج مفاتيح خاص عام لكل جهاز ، فأحيانًا ما تحتاج إلى استخدام مفاتيح متعددة و / أو لديك أسماء مفاتيح غير تقليدية. قد تستخدم زوجًا رئيسيًا من مفاتيح SSH للعمل في المشروعات الداخلية لشركتك ولكنك قد تستخدم مفتاحًا مختلفًا للوصول إلى بعض خوادم عملاء الشركة. قد تكون حتى تستخدم مفتاحًا مختلفًا للوصول إلى خادمك الخاص.

يمكن أن تصبح إدارة مفاتيح SSH مرهقة بمجرد أن تحتاج إلى استخدام مفتاح ثانٍ. آمل أن تكون هذه المقالة مفيدة لأي شخص لديه مشاكل مع إدارة مفتاح SSH.

وأفترض أن القارئ لديه معرفة أساسية من بوابة و SSH. معظم الأمثلة في جميع أنحاء المقال سوف تستخدم بوابة. بالطبع ، كل هذا سوف ينطبق على أي اتصال SSH آخر. يقال ، هناك بعض الخدع git- محددة المدرجة.

حزام في ، هنا نذهب!

الوضع الراهن

أولاً ، لنرى كيف سيبدو سير عملك قبل وجود عدة مفاتيح للقلق.

لديك مفتاح خاص واحد مخزن في ~/.ssh/id_rsa مع مفتاح عام مناظرة ~/.ssh/id_rsa.pub .

دعونا نتخيل أنك تريد دفع / سحب تغييرات الكود إلى / من خادم git بعيد؛ قل GitHub ، whynot. للقيام بذلك ، يجب عليك أولاً إضافة مفتاحك العام إلى GitHub. لن أتجاوز هذه الخطوة ، يجب أن يكون من السهل معرفة كيفية القيام بذلك. لقد افترضت أيضًا أن اسمك هو Steve وأنك تعمل في مشروع شديد السرية يستخدم فطائر Raspberry Pies للحصول على حركة مرور الشبكة.

لبدء عملك ، عليك استنساخ مستودع git باستخدام SSH:

git clone git@github.com:steve/raspberry-spy.git

في هذه اللحظة ، سيكون GitHub مثل: "Yo ، هذا مستودع خاص! نحن بحاجة إلى تشفير حركة المرور باستخدام هذا المفتاح العام الذي أمتلكه هنا ومفتاحك الخاص"

لقد قمت بإضافة المفتاح العام إلى ملف التعريف الخاص بك على GitHub ، ولكن SSH لديه بطريقة أو بأخرى معرفة أين يوجد المفتاح الخاص المقابل الخاص بك. نظرًا لأننا لا نملك أي فكرة عن المفتاح الخاص الذي يجب استخدامه عند استخدام SSH في git@github.com ، يحاول عميل SSH العثور على مفتاح في الموقع الافتراضي ، وهو ~/.ssh/id_rsa - إنه أفضل تخمين له. إذا لم يكن هناك ملف في هذا الموقع ، فستتلقى خطأً:

Cloning into 'raspberry-spy'...
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

إذا كان لديك بعض المفاتيح الخاصة المخزنة في الملف ~/.ssh/id_rsa ، ~/.ssh/id_rsa عميل SSH هذا المفتاح الخاص لتشفير الاتصالات. إذا كان هذا المفتاح مرتبطًا بكلمة مرور (كما ينبغي أن يكون) ، فستتم مطالبتك بكلمة مرور ، مثل:

Enter passphrase for key '/Users/steve/.ssh/id_rsa':

إذا أدخلت عبارة المرور الصحيحة وإذا كان هذا المفتاح الخاص هو بالفعل المفتاح الذي يتوافق مع المفتاح العام الذي أرفقته بملفك الشخصي ، فسيتم سداد كل شيء بشكل جيد وسيتم استنساخ المستودع بنجاح.

ولكن ماذا لو قمت بتسمية المفتاح الخاص بك بشكل مختلف (على سبيل المثال. ~/.ssh/_id_rsa )؟ لن يتمكن عميل SSH من تحديد مكان تخزين المفتاح الخاص. ستحصل على نفس Permission denied ... خطأ كما كان من قبل.

إذا كنت تريد استخدام مفتاح خاص سميته بشكل مختلف ، فيجب عليك إضافته يدويًا:

ssh-add ~/.ssh/_id_rsa

بعد إدخال عبارة المرور ، يمكنك التحقق مما إذا كان المفتاح قد تمت إضافته إلى ssh-agent (عميل SSH) عن طريق تنفيذ ssh-add -l . يقوم هذا الأمر بإدراج جميع المفاتيح المتوفرة حاليًا لعميل SSH.

إذا حاولت استنساخ المستودع الآن ، فستكون ناجحة.

حتى الان جيدة جدا؟

إذا كنت مهتمًا ، فقد تبدأ في ملاحظة بعض المشكلات المحتملة.

أولا ، إذا قمت بإعادة تشغيل جهاز الكمبيوتر الخاص بك ، سيتم إعادة تشغيل ssh-agent إلى إضافة مفاتيحك التي لا تحمل الاسم الافتراضي باستخدام ssh-add جديد ، وكتابة كلمات المرور وكل تلك الأشياء الشاقة.

يمكننا أتمتة إضافة مفاتيح أو بطريقة ما تحديد أي مفتاح لاستخدامه عند الوصول إلى خوادم معينة؟

هل يمكننا حفظ كلمات المرور بطريقة أو بأخرى حتى لا نضطر إلى كتابتها في كل مرة؟ إذا كان هناك فقط شيء مثل سلسلة المفاتيح لحفظ مفاتيح SSH المحمية بكلمة مرور.

كن مطمئنا ، هناك إجابات لجميع هذه الأسئلة.

أدخل ، SSH config

كما تبين ، فإن ملف إعدادات SSH شيء ، الشيء الذي يمكن أن يساعدنا. إنه ملف تهيئة لكل مستخدم لاتصال SSH. إنشاء ملف جديد: ~/.ssh/config وفتحه للتحرير.

إدارة مفاتيح SSH المسمى عليها

أول شيء سنقوم بحله باستخدام ملف config هذا هو تجنب الاضطرار إلى إضافة مفاتيح SSH ذات اسم مخصص باستخدام ssh-add . بفرض افتراض أن مفتاح SSH الخاص بك هو ~/.ssh/_id_rsa ، أضف المتابعة إلى ملف config :

Host github.com
  HostName github.com
  User git
  IdentityFile ~/.ssh/_id_rsa
  IdentitiesOnly yes

الآن تأكد من أن ~/.ssh/_id_rsa ليس في ssh-agent بتنفيذ ssh-add -D . سيؤدي هذا الأمر إلى إزالة كافة المفاتيح من جلسة عمل ssh-agent النشطة حاليًا. يتم إعادة ضبط الجلسة في كل مرة تقوم فيها بتسجيل الخروج أو إعادة التشغيل (أو إذا قمت بقتل عملية ssh-agent يدوياً). يمكننا "محاكاة" إعادة التشغيل عن طريق تنفيذ الأمر المذكور.

إذا حاولت استنساخ مستودع GitHub الخاص بك الآن ، فسيكون ذلك كما لو قمنا بإضافة المفتاح يدويًا (كما فعلنا من قبل). سيُطلب منك كلمة المرور:

git clone git@github.com:steve/raspberry-spy.git
Cloning into 'raspberry-spy'...
Enter passphrase for key '/Users/steve/.ssh/_id_rsa':

ستلاحظ أن المفتاح الذي نطالب بكلمة المرور الخاصة به هو نفس المفتاح الذي حددناه في ملف config بنا. بعد إدخال كلمة مرور مفتاح SSH الصحيحة ، سيتم استنساخ المستودع بنجاح.

ملاحظة: إذا حاولت ، بعد الاستنساخ الناجح ، git pull ، فستتم مطالبتك بكلمة المرور مرة أخرى. سنحل ذلك لاحقا.

من المهم أن Host github.com من config و github.com من URI git@github.com:steve/raspberry-spy.git المباراة. يمكنك أيضا تغيير config لتكون Host mygithub واستنساخ باستخدام URI git@mygithub:steve/raspberry-spy.git .

هذا يفتح البوابات. عندما تقوم بإعادة هذا ، فإن ذهنك يتسابق ويفكر في كيفية انتهاء كل مشاكلك مع مفاتيح SSH. فيما يلي بعض أمثلة التكوين المفيدة:

Host bitbucket-corporate
        HostName bitbucket.org
        User git
        IdentityFile ~/.ssh/id_rsa_corp
        IdentitiesOnly yes

الآن يمكنك استخدام git clone git@bitbucket-corporate:company/project.git

Host bitbucket-personal
        HostName bitbucket.org
        User git
        IdentityFile ~/.ssh/id_rsa_personal
        IdentitiesOnly yes

الآن يمكنك استخدام git clone git@bitbucket-personal:steve/other-pi-project.git

Host myserver
        HostName ssh.steve.com
        Port 1111
        IdentityFile ~/.ssh/id_rsa_personal
        IdentitiesOnly yes
        User steve
        IdentitiesOnly yes

الآن يمكنك SSH في الخادم الخاص بك باستخدام ssh myserver . كم ذلك رائع؟ لا تحتاج إلى إدخال المنفذ واسم المستخدم يدويًا في كل مرة تقوم فيها بتنفيذ الأمر ssh .

مكافأة: في إعدادات المستودع

يمكنك أيضًا تحديد المفتاح المحدد الذي يجب استخدامه لمخزون معين ، وتجاوز أي شيء في config SSH. يمكن تحديد أمر SSH محدد عن طريق تعيين sshCommand تحت core في <project>/.git/config . مثال:

[core]
        sshCommand = ssh -i ~/.ssh/id_rsa_corp

هذا ممكن مع git 2.10 أو في وقت لاحق. يمكنك أيضًا استخدام هذا الأمر لتجنب تعديل الملف يدويًا:

git config core.sshCommand 'ssh -i ~/.ssh/id_rsa_corp'

إدارة كلمة المرور

آخر جزء من اللغز هو إدارة كلمات المرور. نريد تجنب إدخال كلمة المرور في كل مرة يبدأ فيها اتصال SSH. للقيام بذلك ، يمكننا الاستفادة من برامج إدارة المفاتيح التي تأتي مع MacOS وتوزيعات Linux المختلفة.

ابدأ بإضافة مفتاحك إلى keychain عبر تمرير الخيار -K إلى الأمر ssh-add :

ssh-add -K ~/.ssh/id_rsa_whatever

يمكنك الآن رؤية مفتاح SSH في keychain. على MacOS ، يبدو الأمر كالتالي: Keychain Access

إذا قمت بإزالة المفاتيح من ssh-agent عبر ssh-add -D (سيحدث ذلك عند إعادة تشغيل الكمبيوتر ، كما ذكر من قبل) ومحاولة SSH-ing ، ستتم مطالبتك بكلمة المرور مرة أخرى. لماذا ا؟ لقد أضفنا للتو مفتاح سلسلة المفاتيح. إذا قمت بفحص Keychain Access مرة أخرى ، فسوف تلاحظ أن المفتاح الذي أضفته باستخدام ssh-add -K لا يزال موجودًا في keychain. غريب ، هاه؟

اتضح أن هناك طارة واحدة أكثر من القفز. افتح ملف SSH config الخاص بك وقم بإضافة ما يلي:

Host *
  AddKeysToAgent yes
  UseKeychain yes

الآن ، سوف تبحث SSH عن المفتاح في keychain وإذا وجدت أنه لن تتم مطالبتك بكلمة المرور. مفتاح سيضاف أيضا إلى ssh-agent . على MacOS ، سيعمل هذا على MacOS Sierra 10.12.2 أو ما بعده. في Linux ، يمكنك استخدام شيء ما مثل gnome-keyring وقد يعمل حتى بدون إجراء هذا التعديل الأخير على config SSH. أما بالنسبة لنظام التشغيل Windows - من يدري ، أليس كذلك؟

آمل أن يكون أحدهم قد وجد هذا مفيدًا. الآن اذهب وتكوين ملف SSH config الخاص بك!