Problem: Ich habe 20-30 ssh-agent
Identitäten. Die meisten Server verweigern die Authentifizierung mit Too many failed authentications
, da ich bei SSH normalerweise nicht versuchen kann, mich mit 20 verschiedenen Schlüsseln anzumelden.
Im Moment spezifiziere ich die Identitätsdatei für jeden Host manuell unter Verwendung der IdentityFile
und der IdentitiesOnly
Direktive, so dass SSH nur eine Schlüsseldatei ausprobiert, was funktioniert.
Leider funktioniert dies nicht mehr, sobald die Originalschlüssel nicht mehr verfügbar sind. ssh-add -l
zeigt mir die richtigen Pfade für jede Schlüsseldatei und sie stimmen mit den Pfaden in überein .ssh/config
, aber es funktioniert nicht. Anscheinend wählt SSH den Einzug nach der Signatur des öffentlichen Schlüssels und nicht nach dem Dateinamen aus, was bedeutet, dass die Originaldateien verfügbar sein müssen, damit SSH den öffentlichen Schlüssel extrahieren kann.
Hierbei gibt es zwei Probleme:
- Es funktioniert nicht mehr, sobald ich das Flash-Laufwerk mit den Tasten ausstecke
- Dadurch wird die Agentenweiterleitung unbrauchbar, da die Schlüsseldateien auf dem Remote-Host nicht verfügbar sind
Natürlich könnte ich die öffentlichen Schlüssel aus meinen Identitätsdateien extrahieren und auf meinem Computer und auf jedem Remotecomputer speichern, bei dem ich mich normalerweise anmelde. Dies scheint jedoch keine wünschenswerte Lösung zu sein.
Was ich brauche, ist die Möglichkeit, eine Identität von ssh-agent anhand des Dateinamens auszuwählen, damit ich den richtigen Schlüssel einfach mit .ssh/config
oder durch Übergabe auswählen kann -i /path/to/original/key
, selbst auf einem Remote-Host, auf den ich SSH-fähig bin. Es wäre sogar noch besser, wenn ich die Schlüssel "mit einem Spitznamen" versehen könnte, damit ich nicht einmal den vollständigen Pfad angeben muss.
authorized_keys
Datei, die je nach verwendetem Schlüssel unterschiedliche Befehle ausführt, ohne jemals einen direkten Shell-Zugriff zuzulassen.Antworten:
Ich denke, ich muss meine eigene Frage beantworten, da es anscheinend keine Möglichkeit gibt, eine Identität anhand des Dateinamens anzufordern.
Ich habe ein schnelles und schmutziges Python-Skript geschrieben, das
.ssh/fingerprints
für jeden Schlüssel, den der Agent enthält, eine öffentliche Schlüsseldatei erstellt . Ich kann dann diese Datei, die keinen geheimen Schlüssel enthält, mit angebenIdentityFile
und SSH wählt die richtige Identität vom SSH-Agenten aus. Funktioniert einwandfrei und ermöglicht es mir, den Agenten für so viele private Schlüssel zu verwenden, wie ich möchte.quelle
Lauf
auf dem Remotecomputer, um automatisch alle öffentlichen Schlüsseldateien zu generieren (vorausgesetzt, die öffentlichen Schlüssel in Ihrem
.ssh/config
sind benanntprivateKeyFileName.pub
und es sind keine inkonsistenten Pfade beteiligt). Rufen Siechown $USER .ssh/*
für Ihrensudo
Fall.quelle
Nehmen Sie die akzeptierte Lösung auf und nehmen Sie an, dass Sie nur die Identität wiederverwenden möchten, die für den Zugriff auf den ursprünglichen Server verwendet wurde.
ist ausreichend.
quelle