Sto cercando di creare un repository git sul mio web host e clonarlo sul mio computer. Ecco cosa ho fatto:
ssh-keygen -t dsa
.~/.ssh
.E poi, dopo un tentativo di eseguire il comando git clone ssh://[email protected]/path-to-repository
, ottengo un errore:
Impossibile negoziare con XX.XXX.XX.XX: non è stato trovato alcun tipo di chiave Host corrispondente. La loro offerta: ssh-dss
fatale: impossibile leggere dal repository remoto.
Assicurati di disporre dei diritti di accesso corretti e del repository esistente.
Cosa significa?
La recente versione di openssh ha deprecato le chiavi DSA per impostazione predefinita. Dovresti suggerire al tuo fornitore GIT di aggiungere qualche ragionevole chiave Host. Affidarsi solo a DSA non è una buona idea.
Per ovviare al problema, è necessario comunicare al client ssh
che si desidera accettare le chiavi dell'host DSA, come descritto nella documentazione ufficiale per l'utilizzo legacy . Hai poche possibilità, ma ti consiglio di aggiungere queste righe nel tuo file ~/.ssh/config
:
Host your-remote-Host
HostkeyAlgorithms +ssh-dss
Un'altra possibilità è usare la variabile d'ambiente GIT_SSH
per specificare queste opzioni:
GIT_SSH_COMMAND="ssh -oHostKeyAlgorithms=+ssh-dss" git clone ssh://[email protected]/path-to-repository
Puoi anche aggiungere -oHostKeyAlgorithms=+ssh-dss
nella tua linea ssh:
ssh -oHostKeyAlgorithms=+ssh-dss [email protected]
Per me questo ha funzionato: (aggiunto in .ssh\config
)
Host *
HostkeyAlgorithms +ssh-dss
PubkeyAcceptedKeyTypes +ssh-dss
Se sei come me, e preferiresti non creare questo sistema di sicurezza o l'intero livello utente, allora puoi aggiungere un'opzione di configurazione a qualsiasi repository git che necessiti di questo eseguendo questo comando in quei repository. (nota funziona solo con git version> = 2.10, rilasciato il 2016-09-04)
git config core.sshCommand 'ssh -oHostKeyAlgorithms=+ssh-dss'
Funziona solo dopo che il repository è stato configurato. Se non ti senti a tuo agio ad aggiungere un telecomando manualmente (e solo a clonare), puoi eseguire il clone in questo modo:
GIT_SSH_COMMAND='ssh -oHostKeyAlgorithms=+ssh-dss' git clone ssh://[email protected]/path-to-repository
quindi esegui il primo comando per renderlo permanente.
Se non si dispone dell'ultima versione e si desidera comunque mantenere il buco il più possibile locale, consiglio di inserire
export GIT_SSH_COMMAND='ssh -oHostKeyAlgorithms=+ssh-dss'
in un file da qualche parte, dite git_ssh_allow_dsa_keys.sh
e source
ing quando necessario.
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 di default :
OpenSSH 7.0 e simili disabilitano l'algoritmo della chiave pubblica ssh-dss (DSA). Anche questo è debole e raccomandiamo contro il suo 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 il openssh:
yum update openssh-server
Unisci nuove configurazioni in sshd_config se è presente sshd_config.rpmnew.
Verificare che ci siano chiavi host in/etc/ssh /. Se non ne generi 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 e ECDSA. (Se tutti sono commentati per impostazione predefinita, consentirà anche la RSA, vedere in man sshd_config
la parte 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
Dopo questo, poiché ci sono più opzioni di ssh-dss (DSA) il client openssh (> = v7) dovrebbe connettersi con RSA o algoritmo migliore.
Questa è la mia prima domanda, mi piacciono i suggerimenti: D.