سؤال استخدام عدة مفاتيح SSH العامة


لدي حساب شخصي وحساب شركة على Unfuddle. لا يمكن استخدام مفاتيح SSH الموجودة على حساب واحد فقط ، لذلك أحتاج إلى إنشاء مفتاح SSH منفصل على الكمبيوتر المحمول الخاص بي لكل من الحسابين. ركضت ssh-keygen -t rsa لإنشاء مفتاحين بأسماء مختلفة (الاسم الشخصي هو الاسم الافتراضي والشركة هي {company} _rsa). المشكلة الآن هي أنه يبدو أن المفتاح الافتراضي يستخدم في كل مكان ولا يمكنني معرفة كيفية تحديد مفتاح لاستخدامه في Git لعمليات إعادة الشراء الفردية.

إذن ، سؤالي هو: كيف يمكنني تحديد مفتاح SSH لاستخدامه على أساس إعادة الشراء؟

أقوم بإعداد ssh_config الخاص بي (~ / .ssh / config) ولكن لا يبدو أنه يعمل.

التكوين:

Host {personalaccount}.unfuddle.com
     HostName {personalaccount}.unfuddle.com
     User git
     IdentityFile /Users/dave/.ssh/id_rsa

Host {companyaccount}.unfuddle.com
     HostName {companyaccount}.unfuddle.com
     User git
     IdentityFile /Users/dave/.ssh/cage_rsa

ملف تهيئة Git Repo الخاص بي ل repo على حساب الشركة غير المنضبطة يبدو كالتالي:

