it-swarm.com.de

Beste Möglichkeit, mehrere private SSH-Schlüssel auf einem Client zu verwenden

Ich möchte mehrere private Schlüssel verwenden, um eine Verbindung zu verschiedenen Servern oder verschiedenen Teilen desselben Servers herzustellen (meine Verwendung sind die Systemadministration des Servers, die Administration von Git und die normale Git-Nutzung innerhalb desselben Servers). Ich habe versucht, einfach die Schlüssel in den id_rsa -Dateien zu stapeln, ohne Erfolg.

Offensichtlich ist die Verwendung des Befehls ein einfacher Weg, dies zu tun

ssh -i <key location> [email protected] 

Das ist ziemlich umständlich.

Irgendwelche Vorschläge, wie Sie dies ein bisschen einfacher machen können?

791
Justin

Aus meinem .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

Und so weiter.

1130
Randal Schwartz

Sie können ssh anweisen, beim Herstellen einer Verbindung mehrere Schlüssel nacheinander auszuprobieren. Hier ist wie:

$ 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 ~]$

Auf diese Weise müssen Sie nicht angeben, welcher Schlüssel mit welchem ​​Server funktioniert. Es wird nur der erste funktionierende Schlüssel verwendet.

Außerdem würden Sie eine Passphrase nur eingeben, wenn ein bestimmter Server bereit ist, den Schlüssel zu akzeptieren. Wie oben zu sehen, hat ssh nicht versucht, ein Passwort für .ssh/id_rsa anzufordern, auch wenn es eines hatte.

Sicherlich übertrifft es eine Konfiguration pro Server nicht wie in anderen Antworten, aber zumindest müssen Sie keine Konfiguration für jeden Server hinzufügen, zu dem Sie eine Verbindung herstellen!

291
spacesix

Das Antwort von Randal Schwartz hat mir fast den ganzen Weg geholfen. Ich habe einen anderen Benutzernamen auf dem Server und musste daher das Schlüsselwort User zu meiner Datei hinzufügen:

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

Jetzt können Sie eine Verbindung mit dem Anzeigenamen herstellen:

ssh friendly-name

Weitere Schlüsselwörter finden Sie auf der OpenSSH-Manpage . HINWEIS: Einige der aufgelisteten Schlüsselwörter sind möglicherweise bereits in Ihrer /etc/ssh/ssh_config -Datei vorhanden .

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

Stellen Sie sicher, dass Sie es testen, bevor Sie es hinzufügen mit:

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

Wenn Sie Probleme mit Fehlern haben, hilft es manchmal, die Sicherheit der Datei zu ändern:

chmod 0600 ~/.ssh/xxx_id_rsa
98
user420807

In den vorherigen Antworten wurde die Erstellung einer Konfigurationsdatei zur Verwaltung mehrerer SSH-Schlüssel ordnungsgemäß erläutert. Ich denke, die wichtige Sache, die auch erklärt werden muss, ist das Ersetzen eines Hostnamens durch einen Aliasnamen beim Klonen des Repositorys.

Angenommen, Ihr der Benutzername Ihres GitHub-Kontos lautet abc1234. Angenommen, Ihr der Benutzername Ihres persönlichen GitHub-Kontos lautet jack1234

Angenommen, Sie haben zwei RSA-Schlüssel erstellt, nämlich id_rsa_company und id_rsa_personal. So sieht Ihre Konfiguration Datei wie folgt aus:

# 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

Wenn Sie nun das Repository (benannte Demo) aus dem GitHub-Konto des Unternehmens klonen, lautet die Repository-URL ungefähr so :

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

Während Sie git clone ausführen, sollten Sie die obige Repository-URL wie folgt ändern:

[email protected]:abc1234/demo.git

Beachten Sie, dass github.com jetzt durch den in der Konfigurationsdatei definierten Alias ​​"Firma" ersetzt wird.

Ebenso müssen Sie die Klon-URL des Repositorys im persönlichen Konto in Abhängigkeit von dem in der Konfigurationsdatei angegebenen Alias ​​ändern.

