Mit XX.XXX.XX.XX kann nicht verhandelt werden: Es wurde kein passender Hostschlüsseltyp gefunden. Ihr Angebot: ssh-dss

110

Ich versuche, ein Git-Repository auf meinem Webhost zu erstellen und es auf meinem Computer zu klonen. Folgendes habe ich getan:

  1. Ich habe ein Repository auf dem Remote-Server erstellt.
  2. Ich habe ein Schlüsselpaar generiert : ssh-keygen -t dsa.
  3. Ich habe meinen Schlüssel zu ssh-agent hinzugefügt.
  4. Ich habe den öffentlichen Schlüssel des Servers kopiert ~/.ssh.

Und dann, nach einem Versuch, den Befehl auszuführen git clone ssh://user@host/path-to-repository, erhalte ich eine Fehlermeldung:

Mit XX.XXX.XX.XX kann nicht verhandelt werden: Es wurde kein passender Hostschlüsseltyp gefunden. Ihr Angebot: ssh-dss
fatal: Konnte nicht aus dem Remote-Repository lesen.
Stellen Sie sicher, dass Sie über die richtigen Zugriffsrechte verfügen und das Repository vorhanden ist.

Was bedeutet das?

Nikita Gorshkov
quelle

Antworten:

171

In der letzten OpenSH-Version sind DSA-Schlüssel standardmäßig veraltet. Sie sollten Ihrem GIT-Anbieter vorschlagen, einen angemessenen Hostschlüssel hinzuzufügen. Sich nur auf DSA zu verlassen, ist keine gute Idee.

Um dieses Problem zu umgehen, müssen Sie Ihrem sshClient mitteilen, dass Sie DSA-Hostschlüssel akzeptieren möchten, wie in der offiziellen Dokumentation für die Legacy-Verwendung beschrieben . Sie haben nur wenige Möglichkeiten, aber ich empfehle, diese Zeilen in Ihre ~/.ssh/configDatei aufzunehmen:

Host your-remote-host
    HostkeyAlgorithms +ssh-dss

Eine andere Möglichkeit besteht darin, Umgebungsvariablen GIT_SSHzu verwenden, um diese Optionen anzugeben:

GIT_SSH_COMMAND="ssh -oHostKeyAlgorithms=+ssh-dss" git clone ssh://user@host/path-to-repository
Jakuje
quelle
1
Jetzt hat es ohne Angabe des Hostnamens funktioniert, nur mit HostkeyAlgorithms +ssh-dss. Vielen Dank.
Giovannipds
1
@giovannipds Es muss auf jeden Fall der Remote-Host sein, zu dem Sie eine Verbindung herstellen. @ Downvoters Die Downvotes zu erklären wäre schön.
Jakuje
@Jakuje sorry man, ich habe falsch geklickt und wegen der Unmöglichkeit, mich sofort zu ändern, konnte ich meine Antwort nicht aktualisieren.
Giovannipds
1
@Jakuje Ich habe meine Abstimmung bereits aktualisiert, nur um dich wissen zu lassen. =)
Giovannipds
Wenn sich in Ihrem .ssh-Verzeichnis keine solche Datei befindet, reicht eine leere Textdatei mit dem Namen "config" aus.
RMorrisey
78

Sie können auch -oHostKeyAlgorithms=+ssh-dssin Ihrer SSH-Zeile hinzufügen :

ssh -oHostKeyAlgorithms=+ssh-dss user@host
Guillaume
quelle
Dies ist die schnellste Lösung +1, da das Problem für diesen Host dauerhaft behoben wird. Ein weiterer Vorschlag auf lange Sicht ist, dass das SSH-Daemon des Host-Systems nach Möglichkeit aktualisiert werden sollte, da es als DSS erscheint, das nicht mehr als sehr sicher angesehen wird.
Areeb Soo Yasir
20

Bei mir hat das geklappt: (hinzugefügt in .ssh\config)

Host *
HostkeyAlgorithms +ssh-dss
PubkeyAcceptedKeyTypes +ssh-dss
user2885534
quelle
Die zweite Option bezieht sich nicht auf das Problem und die erste ist bereits in meiner Antwort erwähnt.
Jakuje
Host your-host hat bei mir nicht funktioniert, vorausgesetzt, your-host ist der Name des Hosts, von dem aus ich den Befehl ssh (client) ausführe. Aber Host * hat für mich gearbeitet.
Krischu
2
@Krischu nein, yuor-hostist der Host, sshgegen den Sie laufen . Es ist immer eine schlechte Idee, für alle Hosts einen unsicheren Standard festzulegen.
Jakuje
10

