Ich habe in Debian mehrere SSH-Schlüssel für verschiedene Konten erstellt (nämlich Digital Ocean, GitHub und Bitbucket), aber es wird sehr schnell unübersichtlich.
Wenn ich den Inhalt meines .ssh-Ordners aufliste, erhalte ich:
digOcn digOcn.pub github github.pub id_rsa id_rsa.pub
(Ich verwende den id_rsa
Schlüssel für Bitbucket.)
Ich mache das eval 'ssh-agent -s'
Ding und „füge“ dann die Schlüssel wie folgt hinzu:
ssh-add ~/.ssh/github
(und dann die Passphrase eingeben)ssh-add ~/.ssh/id_rsa
(und dann die Passphrase eingeben)ssh-add ~/.ssh/digOcn
(Wenn ich versuche hinzuzufügendigOcn
, wird „Zugriff verweigert“ angezeigt. Ich versuche nicht,sudo
etwas durcheinander zu bringen, und auch, weil die anderen Schlüssel kein erfordertensudo
.)
Hier ist der verwirrende Teil: Die Leistung ssh-add -l
bringt mir Folgendes:
2048 so:me:nu:mb:er:s0:an:d9:le:tt:er:s0 /home/USER/.ssh/id_rsa (RSA)
2048 so:me:nu:mb:er:s0:an:d9:le:tt:er:s0 /home/USER/.ssh/github (RSA)
2048 so:me:nu:mb:er:s0:an:d9:le:tt:er:s0 github (RSA)
2048 so:me:nu:mb:er:s0:an:d9:le:tt:er:s0 USER@COMPUTER_NAME (RSA)
Ja, ich habe in der Vergangenheit SSH-Schlüssel hinzugefügt, aber ich kann nicht nachvollziehen, was ich getan habe. Das ist wahrscheinlich der Grund, warum es beide gibt/home/USER/.ssh/github
Und github
.
Was habe ich falsch gemacht? Wie sollte ich meine SSH-Schlüssel organisieren?
Antwort1
Erstens ist es nicht falsch, für verschiedene Konten unterschiedliche Schlüssel zu verwenden. Für interaktive Shells ist das ziemlich übertrieben, aber es gibt legitime Gründe dafür, wenn Sie mit anderen, nicht interaktiven Diensten arbeiten. Vor einigen Jahren beispielsweise begann GitHub, stärkere SSH-Schlüssel zuzulassen, während Bitbucket noch eine Weile darauf bestand, schwächere zu verwenden. Die richtige Maßnahme bestand damals darin, für den Zugriff auf GitHub und Bitbucket unterschiedliche Schlüssel zu verwenden.
Ein weiteres Beispiel ist rsync
. Wenn Sie rsync
beispielsweise Dateien auf einem Webserver bereitstellen, benötigen Sie dafür wahrscheinlich dedizierte SSH-Schlüssel. Diese ermöglichen Ihnen, andere Berechtigungen festzulegen, als Sie normalerweise mit Ihrem interaktiven Konto verwenden würden.
Zurück zu Ihrer Frage zum Verwalten mehrerer Schlüssel: Mit SSH können Sie für verschiedene Ziele unterschiedliche Optionen festlegen. Dazu müssen Sie eine Datei ~/.ssh/config
wie diese bearbeiten:
Host bitbucket.org
User hg
IdentitiesOnly yes
IdentityFile /home/user/.ssh/bitbucket
Host github.com gist.github.com
User git
IdentitiesOnly yes
IdentityFile /home/user/.ssh/github
Die Datei ~/.ssh/config
sollte die Berechtigung 0600 haben (ich weiß gerade nicht, ob das von SSH erzwungen wird oder nicht, aber es schadet sicherlich nicht).
Sie können denselben Mechanismus natürlich auch für interaktive Shells verwenden und Dinge wie den Remote-Benutzernamen (sofern dieser vom lokalen abweicht), den Remote-Port festlegen, den Hostnamen verkürzen usw. Beispiel:
Host sm
Hostname sphygmomanometer.example.com
User human
Port 2222
Dann kannst du einfach laufen
ssh sm
anstatt
ssh -p 2222 [email protected]
Auch Platzhalter sind erlaubt:
Host *
ControlPath ~/.ssh/ctl-%u-%r-%h-%p
ControlMaster auto
ControlPersist 5m
Weitere Einzelheiten entnehmen Sie bitte dem Handbuch.
Nicht zuletzt:nicht"mach die eval 'ssh-agent -s'
Sache". Entgegen der landläufigen Meinung hat das schwerwiegende Auswirkungen auf die Sicherheit. So geht man es richtig:
ssh-agent /bin/bash
ssh-add
(Geben Sie dann Ihre Schlüsselkennwörter ein, wenn Sie dazu aufgefordert werden.) Das ist alles. Machen Sie es nicht Schlüssel für Schlüssel oder auf andere Weise.
Dadurch wird eine neue Shell ausgeführt, in die Ihre Schlüssel geladen werden. Wenn Sie den Zugriff widerrufen möchten, verwenden Sie einfach exit
diese Shell. Wenn Sie „das eval 'ssh-agent -s'
Ding machen“, werden die Authentifizierungsagenten noch lange nach Ihrer Abmeldung ausgeführt und können (und werden es irgendwann auch) für unbefugten Zugriff verwendet.
Bearbeiten:Versuchen Sie dieses kleine Experiment:
eval $(ssh-agent -s)
- Abmelden oder das Terminal beenden
- Melden Sie sich erneut an oder öffnen Sie ein neues Terminal
pgrep ssh-agent
Niemand löscht diese ssh-agent
s, sie bleiben bis zum nächsten im Umlauf reboot
und können von der neuesten Schadsoftware ausgenutzt werden.