Je mets mes fichiers d’identité ssh dans mon dossier ~ / .ssh /. J'ai probablement environ 30 fichiers ici.
Lorsque je me connecte à des serveurs, je vais spécifier le fichier d’identité à utiliser, avec quelque chose comme:
ssh -i ~ / .ssh / client1-identité [email protected]
Cependant, si je ne spécifie pas de fichier d'identité et que j'utilise quelque chose comme ceci:
ssh [email protected]
Je reçois l'erreur
Trop d'échecs d'authentification pour user123
Je comprends que c’est parce que si aucun fichier d’identité n’est spécifié et que ssh peut trouver des fichiers d’identité, il les essayera tous.
Je comprends aussi que je peux éditer le ~/.ssh/config
fichier et spécifier quelque chose comme:
Hôte example.com PreferredAuthentications keyboard-interactive, mot de passe
afin d'empêcher cette connexion d'essayer des fichiers d'identité connus.
Donc, je suppose que je pourrais déplacer mes fichiers d’identité hors du ~/.ssh/
répertoire ou spécifier chaque hôte pour lequel je souhaite désactiver l’authentification de fichier d’identité dans le fichier de configuration, mais existe-t-il un moyen de dire à SSH d’acheter par défaut de ne pas rechercher fichiers d'identité? Ou pour spécifier ceux qu'il recherchera?
ssh -v
pour savoir à coup sûr.Réponses:
Vous pouvez utiliser cette
IdentitiesOnly=yes
option avecIdentityFile
(voir la page de manuel de ssh_config ). De cette façon, vous pouvez spécifier le (s) fichier (s) à rechercher.Dans cet exemple, ssh ne recherchera que les identités données dans les fichiers ssh_config + les 4 identifiées sur la ligne de commande (les identités fournies par l'agent seront ignorées):
Les formes
-i
et-o IdentityFile=
sont interchangeables.la source
IdentitiesOnly yes
(sans le "=")?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
peut ne pas toujours fonctionner, vous devrez peut-être exclure un hôte spécifiquement; voir superuser.com/questions/859661/…La réponse courte de user76528 est correcte, mais je viens d'avoir ce problème et pensais que quelques précisions seraient utiles. Vous pouvez également vous intéresser à cette solution si vous vous demandez "pourquoi ssh ignore-t-il l'option de configuration de mon fichier d'identité"?
Tout d’abord, contrairement à toutes les autres options de ssh_config, ssh n’utilise pas la première solution trouvée
IdentityFile
. Au lieu de cela, l'IdentityFile
option ajoute ce fichier à une liste d'identités utilisées. Vous pouvez empiler plusieursIdentityFile
options et le client ssh les testera toutes jusqu'à ce que le serveur en accepte une ou rejette la connexion.Deuxièmement, si vous utilisez un agent ssh, ssh essaiera automatiquement d'utiliser les clés de l'agent, même si vous ne les avez pas spécifiées avec l'option IdentityFile (ou -i) de ssh_config. C’est une raison fréquente d’
Too many authentication failures for user
erreur. L'utilisation de l'IdentitiesOnly yes
option désactivera ce comportement.Si vous utilisez plusieurs utilisateurs sur plusieurs systèmes, je vous recommande de placer
IdentitiesOnly yes
votre section globale de ssh_configIdentityFile
dans chacun des sous-sections Host appropriées.la source
IdentitiesOnly yes
dans la section globale de ssh_config est ce qui me l’a fait. Merci!Host * \ IdentityFile ~/.ssh/mykey
comme option de configuration, et au début il me semblait étrange d'avoir une entrée différente pour un site spécifique, par exemple,Host special \ IdentityFile ~/.ssh/specialkey \ IdentitiesOnly yes
continuer à fournirmykey
au lieu despecialkey
. Il n'était certainement pas clair, jusqu'à ce que je réalise (d'après votre réponse) que les entrées d'IdentityFile sont empilées dans un ordre d'évaluation et que le dernier défini sera utilisé. LeIdentityFile ~/.ssh/mykey
problème résolu a été résolu et la clé unique correcte a été utilisée.git pull/push
commandes essayaient toutes les identités chargées dans mon agent. Ce n'était pas un problème jusqu'à ce que j'ai eu trop de clés à un moment donné.Je le fais généralement comme ça:
Les options sont les suivantes:
-o IdentitiesOnly=yes
- indique à SSH de n'utiliser que les clés fournies via l'interface de ligne de commande et aucune depuis$HOME/.ssh
ou avec ssh-agent-F /dev/null
- désactive l'utilisation de$HOME/.ssh/config
-i ~/path/to/some_id_rsa
- la clé que vous souhaitez utiliser explicitement pour la connexionExemple
Notez dans la sortie ci-dessus que
ssh
lamy_id_rsa
clé privée n’a été identifiée que par l’intermédiaire de la CLI et qu’elle l’utilise pour se connecter à someserver.Plus précisément ces sections:
et:
la source
-F /dev/null
est la pièce manquante dans les autres réponses.Dans le cas où vous avez plusieurs clés, vous rencontrerez invariablement l'erreur "Trop d'échecs d'authentification". Si vous avez un mot de passe et souhaitez simplement vous en servir pour vous connecter, voici comment procéder.
Pour utiliser SEULEMENT l'authentification par mot de passe et NON pour utiliser la clé publique et NE PAS utiliser le "clavier interactif" quelque peu trompeur (qui est un sur-ensemble comprenant un mot de passe), vous pouvez le faire à partir de la ligne de commande:
la source
Utilisez IdentityFile mais continuez à utiliser ssh-agent pour éviter les reprogrammes de phrase secrète
La solution acceptée d’utilisation
IdentitiesOnly yes
signifie que vous ne pourrez jamais tirer parti de ssh-agent, ce qui entraîne des invites répétées pour votre phrase secrète lors du chargement de votre clé.Pour continuer à utiliser
ssh-agent
et éviter les erreurs "Trop d'échecs d'authentification", essayez ceci:Supprimez tous les scripts de démarrage de la console interactive dans lesquels les clés sont automatiquement chargées
ssh-agent
.ajouter
AddKeysToAgent yes
à la configuration ssh de votre client. Cela vous demandera la phrase secrète lors de la première connexion, mais ajoutera ensuite la clé à votre agent.utilisez
ssh-add -D
lorsque vous obtenez des erreurs de "trop d'authentification". Ceci simplement "réinitialise" (supprime) votre cache ssh-agent. Puis tentez à nouveau la connexion au cours de la même session. Une phrase secrète vous sera demandée et, une fois acceptée, elle sera ajoutée à votre agent. Comme vous n’avez qu’une clé dans votre agent, vous serez autorisé à vous connecter. ssh-agent est alors toujours là pour les connexions futures au cours de la même session afin d’éviter les reprogrammes.la source
Le client ssh et le
ssh-agent
communiquent via un socket de domaine Unix dont le nom est spécifié au client par laSSH_AUTH_SOCK
variable d'environnement (définie par l'agent lors de son démarrage).Ainsi, pour empêcher une seule invocation du client d'interroger l'agent, cette variable peut être définie explicitement sur une valeur non valide, telle qu'une chaîne vide;
Une telle invocation client échouera dans la communication avec l'agent et ne pourra offrir au serveur que les identités disponibles sous forme de fichiers
~/.ssh/
ou spécifiées sur la ligne de commande-i
.la source
Vous avez eu la réponse tout le temps (ou presque):
Travaillé pour moi
la source
ajoutez ceci à la fin du
~/.ssh/config
fichier pour empêcher l'utilisation de clés pour les serveurs non config:la source