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:
ssh-keygen -t dsa
.~/.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?
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
Vous pouvez également ajouter -oHostKeyAlgorithms=+ssh-dss
dans votre ligne ssh:
ssh -oHostKeyAlgorithms=+ssh-dss user@Host
Pour moi cela a fonctionné: (ajouté dans .ssh\config
)
Host *
HostkeyAlgorithms +ssh-dss
PubkeyAcceptedKeyTypes +ssh-dss
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 source
le modifiez-le si nécessaire.
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.
C’est à ma première question que je réponds, j’apprécie les suggestions: D.