Ich habe meine ssh-Identitätsdateien in meinem ~ / .ssh / -Ordner abgelegt. Ich habe wahrscheinlich etwa 30 Dateien dort.
Wenn ich eine Verbindung zu Servern herstelle, gebe ich die zu verwendende Identitätsdatei mit so etwas wie an
ssh -i ~ / .ssh / client1-identity [email protected]
Wenn ich jedoch keine Identitätsdatei spezifiziere und nur so etwas verwende:
ssh [email protected]
Ich bekomme den Fehler
Zu viele Authentifizierungsfehler für user123
Ich verstehe das, weil wenn keine Identitätsdatei angegeben ist und ssh Identitätsdateien finden kann, es alle von ihnen versuchen wird.
Ich verstehe auch, dass ich die ~/.ssh/config
Datei bearbeiten und Folgendes angeben kann:
Host example.com PreferredAuthentications tastaturinteraktiv, Passwort
um zu verhindern, dass diese Verbindung bekannte Identitätsdateien versucht.
Ich schätze, ich könnte meine Identitätsdateien aus dem ~/.ssh/
Verzeichnis verschieben oder jeden Host, für den ich die Identitätsdateiauthentifizierung deaktivieren möchte, in der Konfigurationsdatei angeben. Es gibt jedoch eine Möglichkeit, SSH anzuweisen, standardmäßig keine Suche zu kaufen Identitätsdateien? Oder um diejenigen anzugeben, nach denen gesucht werden soll?
quelle
ssh -v
, um sicher herauszufinden.Antworten:
Sie können die
IdentitiesOnly=yes
Option zusammen mitIdentityFile
(siehe Manpage ssh_config ) verwenden. Auf diese Weise können Sie angeben, nach welchen Dateien gesucht werden soll.In diesem Beispiel sucht ssh nur in den Identitäten, die in den ssh_config-Dateien angegeben sind, und in den vier in der Befehlszeile aufgelisteten Identitäten (die vom Agenten angegebenen Identitäten werden ignoriert):
Die Formen
-i
und-o IdentityFile=
sind austauschbar.quelle
IdentitiesOnly yes
(ohne das "=")?Configuration options may be separated by whitespace or optional whitespace and exactly one '='; the latter format is useful to avoid the need to quote whitespace when specifying configuration options using the ssh, scp, and sftp -o option.
IdentitiesOnly
Möglicherweise funktioniert dies nicht immer. Möglicherweise müssen Sie einen Host speziell ausschließen. siehe superuser.com/questions/859661/...Die kurze Antwort von user76528 ist richtig, aber ich hatte gerade dieses Problem und dachte, eine Ausarbeitung wäre nützlich. Diese Lösung interessiert Sie möglicherweise auch, wenn Sie sich gefragt haben, warum ssh die Konfigurationsoption für meine Identitätsdatei ignoriert.
Erstens verwendet ssh im Gegensatz zu jeder anderen Option in ssh_config nicht die erste
IdentityFile
, die es findet. StattdessenIdentityFile
fügt die Option diese Datei einer Liste der verwendeten Identitäten hinzu. Sie können mehrereIdentityFile
Optionen stapeln , und der ssh-Client probiert sie alle aus, bis der Server eine akzeptiert oder die Verbindung ablehnt.Zweitens, wenn Sie einen ssh-Agenten verwenden, versucht ssh automatisch, die Schlüssel im Agenten zu verwenden, auch wenn Sie sie nicht mit der Option IdentityFile (oder -i) von ssh_config angegeben haben. Dies ist ein häufiger Grund, warum Sie möglicherweise den
Too many authentication failures for user
Fehler erhalten. Wenn Sie dieseIdentitiesOnly yes
Option verwenden, wird dieses Verhalten deaktiviert.Wenn Sie ssh als mehrere Benutzer auf mehreren Systemen verwenden, empfehle ich,
IdentitiesOnly yes
Ihren globalen Abschnitt von ssh_config und jedenIdentityFile
in die entsprechenden Host-Unterabschnitte einzufügen .quelle
IdentitiesOnly yes
globalen Abschnitt von ssh_config einzutragen, hat mir geholfen. Vielen Dank!Host * \ IdentityFile ~/.ssh/mykey
als Konfigurationsoption verwendet, und zunächst schien es seltsam, dass für eine bestimmte Site ein anderer Eintrag vorhanden war, der z. B.Host special \ IdentityFile ~/.ssh/specialkey \ IdentitiesOnly yes
weiterhinmykey
statt liefertespecialkey
. Es war sicherlich unklar, bis mir (aus Ihrer Antwort) klar wurde, dass die IdentityFile-Einträge in der Reihenfolge ihrer Auswertung gestapelt sind und der zuletzt definierte verwendet wird. Das EntfernenIdentityFile ~/.ssh/mykey
löste das Problem, und der richtige einzelne Schlüssel wurde verwendet.git pull/push
Befehle jede einzelne in meinen Agenten geladene Identität testeten. Es war kein Problem, bis ich zu viele Schlüssel hatte.Ich mache es im Allgemeinen so:
Folgende Optionen stehen zur Verfügung:
-o IdentitiesOnly=yes
- weist SSH an, nur Schlüssel zu verwenden, die über die CLI und keine vom$HOME/.ssh
oder über ssh-agent bereitgestellt werden-F /dev/null
- deaktiviert die Verwendung von$HOME/.ssh/config
-i ~/path/to/some_id_rsa
- den Schlüssel, den Sie ausdrücklich für die Verbindung verwenden möchtenBeispiel
Beachten Sie in der obigen Ausgabe, dass
ssh
nur dermy_id_rsa
private Schlüssel über die CLI identifiziert wurde und dass er zum Herstellen einer Verbindung mit einem Server verwendet wird.Speziell diese Abschnitte:
und:
quelle
-F /dev/null
fehlt das Stück bei den anderen Antworten.In dem Szenario, in dem Sie viele Schlüssel haben, wird immer der Fehler "Zu viele Authentifizierungsfehler" angezeigt. Wenn Sie ein Passwort haben und sich einfach mit diesem Passwort anmelden möchten, gehen Sie wie folgt vor.
Um NUR die Kennwortauthentifizierung und NICHT den öffentlichen Schlüssel zu verwenden und NICHT den etwas irreführenden "keyboard-interactiven" (der eine Obermenge einschließlich des Kennworts ist) zu verwenden, können Sie dies über die Befehlszeile tun:
quelle
Verwenden Sie IdentityFile, aber weiterhin ssh-agent, um Passphrasenaufforderungen zu vermeiden
Die akzeptierte Lösung der Verwendung
IdentitiesOnly yes
bedeutet, dass Sie ssh-agent nie nutzen können, was zu wiederholten Aufforderungen zur Eingabe Ihrer Passphrase führt, wenn Sie Ihren Schlüssel laden.ssh-agent
Versuchen Sie Folgendes, um die Fehler "Zu viele Authentifizierungsfehler" weiterhin zu verwenden und zu vermeiden:Entfernen Sie alle Startskripte für die interaktive Konsole, in die automatisch Schlüssel geladen werden
ssh-agent
.Fügen
AddKeysToAgent yes
Sie die SSH-Konfiguration Ihres Clients hinzu. Dadurch werden Sie beim ersten Herstellen einer Verbindung zur Eingabe der Passphrase aufgefordert. Fügen Sie dann den Schlüssel zu Ihrem Agenten hinzu.Verwenden
ssh-add -D
Sie diese Option, wenn zu viele Authentifizierungsfehler auftreten. Dadurch wird der ssh-agent-Cache einfach zurückgesetzt (gelöscht). Versuchen Sie dann erneut, die Verbindung innerhalb derselben Sitzung herzustellen. Sie werden aufgefordert, eine Passphrase einzugeben. Sobald die Passphrase akzeptiert wurde, wird sie Ihrem Agenten hinzugefügt. Da Sie nur einen Schlüssel in Ihrem Agenten haben, können Sie eine Verbindung herstellen. ssh-agent ist dann während derselben Sitzung weiterhin für zukünftige Verbindungen verfügbar, um erneute Eingabeaufforderungen zu vermeiden.quelle
Der ssh-Client und der
ssh-agent
kommunizieren über einen Unix-Domain-Socket, dessen Name dem Client von derSSH_AUTH_SOCK
Umgebungsvariablen (die vom Agenten beim Start festgelegt wurde) angegeben wird.Um zu verhindern, dass ein einzelner Aufruf des Clients den Agenten abfragt, kann diese Variable explizit auf einen ungültigen Wert wie eine leere Zeichenfolge gesetzt werden.
Ein solcher Client-Aufruf kann nicht mit dem Agenten kommunizieren und kann dem Server nur die Identitäten anbieten, die als Dateien in
~/.ssh/
oder über die Befehlszeile angegeben sind-i
.quelle
Sie hatten die Antwort die ganze Zeit (fast):
Hat für mich gearbeitet.
quelle
Fügen Sie dies am Ende der
~/.ssh/config
Datei hinzu, um die Verwendung von Schlüsseln für Nicht-Konfigurationsserver zu verhindern:quelle