Comme la plupart des sysadmines, j'utilise Openssh tout le temps. J'ai sur une douzaine de clés SSH, j'aime avoir une clé SSH différente pour chaque hôte. Cependant, cela provoque un problème lorsque je me connecte à un hôte pour la première fois, et tout ce que j'ai est un mot de passe. Je veux simplement vous connecter à l'hôte à l'aide d'un mot de passe, pas de clé SSH dans ce cas. Cependant, le client SSH proposera toutes les clés publiques de mon ~/.ssh/
(Je le sais de regarder la sortie de ssh -v
). Comme j'en ai tant, je vais être déconnecté pour trop d'échecs d'authentification.
Y a-t-il un moyen de dire à mon client SSH de ne pas offrir toutes les clés SSH?
Ceci est attendu comportement selon la page man de ssh_config
:
IdentityFile
Specifies a file from which the user's DSA, ECDSA or DSA authentica‐
tion identity is read. The default is ~/.ssh/identity for protocol
version 1, and ~/.ssh/id_dsa, ~/.ssh/id_ecdsa and ~/.ssh/id_rsa for
protocol version 2. Additionally, any identities represented by the
authentication agent will be used for authentication.
[...]
It is possible to have multiple identity files specified in configu‐
ration files; all these identities will be tried in sequence. Mul‐
tiple IdentityFile directives will add to the list of identities
tried (this behaviour differs from that of other configuration
directives).
Fondamentalement, la spécification IdentityFile
s ajoute simplement des clés à une liste actuelle de l'agent SSH déjà présenté au client.
Essayez de remplacer ce comportement avec cela au bas de votre .ssh/config
déposer:
Host *
IdentitiesOnly yes
Vous pouvez également remplacer ce paramètre sur le niveau hôte, par exemple:
Host foo
User bar
IdentityFile /path/to/key
IdentitiesOnly yes
Bien que d'autres ont fait allusion à cela avec des solutions basées sur la configuration, il vaut probablement la peine d'indiquer que vous pouvez facilement faire ce temps unique sur la ligne de commande avec:
ssh -o 'PubkeyAuthentication no' myhostname.mydomain
Suite à la solution de James Sneeringer, vous pouvez simplement vouloir définir un SSH_Config le long des lignes de:
Host *.mycompany.com
IdentityFile .ssh/id_dsa_mycompany_main
Host *.mycustomer.com
IdentityFile .ssh/id_dsa_mycustomer
Host *
RSAAuthentication no #this should be up top, avoid ssh1 at all costs
PubkeyAuthentication no
Si vous vous connectez à une clé particulière à de nombreuses machines non dans un domaine commun, envisagez de leur donner tous des CNAMES dans votre propre DNS. Je fais cela avec tous les systèmes clients.
Semblable à la solution d'User23413, vous pouvez désactiver complètement l'authentification de la clé publique pour un hôte particulier (ou un modèle Wildcard):
Host *.example.org
RSAAuthentication no # SSHv1
PubkeyAuthentication no # SSHv2