web-dev-qa-db-fra.com

Impossible de négocier avec XX.XXX.XX.XX: aucun type de clé d'hôte correspondant trouvé. Leur offre: ssh-dss

J'essaie de créer un référentiel git sur mon hôte Web et de le cloner sur mon ordinateur. Voici ce que j'ai fait:

  1. J'ai créé un référentiel sur le serveur distant.
  2. J'ai généré une paire de clés: ssh-keygen -t dsa.
  3. J'ai ajouté ma clé à ssh-agent.
  4. J'ai copié sur la clé publique du serveur dans ~/.ssh.

Et puis, après une tentative d'exécution de la commande git clone ssh://user@Host/path-to-repository, j'obtiens une erreur:

Impossible de négocier avec XX.XXX.XX.XX: aucun type de clé d'hôte correspondant trouvé. Leur offre: ssh-dss
fatal: Impossible de lire à partir du référentiel distant.
Assurez-vous que vous disposez des droits d'accès appropriés et que le référentiel existe.

Qu'est-ce que ça veut dire?

106
Nikita Gorshkov

La version récente d'OpenSsh a déprécié les clés DSA par défaut. Vous devriez suggérer à votre fournisseur GIT d’ajouter une clé d’hôte raisonnable. Compter uniquement sur DSA n'est pas une bonne idée.

Pour résoudre ce problème, vous devez indiquer à votre client ssh que vous souhaitez accepter les clés de l'hôte DSA, comme indiqué dans le documentation officielle pour utilisation héritée . Vous avez peu de possibilités, mais je vous recommande d’ajouter ces lignes dans votre fichier ~/.ssh/config:

Host your-remote-Host
    HostkeyAlgorithms +ssh-dss

Une autre possibilité consiste à utiliser la variable d'environnement GIT_SSH pour spécifier les options suivantes:

GIT_SSH_COMMAND="ssh -oHostKeyAlgorithms=+ssh-dss" git clone ssh://user@Host/path-to-repository
167
Jakuje

Vous pouvez également ajouter -oHostKeyAlgorithms=+ssh-dss dans votre ligne ssh:

ssh -oHostKeyAlgorithms=+ssh-dss user@Host
73
Guillaume

Pour moi cela a fonctionné: (ajouté dans .ssh\config)

Host *
HostkeyAlgorithms +ssh-dss
PubkeyAcceptedKeyTypes +ssh-dss
17
user2885534

Si vous êtes comme moi et que vous préférez ne pas créer ce trou de sécurité ou à l'échelle de l'utilisateur, vous pouvez ajouter une option de configuration à tous les dépôts git qui en ont besoin en exécutant cette commande dans ces dépôts. (note ne fonctionne qu'avec la version git> = 2.10, publiée le 2016-09-04)

git config core.sshCommand 'ssh -oHostKeyAlgorithms=+ssh-dss'

Cela ne fonctionne que lorsque le dépôt est configuré. Si vous n'êtes pas habitué à ajouter une télécommande manuellement (et que vous voulez simplement cloner), vous pouvez exécuter le clone comme suit:

GIT_SSH_COMMAND='ssh -oHostKeyAlgorithms=+ssh-dss' git clone ssh://user@Host/path-to-repository

puis exécutez la première commande pour la rendre permanente.

Si vous ne possédez pas les dernières informations et que vous souhaitez tout de même garder le trou aussi local que possible, je vous recommande de mettre

export GIT_SSH_COMMAND='ssh -oHostKeyAlgorithms=+ssh-dss'

dans un fichier quelque part, dites git_ssh_allow_dsa_keys.sh et sourcele modifiez-le si nécessaire.

8
golvok

Je souhaite collaborer un peu avec la solution côté serveur. Donc, le serveur dit qu'il ne supporte pas DSA, c'est parce que le le client openssh ne l'active pas par défaut :

OpenSSH 7.0 et versions supérieures désactivent de la même manière l'algorithme de clé publique ssh-dss (DSA). Il est également faible et nous déconseillons son utilisation.

Donc, pour résoudre ce problème côté serveur, je devrais activer d'autres algorithmes de clé comme RSA ou ECDSA. Je viens d'avoir ce problème avec un serveur dans un LAN. Je suggère ce qui suit:

Mettre à jour le openssh:

yum update openssh-server

Fusionnez les nouvelles configurations dans sshd_config s'il existe un fichier sshd_config.rpmnew.

Vérifiez qu'il y a des clés d'hôtes dans/etc/ssh /. Si ce n’est pas le cas, consultez man ssh-keygen.

$ ll /etc/ssh/
total 580
-rw-r--r--. 1 root root     553185 Mar  3  2017 moduli
-rw-r--r--. 1 root root       1874 Mar  3  2017 ssh_config
drwxr-xr-x. 2 root root       4096 Apr 17 17:56 ssh_config.d
-rw-------. 1 root root       3887 Mar  3  2017 sshd_config
-rw-r-----. 1 root ssh_keys    227 Aug 30 15:33 ssh_Host_ecdsa_key
-rw-r--r--. 1 root root        162 Aug 30 15:33 ssh_Host_ecdsa_key.pub
-rw-r-----. 1 root ssh_keys    387 Aug 30 15:33 ssh_Host_ed25519_key
-rw-r--r--. 1 root root         82 Aug 30 15:33 ssh_Host_ed25519_key.pub
-rw-r-----. 1 root ssh_keys   1675 Aug 30 15:33 ssh_Host_rsa_key
-rw-r--r--. 1 root root        382 Aug 30 15:33 ssh_Host_rsa_key.pub

Dans le fichier/etc/ssh/sshd_config, vérifiez la configuration de HostKey. Cela devrait permettre la configuration de RSA et ECDSA. (Si tous sont commentés par défaut, cela autorisera aussi le RSA, voir dans man sshd_config la partie de HostKey).

# HostKey for protocol version 1
#HostKey /etc/ssh/ssh_Host_key
# HostKeys for protocol version 2
HostKey /etc/ssh/ssh_Host_rsa_key
#HostKey /etc/ssh/ssh_Host_dsa_key
HostKey /etc/ssh/ssh_Host_ecdsa_key
HostKey /etc/ssh/ssh_Host_ed25519_key

Pour le côté client, créez une clé pour ssh (et non un DSA comme dans la question) en procédant simplement comme suit:

ssh-keygen

Après cela, comme il existe plus d'options que ssh-dss (DSA), le client openssh (> = v7) doit se connecter avec un algorithme RSA ou supérieur.

Voici un autre bon article.

C’est à ma première question que je réponds, j’apprécie les suggestions: D.

2
Gus Calca