86
oblivion
  1. SSH-Schlüssel generieren:

    $ ssh-keygen -t rsa -C <[email protected]>
    
  2. another SSH key generieren:

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

    Nun können zwei öffentliche Schlüssel ( id_rsa.pub , accountB.pub ) sollte im Verzeichnis ~/.ssh/ vorhanden sein.

    $ ls -l ~/.ssh     # see the files of '~/.ssh/' directory 
    
  3. Erstellen Sie die Konfigurationsdatei ~/.ssh/config mit folgendem Inhalt:

    $ 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. Von default Konto klonen.

    $ git clone [email protected]:username/project.git
    
  5. Von accountB Konto klonen.

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

Sehen Sie hier mehr

26
Sajib Khan

Ich würde Tuomas bezüglich der Verwendung von ssh-agent zustimmen. Ich wollte auch einen zweiten privaten Schlüssel für die Arbeit hinzufügen und dieses Tutorial arbeitete wie ein Zauber für mich.

Schritte sind wie folgt:

  1. $ ssh-agent bash
  2. $ ssh-add /path.to/private/key z.B. ssh-add ~/.ssh/id_rsa
  3. Überprüfung durch $ ssh-add -l
  4. Testen Sie es mit $ssh -v <Host url>, z. B. ssh -v [email protected]
22
Wahib Ul Haq

Ich war vor einiger Zeit auf dieses Problem gestoßen, als ich zwei Bitbucket-Konten hatte und separate SSH-Schlüssel für beide speichern wollte. Das hat bei mir funktioniert.

Ich habe zwei separate SSH-Konfigurationen wie folgt erstellt.

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

Als ich nun ein Repository von meinem Arbeitskonto klonen musste, lautete der Befehl wie folgt.

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

Ich musste diesen Befehl ändern, um:

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

Ebenso musste der Klonbefehl von meinem persönlichen Account auf geändert werden

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

Weitere Informationen finden Sie unter dieser Link .

13
Ananth Pai

Verwenden Sie ssh-agent für Ihre Schlüssel.

11
Tuomas Pelkonen

Jetzt können wir mit der neuesten Version von git sshCommand in der repository-spezifischen git-Konfigurationsdatei angeben.

  [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/*
8
Naga Kiran

Am Ubuntu 18.04 gibt es nichts zu tun.

Nach erfolgreicher Erstellung eines zweiten SSH-Schlüssels versucht das System, für jede Verbindung einen passenden SSH-Schlüssel zu finden.

Um ganz klar zu sein, können Sie mit diesen Befehlen einen neuen Schlüssel erstellen

# generate key make sure you give it a new name (id_rsa_server2)
ssh-keygen 
# make sure ssh agent is running
eval `ssh-agent`
# add the new key
ssh-add ~/.ssh/id_rsa_server2
# get the public key to add it to a remote system for authentication
cat ~/.ssh/id_rsa_server2.pub
1
GiorgosK

Sie können eine Konfigurationsdatei mit dem Namen config in Ihrem Ordner ~/.ssh erstellen. Es kann enthalten:

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

Auf diese Weise können Sie eine Verbindung zu solchen Computern herstellen

 ssh aws
1
Andrew Crowley

WICHTIG: Sie müssen ssh-agent starten

Sie müssen ssh-agent starten (falls es noch nicht läuft), bevor Sie ssh-add verwenden können:

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

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

Beachten Sie, dass der Befehl eval den Agenten auf GIT unter Windows startet. In anderen Umgebungen wird möglicherweise eine Variante zum Starten des SSH-Agenten verwendet.

1
danday74

Als Erwähnung auf atlassian blog page generiere eine Konfiguration innerhalb von . Ssh einschließlich des folgenden Textes:

#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

Dann können Sie einfach mit der Suffix-Domain auschecken und innerhalb der Projekte die Autorennamen etc. lokal konfigurieren.

0
dgbt

Auf Centos 6.5 mit OpenSSH_5.3p1, OpenSSL 1.0.1e-fips löste ich das Problem, indem ich meine Schlüsseldateien umbenannte, sodass keine den Standardnamen hatte. Mein .ssh-Verzeichnis enthält id_rsa_foo und id_rsa_bar, aber keine id_rsa usw.

0
Chris Owens