Standardmäßig sucht ssh nach id_dsa
und id_rsa
Dateien. Die Schlüssel müssen nicht so benannt werden, Sie können sie mykey
genauso gut benennen oder sie sogar in einem anderen Verzeichnis ablegen. Wenn Sie jedoch einen dieser Schritte ausführen, müssen Sie den Schlüssel im Befehl ssh wie folgt explizit referenzieren:
ssh user@server -i /path/to/mykey
Wenn ein Befehl nicht akzeptiert wird -i
, verwenden Sie z. B. sshfs
die IdentityFile
Option:
sshfs -o IdentityFile=/path/to/mykey user@host:/path/on/remote /mountpoint
Wie es funktioniert
Beim Generieren eines Schlüssels erhalten Sie zwei Dateien: id_rsa
(privater Schlüssel) und id_rsa.pub
(öffentlicher Schlüssel). Wie der Name schon sagt, sollte der private Schlüssel geheim gehalten und der öffentliche Schlüssel öffentlich veröffentlicht werden.
Die Authentifizierung mit öffentlichem Schlüssel funktioniert mit einem öffentlichen und einem privaten Schlüssel. Sowohl der Client als auch der Server haben ihre eigenen Schlüssel. Bei der Installation openssh-server
des Servers werden öffentliche und private Schlüssel automatisch generiert. Für den Kunden müssen Sie das selbst tun.
Wenn Sie (Client) eine Verbindung mit einem Server herstellen, werden öffentliche Schlüssel ausgetauscht. Sie erhalten einen Server und Ihren Server. Wenn Sie den öffentlichen Schlüssel des Servers zum ersten Mal erhalten, werden Sie aufgefordert, ihn zu akzeptieren. Wenn sich dieser öffentliche Schlüssel im Laufe der Zeit ändert, werden Sie gewarnt, da ein möglicher MITM-Angriff (Man in the middle) stattfindet, der den Datenverkehr zwischen Client und Server abfängt.
Der Server prüft, ob Sie eine Verbindung herstellen dürfen (definiert in /etc/ssh/sshd_config
) und ob Ihr öffentlicher Schlüssel in der ~/.ssh/authorized_keys
Datei aufgeführt ist. Mögliche Gründe, warum der öffentliche Schlüssel abgelehnt wird:
/etc/ssh/sshd_config
:
AllowUsers
oder AllowGroups
ist angegeben, aber Ihr Serverbenutzer ist nicht in der Gruppen- oder Benutzerliste aufgeführt (standardmäßig nicht definiert, wodurch die Anmeldung der Benutzer oder Gruppen nicht eingeschränkt wird).
DenyUsers
oder DenyGroups
ist angegeben und Sie befinden sich in der Benutzer- oder Gruppenliste.
- Sie versuchen, sich als root anzumelden, sind jedoch
PermitRootLogin
auf No
(Standard yes
) gesetzt.
PubkeyAuthentication
ist auf No
(Standard yes
) eingestellt.
AuthorizedKeysFile
ist auf einen anderen Speicherort festgelegt und die öffentlichen Schlüssel werden dieser Datei nicht hinzugefügt (Standardeinstellung .ssh/authorized_keys
, relativ zum Basisverzeichnis)
~/.ssh/authorized_keys
: Ihr öffentlicher Schlüssel wird in dieser Datei nicht hinzugefügt (beachten Sie, dass diese Datei als Root-Benutzer gelesen wird)
Verwendung mehrerer Schlüssel
Es ist nicht ungewöhnlich, mehrere Schlüssel zu verwenden. Anstatt ausgeführt zu werden ssh user@host -i /path/to/identity_file
, können Sie eine Konfigurationsdatei verwenden ~/.ssh/config
.
Allgemeine Einstellungen sind das IdentityFile (die Schlüssel) und der Port. Die nächste Konfiguration überprüft "id_dsa" und "bender" nur, wenn eine Verbindung hergestellt wird mit ssh youruser@yourhost
:
Host yourhost
IdentityFile ~/.ssh/id_dsa
IdentityFile ~/.ssh/bender
Wenn Sie nichts angeben Host yourhost
, gelten die Einstellungen für alle SSH-Verbindungen. Andere Optionen können auch für dieses Host Spiel angegeben werden, wie User youruser
, Port 2222
etc. Auf diese Weise könnten Sie mit der Stenographie verbinden ssh yourhost
statt ssh -p2222 youruser@yourhost -i ~/.ssh/id_dsa -i ~/.ssh/bender
.
ssh_config(5)
: Der Dateiname verwendet möglicherweise die Tildesyntax, um auf das Basisverzeichnis eines Benutzers oder eines der folgenden Escapezeichen zu verweisen: '% d' (Basisverzeichnis des lokalen Benutzers), '% u' (lokaler Benutzername), '% l '(lokaler Hostname),'% h '(entfernter Hostname) oder'% r '(entfernter Benutzername). Es ist nicht möglich, Platzhalter anzugeben, aber dies sollte meiner Meinung nach praktisch genug sein. Beachten Sie, dass ein Server jeden von Ihnen gesendeten Schlüssel prüfen muss. Daher ist es besser, weniger Schlüssel anzugeben. Wildcards on Host funktionieren, siehe auch die Manualpage vonssh_config(5)
..ssh/authorized_keys
Datei auf den Remotecomputern an. Wenn Sie den Standarddateinamen.ssh/id_rsa
(oder id_dsa, id_ecdsa oder die aktuelle id_ed25519) verwenden, versucht ssh dies automatisch und Sie müssen dies nichtIdentityFile
in Ihrer Konfiguration (oder dem-i path/to/id_file
Parameter fürssh
) angeben .Meine bevorzugte Methode ermöglicht die automatische Auswahl des privaten Schlüssels
SSH ersetzt% l durch den lokalen Computernamen,% r durch den entfernten Benutzernamen und% h durch den entfernten Host. Wenn ich also eine Verbindung von meinem Computer namens foo zu bar als Benutzer herstellen möchte, führe ich Folgendes aus:
Und ssh würde automatisch verwenden:
Da der lokale Host ebenfalls gespeichert ist, können private Verzeichnisse über NFS gemeinsam genutzt werden (unterschiedlicher Schlüssel pro Computer!) Oder sogar ermittelt werden, auf welchem Computer sich der Schlüssel befinden sollte ...
quelle
In Anbetracht des Kommentars von StevenRoose, dass die Angabe vieler Schlüssel länger dauert und ich zufällig mit vielen Schlüsseln herumspiele, möchte ich meine persönliche Lösung vorschlagen.
Ich erstelle einen Symlink zu dem Schlüssel, den ich gerade verwenden möchte, und da sich dieser nur selten ändert, je nachdem an welchem Projekt ich arbeite, bin ich damit zufrieden.
Hier habe ich meine Schlüssel für Maschinen verlinkt, die unter virtualbox laufen:
Sie können auch ein sehr schnelles Skript hinzufügen, um zu einem anderen Satz zu wechseln, ohne den Befehl ln erneut manuell eingeben zu müssen.
Auch dies ist keine Lösung nur für zwei Schlüssel, aber für eine größere Anzahl könnte es funktionieren.
quelle