Ich versuche, eine Verbindung zu einem entfernten Git-Repository herzustellen, das sich auf meinem Webserver befindet, und es auf meinem Computer zu klonen.
Ich verwende folgendes Format für meinen Befehl:
git clone ssh://[email protected]/repository.git
Das hat für die meisten meiner Teammitglieder gut funktioniert. Normalerweise fragt Git nach dem Ausführen dieses Befehls nach dem Kennwort des Benutzers und führt dann das Klonen aus. Wenn ich jedoch auf einem meiner Rechner laufe, erhalte ich folgende Fehlermeldung:
Hostschlüsselüberprüfung fehlgeschlagen
fatal: Konnte nicht aus der Ferne gelesen werden Repository.
Wir verwenden keine SSH-Schlüssel, um eine Verbindung zu diesem Repository herzustellen. Ich bin mir also nicht sicher, warum Git auf diesem Computer nach einem Schlüssel sucht.
Sie verbinden sich über das SSH-Protokoll. Bei Verwendung von SSH verfügt jeder Host über einen Schlüssel. Clients erinnern sich an den Host-Schlüssel, der einer bestimmten Adresse zugeordnet ist, und verweigern die Verbindung, wenn sich ein Host-Schlüssel zu ändern scheint. Dies verhindert, dass Menschen in der Mitte angreifen.
Der Host-Schlüssel für domain.com wurde geändert. Wenn Ihnen das nicht fies erscheint , können Sie den alten Schlüssel aus Ihrem lokalen Cache entfernen
$ ssh-keygen -R domain.com
Ich empfehle Ihnen dringend, darüber nachzudenken, ob Benutzer sich auch mit Schlüsseln authentifizieren. Auf diese Weise kann ssh-agent
das Schlüsselmaterial zur Vereinfachung speichern (und nicht, dass jeder für jede Verbindung zum Server ein Kennwort eingeben muss). Kennwörter werden nicht über das Netzwerk gesendet.
Wie ich bereits in in Klonen geantwortet habe - Klonen git repo verursacht Fehler - Hostschlüsselüberprüfung fehlgeschlagen fatal: Das Remote-Ende hat unerwartet aufgelegt , füge den GitHub der Liste der autorisierten Hosts hinzu:
ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts
Ich hatte das ähnliche Problem, aber mit SSH-Schlüsseln. Aus Tupys Antwort oben habe ich herausgefunden, dass das Problem darin besteht, dass die Datei known_hosts nicht vorhanden ist oder dass github.com nicht in der Liste der bekannten Hosts enthalten ist. Hier sind die Schritte, die ich befolgt habe, um das Problem zu lösen -
mkdir -p ~/.ssh
ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts
ssh-keygen -t rsa -C "user.email"
Dies geschieht, da sich github derzeit nicht in Ihren bekannten Hosts befindet.
Sie sollten aufgefordert werden, github zu Ihren bekannten Hosts hinzuzufügen. Wenn dies nicht der Fall ist, können Sie ssh -T [email protected]
ausführen, um die Eingabeaufforderung erneut zu erhalten.
Für mich musste ich nur "yes" an der Eingabeaufforderung eingeben. anstatt nur Enter zu drücken.
Ich hatte das gleiche Problem auf einem neu installierten System, aber dies war ein udev-Problem. Es gab keinen /dev/tty
-Knoten, also musste ich Folgendes tun:
mknod -m 666 /dev/tty c 5 0
Wenn Sie sich im Büro-Intranet befinden (sonst gefährlich), das immer durch Firewalls geschützt ist, müssen Sie einfach die folgenden Zeilen in ~/.ssh/config eingeben
Gastgeber *
StrictHostKeyChecking-Nr
UserKnownHostsFile =/dev/null
Was für mich funktionierte, war, zuerst meinen SSH-Schlüssel des neuen Computers hinzuzufügen. Ich folgte diesen Anweisungen von GitLab - SSH-Schlüssel hinzufügen . Beachten Sie, dass ich seit Win10 alle diese Befehle in Git Bash unter Windows ausführen musste (es funktionierte nicht in der normalen DOS-Cmd-Shell).
Dann wieder in Git Bash, ich musste einen git clone
des Repos machen, mit dem ich Probleme hatte, und in meinem Fall musste ich ihn unter einem anderen Namen klonen, da ich ihn bereits lokal hatte und meine Verpflichtungen nicht verlieren wollte. Zum Beispiel
git clone ssh://[email protected]/myRepo.git myRepo2
Dann bekam ich die Aufforderung, es zur Liste der bekannten Hosts hinzuzufügen. Die Frage könnte folgende sein:
Möchten Sie die Verbindung fortsetzen (Ja/Nein)?
Ich habe "yes" eingegeben und es hat endlich funktioniert. Sie sollten normalerweise eine Nachricht erhalten, die der folgenden ähnelt:
Warnung: '[Ihr Repo-Link]' (ECDSA) wurde dauerhaft zur Liste der bekannten Hosts hinzugefügt.
Note: Wenn Sie Windows verwenden, stellen Sie sicher, dass Sie Git Bash für alle Befehle verwenden. Dies funktionierte nicht in der normalen Cmd-Shell oder Powershell. Ich musste dies wirklich in Git Bash tun.
Zuletzt löschte ich das zweite Klon-Repo (myRepo2
im Beispiel) und ging zurück zu meinem ersten Repo, und ich konnte endlich alle Git-Sachen wie in meinem Lieblingseditor VSCode machen.
Wenn Sie Git für Windows verwenden.
Der GUI-Client fügt den Schlüssel für Sie zu ~/.ssh/known_hosts
hinzu. Dies ist einfacher zu merken, wenn Sie es nicht oft tun, und vermeidet die Verwendung der git-Befehlszeile (die Standard-Windows-Befehlszeilen enthalten nicht die ausführbare Datei ssh-keyscan
).
Auf die Frage:
Are you sure you want to continue connecting (yes/no)?
Geben Sie als Antwort yes ein
So habe ich mein Problem gelöst. Aber wenn Sie versuchen, nur die Eingabetaste zu drücken, wird es nicht funktionieren!
Wenn der Remote-Server eine Verbindung zum privaten Repository herstellen möchte, authentifiziert er sich über ssh. Erstellen Sie das Private-Public-Schlüsselpaar mit ssh-keygen oder wenn Sie bereits über den Public-Private-Schlüssel verfügen. Kopieren Sie den öffentlichen Schlüssel und fügen Sie ihn in die Einstellungen des privaten Repos ein.
YourPrivateRepo -> Einstellungen -> Schlüssel bereitstellen -> Bereitstellungsschlüssel hinzufügen -> Den öffentlichen Schlüssel einfügen.
Jetzt kann der Remote-Server eine Verbindung zum privaten Repository herstellen.
HINWEIS: Die Bereitstellungsschlüssel haben nur Zugriff zum Lesen des Repos. Schreibzugriff muss explizit zugelassen werden.
Dies bedeutet, dass Ihr Remote-Host-Schlüssel geändert wurde.
Ihr Terminal hat vorgeschlagen, diesen Befehl als Root-Benutzer auszuführen
$ ssh-keygen -f "/root/.ssh/known_hosts" -R [www.website.net]
Sie müssen diesen Hostnamen aus der Hostliste auf Ihrem PC/Server entfernen. Kopieren Sie den vorgeschlagenen Befehl und führen Sie ihn als Root-Benutzer aus.
$ Sudo su // Login as a root user
$ ssh-keygen -f "/root/.ssh/known_hosts" -R [www.website.net] // Terminal suggested command execute here
Host [www.website.net]:4231 found: line 16 type ECDSA
/root/.ssh/known_hosts updated.
Original contents retained as /root/.ssh/known_hosts.old
$ exit // Exist from root user
Versuchen Sie es noch einmal, hoffen Sie, dass dies funktioniert.
Ich hatte eine ähnliche Ausgabe, leider habe ich die GitExtensions-HMI verwendet und vergessen, dass ich eine Passphrase geschrieben habe. Geben Sie kein Passwort ein, wenn Sie Ihren Schlüssel generieren!
Während der Build-Zeit war der gleiche Fehler in DockerFile aufgetreten, während das Image öffentlich war. Ich habe in Dockerfile wenig geändert.
RUN git clone https://github.com/kacole2/express-node-mongo-skeleton.git /www/nodejs
Dies liegt daran, dass mit der Syntax [email protected]: ... am Ende SSH zum Klonen verwendet wird und Ihr privater Schlüssel im Container nicht verfügbar ist. Verwenden Sie stattdessen RUN git clone> https://github.com/edenhill/librdkafka.git .
Sie können Ihre "git url" im "https" URL-Format in der Jenkins-Datei oder an jedem beliebigen Ort verwenden.
git url: 'https://github.com/jglick/simple-maven-project-with-tests.git'