it-swarm.asia

أفضل طريقة لاستخدام مفاتيح SSH الخاصة المتعددة على عميل واحد

أريد استخدام مفاتيح خاصة متعددة للاتصال بخوادم مختلفة أو أجزاء مختلفة من نفس الخادم (استخداماتي هي إدارة نظام الخادم وإدارة Git واستخدام Git العادي داخل نفس الخادم). حاولت ببساطة تكديس المفاتيح في ملفات id_rsa دون جدوى.

يبدو أن الطريقة المباشرة للقيام بذلك هي استخدام الأمر

ssh -i <key location> [email protected] 

هذا مرهق للغاية.

أي اقتراحات بشأن كيفية القيام بذلك أسهل قليلا؟

762
Justin

من .ssh/config:

Host myshortname realname.example.com
    HostName realname.example.com
    IdentityFile ~/.ssh/realname_rsa # private key for realname
    User remoteusername

Host myother realname2.example.org
    HostName realname2.example.org
    IdentityFile ~/.ssh/realname2_rsa  # different private key for realname2
    User remoteusername

وما إلى ذلك وهلم جرا.

1097
Randal Schwartz

يمكنك إرشاد ssh لتجربة مفاتيح متعددة متتالية عند الاتصال. إليك الطريقة:

$ cat ~/.ssh/config
IdentityFile ~/.ssh/id_rsa
IdentityFile ~/.ssh/id_rsa_old
IdentityFile ~/.ssh/id_ed25519
# ... and so on

$ ssh server.example.com -v
....
debug1: Next authentication method: publickey
debug1: Trying private key: /home/example/.ssh/id_rsa
debug1: read PEM private key done: type RSA
debug1: Authentications that can continue: publickey
debug1: Trying private key: /home/example/.ssh/id_rsa_old
debug1: read PEM private key done: type RSA
....
[server ~]$

بهذه الطريقة لا يلزمك تحديد المفتاح الذي يعمل مع أي خادم. سوف تستخدم فقط مفتاح العمل الأول.

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

من المؤكد أنه لا يتفوق على التكوين لكل خادم كما هو الحال في الإجابات الأخرى ، ولكن على الأقل لن تضطر إلى إضافة تهيئة للجميع وكل خادم تتصل به!

262
spacesix

الجواب من راندال شوارتز ساعدني تقريبًا على طول الطريق. لدي اسم مستخدم مختلف على الخادم ، لذلك اضطررت إلى إضافة المستخدم الكلمة الأساسية إلى ملفي:

Host           friendly-name
HostName       long.and.cumbersome.server.name
IdentityFile   ~/.ssh/private_ssh_file
User           username-on-remote-machine

يمكنك الآن الاتصال باستخدام الاسم المألوف:

ssh friendly-name

