it-swarm.asia

كيفية استخدام Mac OS X Keychain مع مفاتيح SSH؟

أدرك أنه منذ Mac OS X Leopard يدعم Keychain تخزين مفاتيح SSH. هل يمكن لشخص ما أن يوضح كيف يفترض أن تعمل هذه الميزة.

لدي بعض مفاتيح RSA التي قمت بإنشائها والتي تم تخزينها في دليل ~/.ssh الخاص بي للوصول إلى خوادم متعددة. ليس لدي كلمات مرور محددة على هذه المفاتيح. حاليًا لتسجيل الدخول إلى هذه الخوادم ، استخدم الأوامر التالية في الجهاز الطرفي:

 eval `ssh-agent` 
 ssh-add ~/.ssh/some_key_rsa 
 ssh user @ server 

(لقد كتبت بعض وظائف Bash لتسهيل ذلك.)

هل هناك طريقة أفضل للقيام بذلك باستخدام Keychain؟

137
John Topley

لكي يعمل ، يجب الإشارة إلى متغير البيئة $SSH_AUTH_SOCK إلى /tmp/launch-xxxxxx/Listeners. من المفترض أن يتم ذلك تلقائيًا عند تسجيل الدخول. يتحدث المستمع على هذا المقبس عن بروتوكول وكيل ssh.

تبدأ البرامج النصية للباش الخاصة بك وكيل ssh الخاص بك (مكتوبة ssh-agent ، وليس ssh_agent) وتجاوز ssh-agent الحالي الذي تم إعداده لك عند تسجيل الدخول.

أيضًا ، الهدف من سلسلة المفاتيح هو تخزين كلمات المرور على مفاتيح ssh الخاصة بك ، لكنك تقول إنك لا تملك عبارات مرور محددة على هذه المفاتيح ، لذلك لست متأكدًا مما تتوقعه من تكامل keychain.

أخيرًا ، عند تسجيل الدخول لأول مرة ، ربما لن ترى عملية وكيل ssh. سيتم بدء هذه العملية تلقائيًا عن طريق تشغيل الخدمات في المرة الأولى التي يحاول فيها شيء قراءة هذا المقبس في /tmp.

16
Rudedog

اعتبارًا من إصدار Leopard لنظام التشغيل X ، تم دمج ssh-agent بإحكام مع Keychain. من الممكن تخزين عبارات المرور الخاصة بكل مفاتيح SSH الخاصة بك بشكل آمن في Keychain ، حيث يقوم ssh-agent بقراءتها عند بدء التشغيل. خلاصة القول هي أنه من السهل تأمين المفاتيح الخاصة بك مع عبارات المرور ، ولكن لا تضطر أبدا إلى كتابة عبارة المرور لاستخدامها! هنا هو كيف:

أضف عبارة المرور إلى كل مفتاح ssh إلى keychain: (الخيار -k يقوم بتحميل مفاتيح خاصة عادية فقط ، يتخطى الشهادات)

ssh-add -K [path/to/private SSH key]

(لاحظ أنها عاصمة K)

عند إعادة تشغيل جهاز Mac الخاص بك ، سيتم تلقائيًا تحميل جميع مفاتيح SSH الموجودة في سلسلة المفاتيح. يجب أن تكون قادرًا على رؤية المفاتيح في تطبيق Keychain Access ، وكذلك من سطر الأوامر عبر:

ssh-add -l
252
jeffmcc