Wenn Sie wie ich sind und dieses Sicherheitslücken-System nicht oder benutzerweit erstellen möchten, können Sie allen Git-Repos, die dies benötigen, eine Konfigurationsoption hinzufügen, indem Sie diesen Befehl in diesen Repos ausführen. (Hinweis funktioniert nur mit Git-Version> = 2.10, veröffentlicht am 04.09.2016)

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

Dies funktioniert jedoch erst, nachdem das Repo eingerichtet wurde. Wenn Sie eine Fernbedienung nicht manuell hinzufügen möchten (und nur klonen möchten), können Sie den Klon folgendermaßen ausführen:

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

Führen Sie dann den ersten Befehl aus, um ihn dauerhaft zu machen.

Wenn Sie nicht über die neueste Version verfügen und das Loch dennoch so lokal wie möglich halten möchten, empfehle ich das Putten

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

in einer Datei irgendwo, sagen wir git_ssh_allow_dsa_keys.sh, und sourcebei Bedarf.

Golvok
quelle
3

Ich möchte ein wenig mit der Lösung für die Serverseite zusammenarbeiten. Der Server sagt also, dass er DSA nicht unterstützt. Dies liegt daran, dass der openssh-Client es nicht standardmäßig aktiviert :

OpenSSH 7.0 und höher deaktivieren in ähnlicher Weise den Public-Key-Algorithmus ssh-dss (DSA). Es ist auch schwach und wir empfehlen gegen seine Verwendung.

Um dies auf der Serverseite zu beheben, sollte ich andere Schlüsselalgorithmen wie RSA oder ECDSA aktivieren. Ich hatte gerade dieses Problem mit einem Server in einem LAN. Ich schlage folgendes vor:

Aktualisieren Sie das openssh:

yum update openssh-server

Führen Sie neue Konfigurationen in der Datei sshd_config zusammen, wenn eine neue Datei sshd_config.rpm vorhanden ist.

Stellen Sie sicher, dass sich unter / etc / ssh / Hostschlüssel befinden. Wenn keine neuen generiert werden, siehe 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

Überprüfen Sie in der Datei / etc / ssh / sshd_config die HostKey-Konfiguration. Es sollte die Konfiguration von RSA und ECDSA ermöglichen. (Wenn alle standardmäßig kommentiert sind, wird auch die RSA zugelassen, siehe im man sshd_configTeil von 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

Erstellen Sie für die Clientseite einen Schlüssel für ssh (kein DSA wie in der Frage), indem Sie einfach Folgendes tun:

ssh-keygen

Danach sollte sich der Client openssh (> = v7) mit RSA oder einem besseren Algorithmus verbinden, da es mehr Optionen als ssh-dss (DSA) gibt.

Hier noch ein guter Artikel.

Dies ist meine erste beantwortete Frage, ich freue mich über Vorschläge: D.

Gus Calca
quelle
1

Wie würde man mehrere Algorithmen spezifizieren? Ich frage, weil git gerade auf meinem Arbeitslaptop aktualisiert wurde (Windows 10, unter Verwendung des offiziellen Git für Windows-Builds), und ich habe diesen Fehler erhalten, als ich versucht habe, einen Projektzweig auf meine Azure DevOps-Fernbedienung zu übertragen. Ich habe versucht, --set-upstream zu pushen und habe Folgendes erhalten:

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.

Wie würde man also die obigen Vorschläge umsetzen und beide berücksichtigen? (Als schnelle Lösung habe ich die Lösung von @ golvok mit group14 verwendet und es hat funktioniert, aber ich weiß wirklich nicht, ob 1 oder 14 besser ist usw.)

Janet
quelle
-3

Sie folgen entweder dem obigen oder diesem Ansatz

Erstellen Sie die Konfigurationsdatei im Verzeichnis .ssh und fügen Sie diese Zeile hinzu.

host xxx.xxx
 Hostname xxx.xxx
 IdentityFile ~/.ssh/id_rsa
 User xxx
 KexAlgorithms +diffie-hellman-group1-sha1
Ashokhein
quelle
Das löst ein ganz anderes Problem.
Jakuje