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


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

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

eval `ssh-agent`
ssh-add ~ / .ssh / some_key_rsa
مستخدم سه @ الخادم

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

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


133
2017-12-28 12:08


الأصل




الأجوبة:


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

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

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

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


16
2017-12-28 17:37



شكر. لذلك لا يزال يتعين علي الركض ssh-add لإضافة هويتي RSA إلى وكيل إس إتش الافتراضية بدأت عند تسجيل الدخول؟ - John Topley
ليس عليك تشغيل ssh-add؛ سيطلب ssh-agent عبارة المرور الرئيسية في المرة الأولى التي تقوم فيها بتشغيل ssh. - Rudedog
إنه يطلب مني كلمة المرور في كل مرة أقوم بتشغيل ssh. الهدف هو أنني لا أريد إدخال أي كلمات مرور. - John Topley
ما الذي يطالبك بكلمة المرور؟ بدأت أشك في أنه الخادم البعيد الذي يطلب منك ، مما يضع بيانك بأن مفاتيحك لا تحتوي على عبارات مرور في منظور أفضل. إذا كنت ترغب في تجاوز كلمة المرور على الخادم البعيد ، فستحتاج إلى إضافة مفتاحك العام إلى $HOME/.ssh/authorized_keys على هذا الخادم. يستخدم Mac OS 'ssh-agent + keychain فقط لتخزين عبارة المرور لمفاتيح ssh المحلية الخاصة بك ؛ لا يُقصد به إرسال كلمات المرور عن بعد عبر اتصالات ssh الموجودة. - Rudedog
استعمال ssh -v لتشخيص ما يفعله ssh. أيضا استخدام sshd -p 8900 -v على جانب الخادم و ssh -v remote:8900 لتشخيص ما يفعله sshd. - Rudedog


اعتبارًا من إصدار Leopard لنظام التشغيل OS 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

245
2018-04-11 19:58



يجب أن يكون هذا هو الجواب المقبول. - Kris
الإجابة المقبولة تجيب عن سؤال هذا المستخدم المحدد ، ولكن هذا يجيب على سؤال المستخدم العام - eqzx
developer.apple.com/library/mac/documentation/Darwin/Reference/...  تحتاج أيضا -K الخيار لتخزين passphrases في سلسلة المفاتيح. - Neeme Praks
إذا قمت بتثبيت إصدار آخر من SSH من خلال نظام حزم مثل Homebrew ، فمن الضروري استخدام مسار مطلق مثل /usr/bin/ssh-add. - Ludovic Kuty
ل macOS سييرا ، تغيرت الأمور. نرى github.com/jirsbek/SSH-keys-in-macOS-Sierra-keychain - schieferstapel


اعتبارا من ماكوس سييرا، سه وكيل لم تعد تحمّل تلقائيًا مفاتيح ssh التي تم تحميلها مسبقًا عند تسجيل الدخول إلى حسابك. هذا هو المقصود على جزء أبل ، أرادوا إعادة محاذاة مع التيار الرئيسي المفتوح التنفيذ. [1]


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

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

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


ما يلي هو موقوف (للاحتفاظ بها كمرجع).

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

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

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

  3. قم بإنشاء ملف يسمى com.yourusername.ssh-add.plist في ~/Library/LaunchAgents/ مع محتويات أدناه. ملفات Plist مثل هذا واحد تستخدم من قبل 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.

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


73
2017-12-12 18:17



ذات صلة: apple.stackexchange.com/questions/48502/... - slm


هناك طريقة أبسط من جواب ريكاردو لإبقاء كلمة المرور الخاصة بك بين الجلسات / إعادة تشغيل جهاز 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
    

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

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


29
2018-01-05 18:53



رائع ، يعمل مثل السحر ، imho الكثير أنظف ثم الآخرين وحلها في المكان الصحيح :) - GerardJP


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

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

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

9
2018-04-28 13:28



يجب أن يكون هذا تعليقًا على الإجابة التي تشير إليها بدلاً من الإجابة الجديدة. نحن نتحدث عن الأمن هنا. يمكن للمرء أن يقترح عليك أن تكتبه بعناية بدلاً من النسخ واللصق بشكل أعمى ssh-add -K - Phil_1984_
باستخدام واصلة مع K ، أحصل illegal option -- K. يتم إدراج الحرف الصغير k كخيار. - Sam Dutton
شكرا على ملاحظاتك. لقد راجعت فقط على نظام MacOS Sierra: -K، أي ، dash-capital-K ، لا يزال صالحًا - simonair


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

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


6
2017-12-28 12:55



أنا لا أستخدم المنافذ. - John Topley
شكرا للمعلومات :) لقد واجهت مشاكل لأنني كنت تستخدم OpenSSH من البيرة. - ggustafsson


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

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

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

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

6
2017-10-14 12:29



من أجل # 2 للعمل بالنسبة لي ضمن اسم مستعار ، كان علي أن استخدم eval \$(ssh-agent) لكل إعادة: تسجيل الدخول عن بعد وسلسلة المفاتيح. عندما لا تكون ضمن اسم مستعار eval $(ssh-agent) يعمل (بدون الخط المائل العكسي). - Travis


أنظر أيضا:

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

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


4
2018-03-26 09:45



هل يمكنك إعطاء بعض التفاصيل لهذه الإجابة من فضلك؟ شكر. - Matthew Williams