1169 Stimmen

Beste Möglichkeit zur Verwendung mehrerer privater SSH-Schlüssel auf einem Client

Ich möchte mehrere private Schlüssel verwenden, um eine Verbindung zu verschiedenen Servern oder verschiedenen Teilen desselben Servers herzustellen (ich verwende sie für die Systemverwaltung des Servers, die Verwaltung von Git und die normale Verwendung von Git auf demselben Server). Ich habe versucht, die Schlüssel einfach in der id_rsa Dateien vergeblich.

Offensichtlich ist eine einfache Möglichkeit, dies zu tun, die Verwendung des Befehls

ssh -i <key location> login@server.example.com 

Das ist ziemlich umständlich.

Haben Sie einen Vorschlag, wie man das etwas einfacher machen kann?

8 Stimmen

Ich schrieb dieser Artikel in dem die verschiedenen Konfigurationen und ihre Stärken und Schwächen ausführlich erläutert werden.

107voto

Sajib Khan Punkte 20152
  1. Erzeugen Sie einen SSH-Schlüssel:

     $ ssh-keygen -t rsa -C <email1@example.com>
  2. Erzeugen Sie einen anderen SSH-Schlüssel :

     $ ssh-keygen -t rsa -f ~/.ssh/accountB -C <email2@example.com>

    Nun werden zwei öffentliche Schlüssel ( id_rsa.pub , KontoB.pub ) sollte in der ~/.ssh/ Verzeichnis.

     $ ls -l ~/.ssh     # see the files of '~/.ssh/' directory
  3. Konfigurationsdatei erstellen ~/.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. Klonen von default Konto.

     $ git clone git@bitbucket.org:username/project.git
  5. Klonen Sie aus dem accountB Konto.

     $ git clone git@bitbucket-accountB:username/project.git

Anmerkung: Aufgrund der User git Richtlinie können Sie die Option git@ Teil der Repo-URL und verkürzt so Ihre clone Befehl wie folgt:

    $ git clone bitbucket-accountB:username/project.git

Dies ist der einzige Zweck dieser Richtlinie. Wenn Sie sie nicht brauchen (z.B. wenn Sie immer den Befehl git clone von der Website kopieren), können Sie sie in der Konfiguration weglassen.

Hier mehr sehen

0 Stimmen

Wenn Sie bereits ein geklontes Repository haben, können Sie die Remote-URL ändern: devconnected.com/how-to-change-git-remote-origin

1 Stimmen

Dies funktionierte perfekt ersten Mal. Dies ist die beste Schritt für Schritt. ersetzen Sie die verschiedenen Konten usw. und es ist einfach gut. Ich ersetze Bitbucket durch Github und meinen Benutzernamen. Genial!

29voto

Wahib Ul Haq Punkte 3933

Ich würde Tuomas bei der Verwendung von ssh-agent zustimmen. Ich wollte auch einen zweiten privaten Schlüssel für die Arbeit hinzufügen und diese Anleitung Das hat bei mir wunderbar funktioniert.

Die Schritte sind wie folgt:

  1. $ ssh-agent bash
  2. $ ssh-add /path.to/private/key z.B. ssh-add ~/.ssh/id_rsa
  3. Überprüfen durch $ ssh-add -l
  4. Testen Sie es mit $ssh -v <host url> z.B. ssh -v git@assembla.com

4 Stimmen

Nach der Verwendung ssh-agent habe ich vor kurzem dazu übergegangen, Gnome zu verwenden. gnome-keyring innerhalb meiner i3 wm. Der Grund dafür ist einfach: Der Keyring-Manager von Gnome erledigt das Hinzufügen und Entfernen von SSH-Schlüsseln automatisch, ohne dass ich mich daran erinnern muss ssh-add . Außerdem kann ich sie mit einem einzigen Passwort entsperren (und zur Sicherheit nach einer bestimmten Zeit ausschalten). Jedem das Seine. Da ich die Gnome-Einstellungen auf Arch verwende, war es Plug & Play mit meinem Setup. Wenn Sie anti-gnome sind, ignorieren Sie diesen Kommentar.

0 Stimmen

@eduncan911, ich stimme zu, dass gnome-keyring hilfreich sein kann, aber es kann nicht wirklich mit ed25519-Schlüsseln umgehen, also ist das für mich ein No-Starter. Update: Ich sehe aus wiki.archlinux.org/index.php/GNOME/ dass es jetzt den ssh-Agenten des Systems verwendet, so dass dies kein Problem mehr darstellt.

0 Stimmen

ssh-agent bash beginnt die Untersitzung. Sie können auch einfach die Ausgabe von ssh-agent -s wie eval `ssh-agent -s` . Danach verwenden Sie ssh-add

27voto

amdev Punkte 2602

Für mich war die einzige funktionierende Lösung, einfach folgendes in die Datei einzufügen ~/.ssh/config :

Host *
  IdentityFile ~/.ssh/your_ssh_key
  IdentityFile ~/.ssh/your_ssh_key2
  IdentityFile ~/.ssh/your_ssh_key3
  AddKeysToAgent yes

your_ssh_key ist ohne jede Erweiterung. Verwenden Sie nicht .pub .

0 Stimmen

Funktioniert, aber beim Laden erscheint die Meldung "load pubkey "path/.ssh/key": ungültiges Format".

0 Stimmen

Das ist etwas, das bei mir funktioniert hat, und es ist - ein bisschen - ähnlich wie bei Ihnen: $ eval "$(ssh-agent -s)" $ ssh-add ~/.ssh/{private_key} $ git clone git@{alias}:{github_user}/{repo}.git dann weiter ~/.ssh/config Host github.com-{alias} HostName github.com PreferredAuthentications publickey IdentityFile ~/.ssh/{private_key} und weiter {repo}/.git/config [remote "origin"] url = git@github.com-{alias}:{github_user}/{repo}.git fetch = +refs/heads/*:refs/remotes/origin/* . .

0 Stimmen

Großartig! Funktioniert bei mir unter Mac OS

24voto

Naga Kiran Punkte 8266

Mit der neuesten Version von Git können wir nun angeben sshCommand in der repositoryspezifischen Git-Konfigurationsdatei:

  [core]
      repositoryformatversion = 0
      filemode = true
      bare = false
      logallrefupdates = true
      sshCommand = ssh -i ~/.ssh/id_rsa_user
   [remote "origin"]
      url = git@bitbucket.org:user/repo.git
      fetch = +refs/heads/*:refs/remotes/origin/*

4 Stimmen

Dies ist der korrekteste Weg, dies zu tun. Wenn Sie nicht in der Datei herumfummeln wollen, führen Sie einfach git config --local core.sshCommand "ssh -i ~/.ssh/your_other_rsa_file" in Ihrem Git-Repository

17voto

Ananth Pai Punkte 1859

Ich war vor einiger Zeit auf dieses Problem gestoßen, als ich zwei Bitbucket-Konten hatte und für beide getrennte SSH-Schlüssel 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 git@bitbucket.org:teamname/project.git

Ich musste diesen Befehl abändern in:

git clone git@**work**.bitbucket.org:teamname/project.git

In ähnlicher Weise musste der Befehl clone von meinem persönlichen Konto aus wie folgt geändert werden

git clone git@ persönlich .bitbucket.org:name/personalproject.git

Siehe ce lien für weitere Informationen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X