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.

1597voto

Randal Schwartz Punkte 33384

Von 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

Dann können Sie die Verbindung wie folgt herstellen:

ssh myshortname

ssh myother

Und so weiter.

30 Stimmen

Danke Randal! Ich habe etwas in der .ssh/config gegraben und dies gefunden: github.com/guides/multiple-github-accounts Er hat mir die richtige Richtung gewiesen.

7 Stimmen

Dies war eine große Hilfe (zusätzlich zu den stackoverflow.com/a/3828682/169153 ). Wenn Sie Putty-Tasten verwenden möchten, folgen Sie diesem Dokument hier: blog.padraigkitterick.com/2007/09/16/

2 Stimmen

Ich fand diesen Beitrag sehr hilfreich. Ein Fehler, den ich beim Erstellen der Konfigurationsdatei gemacht habe, war, dass ich eine .txt-Datei in den .ssh-Ordner gelegt habe, anstatt den Befehl "touch" auszuführen, um eine Konfigurationsdatei zu erstellen.

605voto

spacesix Punkte 5533

Sie können ssh anweisen, beim Verbindungsaufbau mehrere Schlüssel nacheinander auszuprobieren. So geht's:

$ 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 einfach der erste funktionierende Schlüssel verwendet.

Sie würden auch nur dann eine Passphrase eingeben, wenn ein bestimmter Server bereit ist, den Schlüssel zu akzeptieren. Wie oben zu sehen ist, hat ssh nicht versucht, nach einem Passwort zu fragen für .ssh/id_rsa selbst wenn sie einen hätte.

Sicherlich ist es nicht besser als eine Konfiguration pro Server wie in anderen Antworten, aber zumindest müssen Sie nicht für jeden einzelnen Server, mit dem Sie sich verbinden, eine Konfiguration hinzufügen!

20 Stimmen

Das ist eine fantastische Lösung für die gestellte Frage, aber sie entspricht nicht ganz dem, was der Fragesteller wollte. Für mich war es genau die richtige Lösung und sie erfüllt perfekt die Anforderung "Beste Möglichkeit, mehrere private SSH-Schlüssel auf einem Client zu verwenden".

4 Stimmen

Dies scheint unter der Host-Deklaration in der Konfigurationsdatei nicht zu funktionieren

63 Stimmen

Das funktioniert nicht gut mit Git, denn wenn Sie zwei Github-Deploy-Schlüssel haben, ist der erste in der Liste gültig und funktioniert, aber dann beschwert sich Github, dass das Repository nicht übereinstimmt.

314voto

oblivion Punkte 5258

In den vorangegangenen Antworten wurde ordnungsgemäß erklärt, wie eine Konfigurationsdatei zur Verwaltung mehrerer ssh-Schlüssel zu erstellen ist. Ich denke, die wichtigste Sache, die auch erklärt werden muss, ist die Ersetzen eines Hostnamens durch einen Aliasnamen beim Klonen des Repositorys .

Angenommen, Ihr der Benutzername des GitHub-Kontos des Unternehmens lautet abc1234 . Und angenommen, Ihr der Benutzername des persönlichen GitHub-Kontos lautet jack1234

Und nehmen wir an, Sie haben zwei RSA-Schlüssel erstellt, nämlich id_rsa_Unternehmen y id_rsa_personal . Also, Ihr Konfiguration Datei wird wie folgt aussehen:

# 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 Klonen der Repository (benannte Demo) vom GitHub-Konto des Unternehmens, wird die Repository-URL etwa so aussehen:

Repo URL: git@github.com:abc1234/demo.git

Nun, während der Arbeit git clone sollten Sie die obige Repository-URL wie folgt ändern:

git@company:abc1234/demo.git

Beachten Sie, dass github.com jetzt durch den Alias "company" ersetzt wird, den wir in der Konfigurationsdatei definiert haben.

Analog dazu müssen Sie die Klon-URL des Repositorys im persönlichen Konto entsprechend dem in der Konfigurationsdatei angegebenen Alias ändern.

28 Stimmen

Ich wünschte, ich könnte diese Antwort mehr als einmal bewerten... dies ist der richtige Weg, um das Problem anzugehen, und es ist sicherer und schneller als andere Optionen. Außerdem ist sie besser skalierbar (erlaubt die Definition verschiedener Schlüssel für die même Hostname)

2 Stimmen

Großartige Erklärung! Funktioniert perfekt für mich. Und wenn Sie vergessen haben, die Repo mit dem Alias zu klonen, können Sie oft die Remote-URL des Ursprungs nachträglich bearbeiten.

2 Stimmen

Nur aufpassen, weil die Konfigurationsdatei (chmod 600) sein muss

277voto

peron Punkte 2899

El Antwort von Randal Schwartz hat mir fast den ganzen Weg geholfen. Ich habe einen anderen Benutzernamen auf dem Server, also musste ich die Benutzer Schlüsselwort zu meiner Datei:

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 Friendly-Name herstellen:

ssh friendly-name

Weitere Schlüsselwörter finden Sie auf der Website OpenSSH-Manualseite . NOTE : Einige der aufgelisteten Schlüsselwörter sind möglicherweise bereits in Ihrem /etc/ssh/ssh_config Datei.

0 Stimmen

Wenn ich mich nicht irre, geben Sie den Benutzer normalerweise direkt in der URL an, wenn Sie sich mit user@host

5 Stimmen

Ich ziehe es vor, auch das Schlüsselwort "Port" zu verwenden. Ein weiteres interessantes Schlüsselwort ist "StrictHostKeyChecking".

118voto

user420807 Punkte 1187
ssh-add ~/.ssh/xxx_id_rsa

Stellen Sie sicher, dass Sie es vor dem Hinzufügen mit testen:

ssh -i ~/.ssh/xxx_id_rsa username@example.com

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

chmod 0600 ~/.ssh/xxx_id_rsa

4 Stimmen

Dies ist meiner Meinung nach die prägnanteste und eleganteste Lösung. Hat wunderbar funktioniert!

0 Stimmen

@Bobo können Sie es in Ihre bashrc oder Ihr bash_profile (oder was auch immer das Mac-Äquivalent ist) eintragen?

6 Stimmen

+1 für chmod 0600 - Probleme mit den Zugriffsrechten hinderten mich am Verbinden

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