[remote "origin"]
     url = git@{companyaccount}.unfuddle.com:{companyaccount}/overall.git
     fetch = +refs/heads/*:refs/remotes/origin/*

لذلك أنا لست متأكدا مما إذا كان هناك شيء خاطئ في تهيئة ssh أو تهيئة git الخاصة بي.


94
2018-04-18 13:26


الأصل


يبدو التكوين ssh الخاص بك صحيحًا ، فأنا أستخدم تهيئة مشابهة. - Paŭlo Ebermann


الأجوبة:


إذا كان لديك نشط سه وكيل التي لديك id_rsa مفتاح تحميل ، ثم من المرجح أن المشكلة سه تقدم هذا المفتاح أولاً. قد لا يقبل ذلك على الأرجح بالمصادقة (على سبيل المثال في سشد) ولكنه يرفضه للحصول على إذن للوصول إلى مستودعات الشركة (على سبيل المثال ، في أي برنامج داخلي يستخدمونه للحصول على إذن ، وربما شيء يشبه Gitolite). ربما توجد طريقة لإضافة مفتاحك الشخصي لحساب الشركة (لا يشارك عدة أشخاص نفس الشيء corp_rsa الملفات الرئيسية الخاصة والعامة ، هل هم؟).


ال IdentitiesOnly  .ssh/config كلمة التهيئة يمكن استخدامها للحد من المفاتيح التي سه يقدم إلى جهاز التحكم عن بعد سشد فقط لتلك المحددة عن طريق IdentityFile الكلمات الرئيسية (بمعنى أنها سترفض استخدام أي مفاتيح إضافية يتم تحميلها إلى نشطة سه وكيل).

جرب هذا .ssh/config أقسام:

Host {personalaccount}.unfuddle.com
     IdentityFile ~/.ssh/id_rsa
     IdentitiesOnly yes

Host {companyaccount}.unfuddle.com
     IdentityFile ~/.ssh/{companyaccount}_rsa
     IdentitiesOnly yes

ثم استخدم عناوين Git URL مثل هذه:

git@{personalaccount}.unfuddle.com:{personalaccount}/my-stuff.git
git@{companyaccount}.unfuddle.com:{companyaccount}/their-stuff.git

إذا كنت ترغب في الاستفادة الكاملة من .ssh/config آلية ، يمكنك توفير اسم المضيف المخصص الخاص بك وتغيير اسم المستخدم الافتراضي:

Host uf-mine
     HostName {personalaccount}.unfuddle.com
     User git
     IdentityFile ~/.ssh/id_rsa
     IdentitiesOnly yes

Host uf-comp
     HostName {companyaccount}.unfuddle.com
     User git
     IdentityFile ~/.ssh/{companyaccount}_rsa
     IdentitiesOnly yes

ثم استخدم عناوين Git URL مثل هذه:

uf-mine:{personalaccount}/my-stuff.git
uf-comp:{companyaccount}/their-stuff.git

108
2018-04-19 03:21



إذا كان لديك حسابات متعددة على نفس المجال الفرعي Unfuddle (مع مفاتيح SSH مختلفة) ، فستحتاج إلى استخدام الطريقة الثانية. - leolobato
الهويات كان من الضروري بالنسبة لي في إعداد gitolite بلدي ، وذلك بفضل! - Koen.
رائع هذا بإصلاح المشكلة التي يتم إرسالها جميع مفاتيحي إلى جيثب. ومع ذلك ، في OS X ، يجب علي كتابة عبارة المرور في كل مرة. هل هناك طريقة لقول فقط استخدام المفتاح المحدد في التكوين ولكن الاستمرار في استخدام وكيل ssh؟ - Drew
Drew: إذا تم تحميل المفتاح بالفعل في الوكيل ، فلا يزال يتعين على الأمر سحبه من الوكيل. هل أنت متأكد من تحميل مفتاحك مسبقًا؟ تحقق مع ssh-add -l قبل استخدام اسم مضيف Git الخاص بك. كما يجب أن يكون ملف المفتاح العام موجودًا سه يمكن التعرف على مفتاح ذلك سه وكيل هو تخزين. يمكنك تجديد ضائع .pub ملف بأمر مثل ssh-keygen -f blah -y > blah.pub. - Chris Johnsen
نعم هناك. عندما أزلت مكالمة IdentityOnly ، فإنه يرسل github 4 مفاتيح مختلفة (بما في ذلك واحد صحيح w / o طلب عبارة المرور). عندما أقوم بإضافة المكالمة ، يرسل فقط مفتاح واحد ولكنه يطلب عبارة المرور في كل مرة. حتى عندما أخبر OSX بتخزين قيمة عبارة المرور في keychain الخاص بها. - Drew


man ssh_config

شيء مثل

Host personal_repo
  User personal
  IdentityFile .ssh/personal_rsa

Host company_repo
  User company
  IdentityFile .ssh/company_rsa

واستخدامها personal_repo كمضيف في git repo الخاص بك.


3
2018-04-18 14:05



Tass ، هل يمكنك مراجعة التغييرات التي أجريتها أعلاه؟ لقد أضفت ssh_config و git config.
Host هو مجرد معرف - لا حاجة لاسم النطاق الكامل. هذا ربما يخلق بعض الأخطاء الخفية. إذا قمت بتغيير ذلك ، لن تحتاج إلى تهجئة الاسم الكامل في git config الخاص بك.
لـ gitious و user = git و host gitorious.org: على سبيل المثال ، git@gitorious.org: ~ revelut / qt / bruce-sandbox-qt.git كيف تتطابق في المضيف الخاص بك جزء من عنوان url؟ (عادة ما يكون ذلك مثالياً بالنسبة لي)
Tass إذا أعطيت الاسم company_unfuddle إلى تهيئة SSH ، فهل يجب أن يكون عنوان URL الخاص بي git @ company_unfuddle: {company} /overall.git؟ Bruce - لست متأكدًا مما تطلبه. هل يمكنك التوسع أكثر قليلا؟


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

لقد بدأت مؤخرًا في استخدام:

https://github.com/ccontavalli/ssh-ident

إنه غلاف حول ssh ، فإنه:

  • يحتفظ بعامل منفصل تمامًا لكل هوية تحددها.
  • تشارك الوكلاء تلقائيًا عبر جلسات تسجيل الدخول ، وليس هناك ما تفعله في .bashrc.
  • يقوم بتحميل الوكيل والمفاتيح المقابلة عند الطلب في أول مرة تحتاج إليها.
  • يحدد العامل الذي سيتم استخدامه إما على أساس سطر أوامر ssh (اسم المضيف & مثل) أو دليل العمل الحالي. هذا مفيد بشكل خاص لأنني أميل إلى العمل من مسارات مختلفة اعتمادًا على ما أقوم به.

3
2018-03-15 04:20