Impossibile negoziare con XX.XXX.XX.XX: nessun tipo di chiave host corrispondente trovato. La loro offerta: ssh-dss


110

Sto provando a creare un repository git sul mio host web e clonarlo sul mio computer. Ecco cosa ho fatto:

  1. Ho creato un repository sul server remoto.
  2. Ho generato una coppia di chiavi: ssh-keygen -t dsa.
  3. Ho aggiunto la mia chiave a ssh-agent.
  4. Ho copiato nella chiave pubblica del server in ~/.ssh.

E poi, dopo un tentativo di eseguire il comando git clone ssh://user@host/path-to-repository, ottengo un errore:

Impossibile negoziare con XX.XXX.XX.XX: nessun tipo di chiave host corrispondente trovato. La loro offerta: ssh-dss
fatal: impossibile leggere dal repository remoto.
Assicurati di disporre dei diritti di accesso corretti e che il repository esista.

Cosa significa?


Risposte:


171

La versione recente di openssh ha deprecato le chiavi DSA per impostazione predefinita. Dovresti suggerire al tuo provider GIT di aggiungere una chiave host ragionevole. Affidarsi solo ai DSA non è una buona idea.

Come soluzione alternativa, devi dire al tuo sshcliente che desideri accettare le chiavi host DSA, come descritto nella documentazione ufficiale per l'utilizzo legacy . Hai poche possibilità, ma ti consiglio di aggiungere queste righe nel tuo ~/.ssh/configfile:

Host your-remote-host
    HostkeyAlgorithms +ssh-dss

Un'altra possibilità è usare la variabile d'ambiente GIT_SSHper specificare queste opzioni:

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

1
Ora ha funzionato senza specificare il nome host, solo con HostkeyAlgorithms +ssh-dss. Grazie.
giovannipds

1
@giovannipds Deve certamente essere l'host remoto a cui ti stai connettendo. @ downvoters Spiegare i downvotes sarebbe carino.
Jakuje

@Jakuje mi dispiace amico, ho sbagliato a cliccare e, a causa dell'impossibilità di cambiare subito, non ho potuto aggiornare la mia risposta.
giovannipds

1
@Jakuje ho già aggiornato il mio voto, giusto per farti sapere. =)
giovannipds

Se non c'è un file di questo tipo nella tua directory .ssh, un file di testo vuoto chiamato "config" andrà bene.
RMorrisey

78

Puoi anche aggiungere -oHostKeyAlgorithms=+ssh-dssnella tua riga ssh:

ssh -oHostKeyAlgorithms=+ssh-dss user@host

Questa è la soluzione più rapida +1 perché risolve permanentemente anche il problema per quell'host. Un altro suggerimento per il lungo periodo è che, se possibile, il sistema host dovrebbe avere il suo demone SSH aggiornato poiché sembra che DSS non sia più considerato molto sicuro.
Areeb Soo Yasir

20

Per me questo ha funzionato: (aggiunto in .ssh\config)

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

La seconda opzione non è correlata al problema e la prima è già menzionata nella mia risposta.
Jakuje

Host your-host non ha funzionato per me, a condizione che your-host sia il nome dell'host da cui sto eseguendo il comando ssh (client). Ma Host * ha funzionato per me.
Krischu

2
@Krischu no, yuor-hostè l'host contro cui stai sshcombattendo. L'impostazione di impostazioni predefinite non sicure per tutti gli host è sempre una cattiva idea.
Jakuje

10

Se sei come me e preferisci non creare questo sistema di falle di sicurezza o a livello di utente, puoi aggiungere un'opzione di configurazione a tutti i repository git che ne hanno bisogno eseguendo questo comando in quei repository. (nota funziona solo con la versione git> = 2.10, rilasciata il 04/09/2016)

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

Tuttavia, funziona solo dopo aver configurato il repository. Se non ti senti a tuo agio ad aggiungere un telecomando manualmente (e vuoi solo clonarlo), puoi eseguire il clone in questo modo:

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

quindi esegui il primo comando per renderlo permanente.

Se non si dispone delle ultime novità e si desidera comunque mantenere il buco il più locale possibile, consiglio di metterlo

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

in un file da qualche parte, diciamo git_ssh_allow_dsa_keys.sh, e lo sourceing quando necessario.


3

Voglio collaborare un po 'con la soluzione per il lato server. Quindi, il server sta dicendo che non supporta DSA, questo perché il client openssh non lo attiva per impostazione predefinita :

OpenSSH 7.0 e versioni successive disabilitano in modo simile l'algoritmo della chiave pubblica ssh-dss (DSA). Anch'esso è debole e ne sconsigliamo l'uso.

Quindi, per risolvere questo problema sul lato server, dovrei attivare altri algoritmi chiave come RSA o ECDSA. Ho appena avuto questo problema con un server in una lan. Suggerisco quanto segue:

Aggiorna openssh:

yum update openssh-server

Unisci nuove configurazioni in sshd_config se è presente sshd_config.rpmnew.

Verifica che ci siano chiavi host in / etc / ssh /. Se non generane di nuovi, vedi 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

Verificare in / etc / ssh / sshd_config la configurazione di HostKey. Dovrebbe consentire la configurazione di RSA ed ECDSA. (Se tutti sono commentati per impostazione predefinita consentirà anche l'RSA, vedere nella man sshd_configparte di 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

Per il lato client, crea una chiave per ssh (non un DSA come nella domanda) semplicemente facendo questo:

ssh-keygen

Dopodiché, poiché ci sono più opzioni rispetto a ssh-dss (DSA), il client openssh (> = v7) dovrebbe connettersi con RSA o un algoritmo migliore.

Ecco un altro buon articolo.

Questa è la mia prima domanda risposta, accolgo suggerimenti: D.


1

Come si specificano più algoritmi? Chiedo perché git si è appena aggiornato sul mio laptop di lavoro, (Windows 10, utilizzando la build ufficiale di Git per Windows) e ho ricevuto questo errore quando ho provato a eseguire il push di un ramo del progetto sul mio Azure DevOps remoto. Ho provato a premere --set-upstream e ho ottenuto questo:

Unable to negotiate with 20.44.80.98 port 22: no matching key exchange method found. Their offer: diffie-hellman-group1-sha1,diffie-hellman-group14-sha1
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

Quindi come si implementano i suggerimenti di cui sopra, consentendo entrambi? (Per fare una rapida operazione, ho usato la soluzione di @ golvok con group14 e ha funzionato, ma davvero non so se 1 o 14 è migliore, ecc.)


-3

O segui l'approccio sopra o questo

Crea il file di configurazione nella directory .ssh e aggiungi queste righe.

host xxx.xxx
 Hostname xxx.xxx
 IdentityFile ~/.ssh/id_rsa
 User xxx
 KexAlgorithms +diffie-hellman-group1-sha1

Questo sta risolvendo un problema completamente diverso.
Jakuje
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.