يمكن العثور على المزيد من الكلمات الرئيسية في الصفحة الرئيسية لـ OpenSSH . ملاحظة: قد تكون بعض الكلمات الرئيسية المدرجة موجودة بالفعل في ملفك {/ etc/ssh/ssh_config.

244
peron
foo:~$ssh-add ~/.ssh/xxx_id_rsa

تأكد من اختباره قبل الإضافة باستخدام:

ssh -i ~/.ssh/xxx_id_rsa [email protected]

إذا كان لديك أي مشاكل مع الأخطاء ، فإن تغيير أمان الملف يساعد في بعض الأحيان:

chmod 0600 ~/.ssh/xxx_id_rsa
94
user420807

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

لنفترض أن اسم مستخدم حساب GitHub الخاص بشركتك هو abc1234 . ولنفترض أن اسم مستخدم حساب GitHub الشخصي هو jack1234

ولنفترض أنك قمت بإنشاء مفتاحين RSA ، هما id_rsa_company و id_rsa_personal . لذلك ، سيبدو التكوين الملف كما يلي:

# Company account
Host company
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_company

# Personal account
Host personal
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_personal

الآن ، عندما تقوم باستنساخ المخزون (المسمى demo) من حساب GitHub للشركة ، سيكون عنوان URL الخاص بالمستودع مثل:

Repo URL: [email protected]:abc1234/demo.git

الآن ، أثناء القيام git clone ، يجب عليك تعديل عنوان URL الخاص بالمستودع أعلاه على النحو التالي:

[email protected]:abc1234/demo.git

لاحظ كيف يتم الآن استبدال github.com بـ "الشركة" الاسم المستعار كما حددناها في ملف التكوين.

Similary ، يجب عليك تعديل عنوان URL المستنسخ لمستودع التخزين في الحساب الشخصي بناءً على الاسم المستعار الوارد في ملف التكوين.

76
oblivion

أتفق مع Tuomas حول استخدام ssh-agent. أردت أيضًا إضافة مفتاح خاص ثانٍ للعمل و هذا البرنامج التعليمي عملت مثل السحر بالنسبة لي.

الخطوات هي على النحو التالي:

  1. $ ssh-agent bash
  2. $ ssh-add /path.to/private/key على سبيل المثال ssh-add ~/.ssh/id_rsa
  3. تحقق بواسطة $ ssh-add -l
  4. اختبره باستخدام $ssh -v <Host url> على سبيل المثال ssh -v [email protected]
23
Wahib Ul Haq
  1. إنشاء مفتاح SSH:

    $ ssh-keygen -t rsa -C <[email protected]>
    
  2. إنشاء another SSH key:

    $ ssh-keygen -t rsa -f ~/.ssh/accountB -C <[email protected]>
    

    الآن ، يجب أن يوجد مفتاحان عامان ( id_rsa.pub ، accountB.pub ) في دليل ~/.ssh/.

    $ ls -l ~/.ssh     # see the files of '~/.ssh/' directory 
    
  3. قم بإنشاء ملف التكوين ~/.ssh/config بالمحتويات التالية:

    $ nano ~/.ssh/config
    
    Host bitbucket.org  
        User git  
        Hostname bitbucket.org
        PreferredAuthentications publickey  
        IdentityFile ~/.ssh/id_rsa  
    
    Host bitbucket-accountB  
        User git  
        Hostname bitbucket.org  
        PreferredAuthentications publickey  
        IdentitiesOnly yes  
        IdentityFile ~/.ssh/accountB  
    
  4. استنساخ من حساب default.

    $ git clone [email protected]:username/project.git
    
  5. استنساخ من حساب accountB.

    $ git clone [email protected]:username/project.git
    

انظر أكثر هنا

21
Sajib Khan

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

أنا خلقت تكوينين منفصلين ssh على النحو التالي.

Host personal.bitbucket.org
    HostName bitbucket.org
    User git
    IdentityFile /Users/username/.ssh/personal
Host work.bitbucket.org
    HostName bitbucket.org
    User git
    IdentityFile /Users/username/.ssh/work

الآن عندما اضطررت إلى استنساخ مستودع من حساب عملي - كان الأمر كما يلي.

git clone [email protected]:teamname/project.git

اضطررت إلى تعديل هذا الأمر إلى:

git clone [email protected]**work**.bitbucket.org:teamname/project.git

وبالمثل ، يجب تعديل الأمر clone من حسابي الشخصي

git clit git @ personal . bitbucket.org:name/personalproject.git

الرجوع هذا الرابط لمزيد من المعلومات.

13
Ananth Pai

استخدام وكيل ssh للمفاتيح الخاصة بك.

11
Tuomas Pelkonen

الآن ، مع الإصدار الأخير من git ، يمكننا تحديد sshCommand في ملف التكوين git الخاص بالمستودع.

  [core]
      repositoryformatversion = 0
      filemode = true
      bare = false
      logallrefupdates = true
      sshCommand = ssh -i ~/.ssh/id_rsa_user   
   [remote "Origin"]
      url = [email protected]:user/repo.git
      fetch = +refs/heads/*:refs/remotes/Origin/*
5
Naga Kiran

يمكنك إنشاء ملف تكوين باسم config في مجلد ~/.ssh الخاص بك. يمكن أن تحتوي على:

Host aws
    HostName *yourip*
    User *youruser*
    IdentityFile *idFile*

سيتيح لك ذلك الاتصال بأجهزة مثل هذه

 ssh aws
1
Andrew Crowley

هام: يجب أن تبدأ وكيل ssh

يجب أن تبدأ ssh-agent (إذا لم تكن تعمل بالفعل) قبل استخدام ssh-add على النحو التالي:

eval `ssh-agent -s` # start the agent

ssh-add id_rsa_2 # where id_rsa_2 is your new private key file

لاحظ أن الأمر eval يبدأ العامل على GIT bash على windows. قد تستخدم البيئات الأخرى متغيرًا لبدء تشغيل عامل SSH.

1
danday74

كما ذكر في صفحة مدونة atlassian إنشاء config within .ssh بما في ذلك النص التالي:

#user1 account
 Host bitbucket.org-user1
     HostName bitbucket.org
     User git
     IdentityFile ~/.ssh/user1
     IdentitiesOnly yes

 #user2 account
 Host bitbucket.org-user2
     HostName bitbucket.org
     User git
     IdentityFile ~/.ssh/user2
     IdentitiesOnly yes

ثم يمكنك ببساطة الخروج مع المجال اللاحق وضمن المشروعات ، يمكنك تكوين أسماء المؤلفين وما إلى ذلك محليًا.

0
dgbt

في Centos 6.5 الذي يقوم بتشغيل OpenSSH_5.3p1 ، OpenSSL 1.0.1e-fips ، قمت بحل المشكلة عن طريق إعادة تسمية ملفاتي الرئيسية حتى لا يحمل أي منهم الاسم الافتراضي. يحتوي دليل .ssh الخاص بي على id_rsa_foo و id_rsa_bar ولكن لا يحتوي على id_rsa ، إلخ.

0
Chris Owens