web-dev-qa-db-fra.com

Arrêtez le client SSH d'offrir toutes les clés publiques qu'il peut trouver?

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?

34
Rory

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 IdentityFiles 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
33
Mathias Bynens

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
38
Andrew Ferrier

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.

11

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
2