
Ich habe meine SSH-Identitätsdateien in meinen ~/.ssh/
Ordner gelegt. Wahrscheinlich sind dort etwa 30 Dateien.
Wenn ich mich mit Servern verbinde, gebe ich die zu verwendende Identitätsdatei mit etwas wie
ssh -i ~/.ssh/client1-identity[email geschützt]
Wenn ich jedoch keine Identitätsdatei angebe und einfach so etwas verwende:
ssh[email geschützt]
Ich erhalte den Fehler
Zu viele Authentifizierungsfehler für Benutzer123
Ich verstehe das so: Wenn keine Identitätsdatei angegeben ist und SSH die Identitätsdateien finden kann, werden alle ausprobiert.
Mir ist auch klar, dass ich die Datei bearbeiten ~/.ssh/config
und etwas wie Folgendes angeben kann:
Hosten Sie example.com Bevorzugte Authentifizierungen: Tastatur-Interaktiv, Passwort
um zu verhindern, dass diese Verbindung bekannte Identitätsdateien ausprobiert.
Ich schätze, ich könnte meine Identitätsdateien aus dem ~/.ssh/
Verzeichnis verschieben oder in der Konfigurationsdatei jeden Host angeben, für den ich die Identitätsdatei-Authentifizierung deaktivieren möchte. Gibt es jedoch eine Möglichkeit, SSH anzuweisen, standardmäßig nicht nach Identitätsdateien zu suchen? Oder diejenigen anzugeben, nach denen gesucht werden soll?
Antwort1
Sie können die IdentitiesOnly=yes
Option zusammen mit verwenden IdentityFile
(siehessh_config - Manpage). Auf diese Weise können Sie angeben, nach welcher/welchen Datei(en) gesucht werden soll.
In diesem Beispiel wird sshnurSehen Sie sich die in den ssh_config-Dateien angegebenen Identitäten an + die 4, die in der Befehlszeile aufgelistet sind (die vom Agenten bereitgestellten Identitäten werden ignoriert):
ssh -o IdentitiesOnly=yes \
-o IdentityFile=id1.key \
-o IdentityFile=id2.key \
-i id3.key \
-i id4.key \
[email protected]
Die Formen -i
und -o IdentityFile=
sind austauschbar.
In .ssh/config
können Sie eine Konfiguration wie diese einschließen:
Host example
User user123
Hostname example.com
IdentityFile ~/.ssh/id_rsa_example
IdentityFile ~/.ssh/id_rsa_example2
IdentitiesOnly yes
Antwort2
Kurze Antwort von user76528ist richtig, aber ich hatte gerade dieses Problem und dachte, eine ausführlichere Erläuterung wäre nützlich. Diese Lösung könnte Sie auch interessieren, wenn Sie sich gefragt haben: „Warum ignoriert SSH meine Identitätsdatei-Konfigurationsoption?“
Erstens verwendet ssh im Gegensatz zu allen anderen Optionen in ssh_config nicht die erste Datei, IdentityFile
die es findet. Stattdessen IdentityFile
fügt die Option diese Datei einer Liste verwendeter Identitäten hinzu. Sie können mehrere IdentityFile
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 ssh_config
Option IdentityFile
(oder -i
) angegeben haben. Dies ist ein häufiger Grund für den Too many authentication failures for user
Fehler. Durch die Verwendung der IdentitiesOnly yes
Option wird dieses Verhalten deaktiviert.
Wenn Sie als mehrere Benutzer per SSH auf mehrere Systeme zugreifen, empfehle ich, dies IdentitiesOnly yes
in Ihren globalen Abschnitt von einzufügen ssh_config
und jedes IdentityFile
in die entsprechenden Host-Unterabschnitte einzufügen.
Antwort3
Ich mache es im Allgemeinen so:
$ ssh -o IdentitiesOnly=yes -F /dev/null -i ~/path/to/some_id_rsa [email protected]
Die Optionen sind wie folgt:
-o IdentitiesOnly=yes
- weist SSH an, nur Schlüssel zu verwenden, die über die CLI bereitgestellt werden und keine von$HOME/.ssh
oder über den SSH-Agenten-F /dev/null
- deaktiviert die Verwendung von$HOME/.ssh/config
-i ~/path/to/some_id_rsa
- den Schlüssel, den Sie explizit für die Verbindung verwenden möchten
Beispiel
$ ssh -v -o IdentitiesOnly=yes -F /dev/null -i ~/my_id_rsa [email protected]
OpenSSH_6.2p2, OSSLShim 0.9.8r 8 Dec 2011
debug1: Reading configuration data /dev/null
debug1: Connecting to someserver.mydom.com [10.128.12.124] port 22.
debug1: Connection established.
debug1: identity file /Users/sammingolelli/my_id_rsa type 1
debug1: identity file /Users/sammingolelli/my_id_rsa-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.2
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.3
debug1: match: OpenSSH_5.3 pat OpenSSH_5*
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 none
debug1: kex: client->server aes128-ctr hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug1: Server host key: RSA f5:60:30:71:8c:a3:da:a3:fe:b1:6d:0b:20:87:23:e1
debug1: Host 'someserver' is known and matches the RSA host key.
debug1: Found key in /Users/sammingolelli/.ssh/known_hosts:103
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /Users/sammingolelli/my_id_rsa
debug1: Server accepts key: pkalg ssh-rsa blen 535
debug1: read PEM private key done: type RSA
debug1: Authentication succeeded (publickey).
Authenticated to someserver.mydom.com ([10.128.12.124]:22).
debug1: channel 0: new [client-session]
debug1: Requesting [email protected]
debug1: Entering interactive session.
Last login: Tue Dec 8 19:03:24 2015 from 153.65.219.15
someserver$
Beachten Sie in der obigen Ausgabe, dass ssh
der private Schlüssel nur über die CLI identifiziert wurde my_id_rsa
und dass dieser für die Verbindung mit einem Server verwendet wird.
Insbesondere diese Abschnitte:
debug1: identity file /Users/sammingolelli/my_id_rsa type 1
debug1: identity file /Users/sammingolelli/my_id_rsa-cert type -1
Und:
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /Users/sammingolelli/my_id_rsa
debug1: Server accepts key: pkalg ssh-rsa blen 535
debug1: read PEM private key done: type RSA
debug1: Authentication succeeded (publickey).
Antwort4
Verwenden Sie IdentityFile, aber weiterhin ssh-agent, um erneute Passphrase-Eingabeaufforderungen zu vermeiden
Die akzeptierte Lösung der Verwendung IdentitiesOnly yes
bedeutet, dass Sie die Vorteile von ssh-agent nie nutzen können, was beim Laden Ihres Schlüssels zu wiederholten Aufforderungen zur Eingabe Ihrer Passphrase führt.
ssh-agent
Um die Fehlermeldung „Zu viele Authentifizierungsfehler“ weiterhin zu verwenden und zu vermeiden, versuchen Sie Folgendes:
Entfernen Sie alle interaktiven Konsolen-Startskripts, die automatisch Schlüssel in laden
ssh-agent
.zur SSH-Konfiguration Ihres Clients hinzufügen
AddKeysToAgent yes
. Dadurch werden Sie bei der ersten Verbindung zur Eingabe der Passphrase aufgefordert, fügen dann aber den Schlüssel zu Ihrem Agenten hinzu.Verwenden Sie es
ssh-add -D
, wenn Sie „zu viele Authentifizierungsfehler“ erhalten. Dadurch wird Ihr SSH-Agent-Cache einfach „zurückgesetzt“ (gelöscht). Versuchen Sie dann, die Verbindung innerhalb derselben Sitzung erneut herzustellen. Sie werden zur Eingabe einer Passphrase aufgefordert. Sobald Sie diese akzeptiert haben, wird sie Ihrem Agenten hinzugefügt. Da Sie in Ihrem Agenten nur einen Schlüssel haben, dürfen Sie eine Verbindung herstellen. Der SSH-Agent ist dann für zukünftige Verbindungen während derselben Sitzung immer noch vorhanden, um erneute Eingabeaufforderungen zu vermeiden.Host ex example.com User joe HostName example.com PreferredAuthentications publickey,password IdentityFile /path/to/id_rsa AddKeysToAgent yes