اعتبارًا من macOS Sierra ، لم يعد {ssh-agent يقوم تلقائيًا بتحميل مفاتيح ssh التي تم تحميلها مسبقًا عند تسجيل الدخول إلى حسابك. هذا عن قصد من جانب Apple ، أرادوا إعادة المحاذاة مع التطبيق الرئيسي OpenSSH. [1]


كما هو موضح هنا ، هذه هي الطريقة الموصى بها منذ macOS 10.12.2:

  1. أضف الأسطر التالية إلى ملف ~/.ssh/config الخاص بك:

    Host *
        UseKeychain yes
        AddKeysToAgent yes
    
  2. سيتم إضافة أي مفتاح تضيفه إلى ssh-agent باستخدام الأمر ssh-add /path/to/your/private/key/id_rsa تلقائيًا إلى keychain ، ويجب إعادة تحميله تلقائيًا عند إعادة التشغيل.


تم إهمال ما يلي (أبقى للرجوع إليه).

للرجوع إلى السلوك السابق ، تريد تشغيل الأمر ssh-add -A (الذي يقوم تلقائيًا بتحميل جميع مفاتيح ssh التي تحتوي على عبارات مرور على سلسلة المفاتيح الخاصة بك) عند تسجيل الدخول. للقيام بذلك ، اتبع الخطوات التالية:

  1. أولاً ، أضف كل المفاتيح التي تريد تحميلها تلقائيًا إلى ssh-agent باستخدام الأمر ssh-add -K /absolute/path/to/your/private/key/id_rsa. تضمن وسيطة -K إضافة عبارة المرور الرئيسية إلى keychain's macOS. تأكد من استخدام المسار المطلق للمفتاح. سيؤدي استخدام مسار نسبي إلى جعل البرنامج النصي الذي يتم تشغيله تلقائيًا لا يجد مفتاحك.

  2. تأكد من أن جميع مفاتيحك تظهر كإضافة عند كتابة ssh-add -A.

  3. قم بإنشاء ملف يسمى com.yourusername.ssh-add.plist في ~/Library/LaunchAgents/ مع المحتويات أدناه. Plist files مثل هذا واحد يتم استخدامه بواسطة launchd لتشغيل البرامج النصية عند تسجيل الدخول. [2][3]

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.Apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
    <key>Label</key>
      <string>com.user.loginscript</string>
    <key>ProgramArguments</key>
      <array>
        <string>ssh-add</string>
        <string>-A</string>
      </array>
    <key>RunAtLoad</key>
      <true/>
    </dict>
    </plist>
    
  4. قل launchd لتحميل ملف plist الذي أنشأته للتو من خلال التنفيذ: launchctl load ~/Library/LaunchAgents/com.yourusername.ssh-add.plist.

ويجب أن تكون كل مجموعة.

76
Ricardo Sanchez-Saez

هناك طريقة أبسط من إجابة ريكاردو لاستمرار كلمة المرور بين الدورات/إعادة تشغيل جهاز Mac الذي يعمل بنظام التشغيل 10.12 Sierra.

  1. ssh-add -K ~/.ssh/id_rsa
    ملاحظة: غيّر المسار إلى موقع مفتاح id_rsa الخاص بك.
  2. ssh-add -A
  3. قم بإنشاء (أو تحريره إن وجد) الملف ~/.ssh/config التالي:

    Host *
      UseKeychain yes
      AddKeysToAgent yes
      IdentityFile ~/.ssh/id_rsa
    

    الآن يتم تذكر كلمة المرور بين إعادة التشغيل!

غيرت Apple عن قصد سلوك وكيل ssh في نظام التشغيل macOS 10.12 Sierra ، حيث لم تعد تقوم تلقائيًا بتحميل مفاتيح SSH السابقة ، كما هو موضح في هذا OpenRadar و Twitter Twitter و ملاحظة فنية من Apple . الحل أعلاه سيحاكي السلوك القديم لـ El Capitan ويتذكر كلمة المرور الخاصة بك.

32
ChrisJF

ملاحظة: بالنسبة لنظام التشغيل MacOS Sierra ، يرجى الرجوع إلى الإجابة الأكثر حداثة من ChrisJF .

إن [إجابة Jeff McCarrell] [2] صحيحة ، فيما عدا أن الأمر الخاص بإضافة عبارة المرور يحتوي على شرطة en بدلاً من واصلة ، على سبيل المثال –K بدلاً من -K ، مما تسبب في ظهور رسالة إلى تأثير –K: No such file or directory. يجب قراءة:

ssh-add -K [path/to/private SSH key]
9
simonair

أظن أنك لا تستخدم الأمر الافتراضي ssh. هل لديك ssh مثبتة عبر المنافذ؟ جرب which ssh لمعرفة أي أمر ssh تستخدمه.

عادةً ما يجب أن يعرض مربع حوار يسألك عن كلمة المرور ، إذا لم يكن مخزّنًا بالفعل في سلسلة المفاتيح.

6
Olly

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

  • تم حفظ المفتاح في ~/.ssh/
  • يحتوي المفتاح الخاص على عبارة مرور.
  • يتم تخزين عبارة المرور في سلسلة مفاتيح تسجيل الدخول OS X. ~/Library/Keychains/login.keychain
  • كان الاتصال كالتالي: my mac -> remote mac -> git/ssh server
  • نظام التشغيل Mac OS X 10.8.5

عند الاتصال بجهاز mac عن بُعد باستخدام سطح المكتب البعيد ، لم أواجه مشكلة. ومع ذلك ، عند الاتصال بـ SSH بجهاز التحكم عن بُعد الخاص بـ mac ، تم سؤالك عن عبارة مرور ssh في كل مرة. الخطوات التالية حلها بالنسبة لي.

  1. security unlock-keychain يتم تخزين عبارة المرور في سلسلة مفاتيح تسجيل الدخول. هذا يفتحها ويمكّن وكيل ssh من الوصول إليها.
  2. eval `ssh-agent -s` يبدأ وكيل ssh لاستخدام Shell. سوف تحصل على عبارة المرور من keychain واستخدامها لإلغاء قفل مفتاح ssh الخاص.
  3. تأسيس اتصال ssh/git والقيام بعملي.
  4. eval `ssh-agent -k` اقتل وكيل ssh الجاري.
  5. security lock-keychain قفل المفاتيح مرة أخرى.
6
orkoden

أنظر أيضا:

security import priv_key.p12 -k ~/Library/Keychains/login.keychain
security import pub_key.pem -k ~/Library/Keychains/login.keychain

... إضافة هذه الملاحظة حيث تم طلب مزيد من التفاصيل: يمكن للأمر "security" استيراد المفاتيح (وأشياء أخرى) مباشرةً إلى Keychains. الشيء الجميل هو أنه على عكس ssh-add ، يمكنك تحديد سلسلة المفاتيح. هذا يجعل من الممكن الاستيراد مباشرة إلى نظام Keychain ("أمن الرجل" لمعرفة كيف)

4
xaphod

الحل الأفضل المقصود من Apple (منذ نظام التشغيل MacOS 10.12.2) يتم وصفه هنا

لذلك فقط قم بما يلي:

صدى "UseKeychain نعم" >> ~/.ssh/config

1
Ben