it-swarm.com.de

git - Server Host-Schlüssel nicht zwischengespeichert

Ich versuche, Änderungen von meinem lokalen Repo auf ein Remote-Repo zu verschieben. Wenn ich tippe:

git Push Origin

Ich erhalte folgende Fehlermeldung:

The server's Host key is not cached in the registry. You
have no guarantee that the server is the computer you
think it is.
The server's rsa2 key fingerprint is:
ssh-rsa 2048 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx
Connection abandoned.
fatal: The remote end hung up unexpectedly

Wie kann ich das lösen? Ich verwende git von der Kommandozeile in Windows 7.

Bearbeiten

Wenn ich versuche, eine einfache ssh zu machen

ssh [email protected]

Ich erhalte folgende Fehlermeldung:

Could not create directory '/c//%HOMEDRIVE%%HOMEPATH%/.ssh'.
percent_expand: unknown key %H

Irgendwie wird das Verzeichnis nicht erstellt, da der Pfad ungültig ist. Wie kann ich das beheben?

@eckes: Edit2

Mein Zuhause ist auf %HOMEDRIVE%%HOMEPATH% gesetzt, stimmt das?

96
Rene Terstegen

Die Nachricht bedeutet, dass der Host-Schlüssel von Origin nicht in Ihrer vertrauenswürdigen Hosts-Datei vorhanden ist.

Um dies zu umgehen, öffnen Sie eine einfache SSH-Verbindung für Origin. SSH fragt Sie, ob Sie dem entfernten Host (über die Git-Konsole) vertrauen möchten:

$ ssh 127.0.0.1
The authenticity of Host '127.0.0.1 (127.0.0.1)' can't be established.
RSA key fingerprint is <FINGERPRINT>.
Are you sure you want to continue connecting (yes/no)?

Wenn Sie dem entfernten Host vertrauen (d. H. Typ yes), fügt SSH seinen Schlüssel der Liste der bekannten Hosts hinzu.

Danach sollten Sie in der Lage sein, Ihren git Push Origin auszuführen.

Alternativ können Sie den Schlüssel von Origin auch manuell zu .ssh/known_hosts hinzufügen. Dies erfordert jedoch, dass Sie das Format der known_hosts-Datei einhalten, wie in der Manpage von sshd (Abschnitt AUTHORIZED_KEYS FILE FORMAT) beschrieben. .

53
eckes

Für diejenigen von Ihnen, die MSYS Git unter Windows mit PuTTY über den Standardbefehl Prompt einrichten, müssen Sie einen Host zum Cache von PuTTY hinzufügen

> plink.exe <Host>

Zum Beispiel:

> plink.exe codebasehq.com

The server's Host key is not cached in the registry. You
have no guarantee that the server is the computer you
think it is.
The server's rsa2 key fingerprint is:
ssh-rsa 2048 2e:db:b6:22:f7:bd:48:f6:da:72:bf:59:d7:75:d7:4e
If you trust this Host, enter "y" to add the key to
PuTTY's cache and carry on connecting.
If you want to carry on connecting just once, without
adding the key to the cache, enter "n".
If you do not trust this Host, press Return to abandon the
connection.
Store key in cache? (y/n)

Beantworten Sie einfach y und dann den Rest mit Strg + C.

Überprüfen Sie jedoch den Fingerabdruck. Diese Warnung ist aus gutem Grund vorhanden. Fingerabdrücke für einige Git-Services (bitte bearbeiten, um weitere Informationen hinzuzufügen):

148
Roman Starkov

Versuchen Sie ein "set | grep -i ssh" von der Git Bash-Eingabeaufforderung aus

Wenn Ihr Setup wie meines ist, haben Sie wahrscheinlich folgende Einstellungen:

GIT_SSH='C:\Program Files (x86)\PuTTY\plink.exe'
PLINK_PROTOCOL=ssh
SVN_SSH='"C:\\Program Files (x86)\\PuTTY\\plink.exe"'

Ich habe ein 

unset GIT_SSH
unset PLINK_PROTOCOL
unset GIT_SVN

und es funktionierte danach, .. Ich denke, PuTTY speichert seine Schlüssel anderswo als $ HOME/.ssh oder so ... (Ich hatte auch ein Problem mit einer Box, in der $ HOME auf "C:\Users \" gesetzt war) usrnam "statt"/C/Users/usrnam/" 

ihr Kilometerstand kann variieren, aber das hat es für mich behoben. :-)

(Wahrscheinlich reicht es nur aus, das unset GIT_SSH zu machen, aber ich war auf Rollen)

Hinweis: Wenn unset nicht funktioniert, versuchen Sie Folgendes:

set GIT_SSH=
77
Thijs

Ich vermute, dass Ihre Umgebungsvariable GIT_SSH auf %ProgramFiles(x86)%\PuTTY\plink.exe..__ gesetzt ist. Aus irgendeinem Grund verwendet PLink nicht die .ssh/known_hosts-Datei in Ihrem Benutzerverzeichnis, um die Remote-Host-Schlüssel zu speichern.

Wenn dies tatsächlich der Fall ist, und wenn Sie pageant verwenden möchten, kann dies vorsätzlich der Fall sein. Sie müssen PLink verwenden, um eine Verbindung zum Host herzustellen.

"$GIT_SSH" [email protected]

Sie sollten eine ähnliche Nachricht erhalten

The server's Host key is not cached in the registry. You
have no guarantee that the server is the computer you
think it is.
The server's rsa2 key fingerprint is:
ssh-rsa 2048 86:7b:1b:12:85:35:8a:b7:98:b6:d2:97:5e:96:58:1d
If you trust this Host, enter "y" to add the key to
PuTTY's cache and carry on connecting.
If you want to carry on connecting just once, without
adding the key to the cache, enter "n".
If you do not trust this Host, press Return to abandon the
connection.
Store key in cache? (y/n)

Nachdem Sie die Frage mit y beantwortet und erfolgreich mit dem Remote-Host verbunden sind, sollten Sie alle Einstellungen vorgenommen haben. Fahren Sie fort und versuchen Sie es noch einmal.

18
Gunee

Nur Ssh'ing an den Host reicht nicht, zumindest unter Windows. Dadurch wird der Host-Schlüssel zu ssh/known_hosts hinzugefügt, der Fehler bleibt jedoch bestehen.

Sie müssen das Git-bash-Fenster schließen und ein neues öffnen. Dann wird der Registry-Cache geleert und der Push/Pull funktioniert dann.

4
andynormancx

Hatte das gleiche Problem und vergiss nicht, eine Verbindung zu SSH an Port herzustellen, wo sich das eigentliche Repository befindet , und nicht nur ein allgemeiner SSH-Port.

2
Mateusz

Rene, deine Variable HOME ist nicht korrekt gesetzt. Ändern Sie es entweder in c:\Users\(your-username) oder einfach in %USERNAME%.

2
rezsa f

Arbeitsumfeld:  

  • Windows 10
  • git
  • Kitt

Zuerst: Lösche PuTTY Bekannte_Hosts in der Registrierung gemäß Regedit.
Dann: Durch Ausführen des Befehls %GIT_SSH% [email protected] in der Cmd-Datei von Windows wird das Problem gelöst.

Hoffe es hilft euch allen.

2
Jason 徐

Ich hatte auch das gleiche Problem, als ich versuchte, ein Repository auf meinem Windows 7-Rechner zu klonen. Ich habe die meisten der hier genannten Antworten ausprobiert. Keiner von ihnen arbeitete für mich. 

Was für mich funktionierte, war das Ausführen des Programms Pageant (PuTTY-Authentifizierungsagent). Sobald der Festzug im Hintergrund lief, konnte ich Klonen, Push & Pull vom/zum Repository durchführen. Dies funktionierte für mich, möglicherweise weil ich meinen öffentlichen Schlüssel so eingerichtet habe, dass jedes Mal, wenn er zum ersten Mal verwendet wird, ein Passwort erforderlich ist und der Festzug gestartet wird.

1
sunilkumarba

Ich habe ein ähnliches Problem mit diesem Workaround gelöst.

Sie müssen lediglich zu Embedded Git wechseln, drücken Sie die Taste Ja und wechseln Sie dann wieder zu System Git.

Sie finden diese Option in

Tools -> Options -> Git
1
Pyro

Öffnen Sie einfach PuTTY und versuchen Sie, eine Verbindung zu dem Remote-Server herzustellen, den Sie verwenden möchten. Drücken Sie im Dialogfeld "Ja" (Sie vertrauen auf Remote).

1
sadegh saati

Lösung mit Plink

Speichern Sie dieses Python-Skript in known_hosts.py:

#! /usr/bin/env python

# $Id$
# Convert OpenSSH known_hosts and known_hosts2 files to "new format" PuTTY
# Host keys.
#   usage:
#     kh2reg.py [ --win ] known_hosts1 2 3 4 ... > hosts.reg
#       Creates a Windows .REG file (double-click to install).
#     kh2reg.py --unix    known_hosts1 2 3 4 ... > sshhostkeys
#       Creates data suitable for storing in ~/.PuTTY/sshhostkeys (Unix).
# Line endings are someone else's problem as is traditional.
# Developed for Python 1.5.2.

import fileinput
import base64
import struct
import string
import re
import sys
import getopt

def winmungestr(s):
    "Duplicate of PuTTY's mungestr() in winstore.c:1.10 for Registry keys"
    candot = 0
    r = ""
    for c in s:
        if c in ' \*?%~' or ord(c)<ord(' ') or (c == '.' and not candot):
            r = r + ("%%%02X" % ord(c))
        else:
            r = r + c
        candot = 1
    return r

def strtolong(s):
    "Convert arbitrary-length big-endian binary data to a Python long"
    bytes = struct.unpack(">%luB" % len(s), s)
    return reduce ((lambda a, b: (long(a) << 8) + long(b)), bytes)

def longtohex(n):
    """Convert long int to lower-case hex.

    Ick, Python (at least in 1.5.2) doesn't appear to have a way to
    turn a long int into an unadorned hex string -- % gets upset if the
    number is too big, and raw hex() uses uppercase (sometimes), and
    adds unwanted "0x...L" around it."""

    plain=string.lower(re.match(r"0x([0-9A-Fa-f]*)l?$", hex(n), re.I).group(1))
    return "0x" + plain

output_type = 'windows'

try:
    optlist, args = getopt.getopt(sys.argv[1:], '', [ 'win', 'unix' ])
    if filter(lambda x: x[0] == '--unix', optlist):
        output_type = 'unix'
except getopt.error, e:
    sys.stderr.write(str(e) + "\n")
    sys.exit(1)

if output_type == 'windows':
    # Output REG file header.
    sys.stdout.write("""REGEDIT4

[HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\SshHostKeys]
""")

# Now process all known_hosts input.
for line in fileinput.input(args):

    try:
        # Remove leading/trailing whitespace (should zap CR and LF)
        line = string.strip (line)

        # Skip blanks and comments
        if line == '' or line[0] == '#':
            raise "Skipping input line"

        # Split line on spaces.
        fields = string.split (line, ' ')

        # Common fields
        hostpat = fields[0]
        magicnumbers = []   # placeholder
        keytype = ""        # placeholder

        # Grotty heuristic to distinguish known_hosts from known_hosts2:
        # is second field entirely decimal digits?
        if re.match (r"\d*$", fields[1]):

            # Treat as SSH-1-type Host key.
            # Format: hostpat bits10 exp10 mod10 comment...
            # (PuTTY doesn't store the number of bits.)
            magicnumbers = map (long, fields[2:4])
            keytype = "rsa"

        else:

            # Treat as SSH-2-type Host key.
            # Format: hostpat keytype keyblob64 comment...
            sshkeytype, blob = fields[1], base64.decodestring (fields[2])

            # 'blob' consists of a number of
            #   uint32    N (big-endian)
            #   uint8[N]  field_data
            subfields = []
            while blob:
                sizefmt = ">L"
                (size,) = struct.unpack (sizefmt, blob[0:4])
                size = int(size)   # req'd for slicage
                (data,) = struct.unpack (">%lus" % size, blob[4:size+4])
                subfields.append(data)
                blob = blob [struct.calcsize(sizefmt) + size : ]

            # The first field is keytype again, and the rest we can treat as
            # an opaque list of bignums (same numbers and order as stored
            # by PuTTY). (currently embedded keytype is ignored entirely)
            magicnumbers = map (strtolong, subfields[1:])

            # Translate key type into something PuTTY can use.
            if   sshkeytype == "ssh-rsa":   keytype = "rsa2"
            Elif sshkeytype == "ssh-dss":   keytype = "dss"
            else:
                raise "Unknown SSH key type", sshkeytype

        # Now print out one line per Host pattern, discarding wildcards.
        for Host in string.split (hostpat, ','):
            if re.search (r"[*?!]", Host):
                sys.stderr.write("Skipping wildcard Host pattern '%s'\n"
                                 % Host)
                continue
            Elif re.match (r"\|", Host):
                sys.stderr.write("Skipping hashed hostname '%s'\n" % Host)
                continue
            else:
                m = re.match (r"\[([^]]*)\]:(\d*)$", Host)
                if m:
                    (Host, port) = m.group(1,2)
                    port = int(port)
                else:
                    port = 22
                # Slightly bizarre output key format: '[email protected]:hostname'
                # XXX: does PuTTY do anything useful with literal IP[v4]s?
                key = keytype + ("@%d:%s" % (port, Host))
                value = string.join (map (longtohex, magicnumbers), ',')
                if output_type == 'unix':
                    # Unix format.
                    sys.stdout.write('%s %s\n' % (key, value))
                else:
                    # Windows format.
                    # XXX: worry about double quotes?
                    sys.stdout.write("\"%s\"=\"%s\"\n"
                                     % (winmungestr(key), value))

    except "Unknown SSH key type", k:
        sys.stderr.write("Unknown SSH key type '%s', skipping\n" % k)
    except "Skipping input line":
        pass

Getestet unter Win7x64 und Python 2.7 .

Dann renne:

ssh-keyscan -t rsa bitbucket.org >>~/.ssh/known_hosts
python --win known_hosts.py >known_hosts.reg
start known_hosts.reg

Und wählen Sie den Import in die Registry. Der Keyscan ruft den öffentlichen Schlüssel für die Domäne ab (ich hatte meine Probleme mit Bitbucket), und das Python-Skript konvertiert es in das Plink-Format.

1
Henrik

Durch den Wechsel von PuTTY zu OpenSSH wurde dieses Problem behoben, ohne dass GIT_SSH usw. deaktiviert werden musste.

0
79E09796

Deinstallieren Sie einfach Git Extensions und installieren Sie es erneut, indem Sie OpenSSH anstelle von auswählen

0
Kiran.vanam

Durch das direkte Hinzufügen des Hosts mit Bash konnte das Problem nicht behoben werden. Der Fehler trat jedoch immer noch auf, wenn "Alle abrufen" in Git Extensions verwendet wurde. Durch die Verwendung von "Pull" in einem Zweig wurde der erforderliche Host automatisch von Git Extensions mit einem Bash-Popup-Bildschirm hinzugefügt. Danach konnte ich 'Fetch All' wieder verwenden. Nicht sicher, was von Git Extensions anders gemacht wird.

0
Bart VdA

Ich habe eine Festplatte gewechselt, Windows installiert. Beim Versuch, Dateien hochzuladen, erhielt dieses Befehlsfenster.

Ich drückte "y", dann Strg + C. Geöffnet PuTTY.exe, fügte einen alten Schlüssel hinzu, der zu git zurückgegeben wurde und Dateien drückte.

0
CoolMind

Ich habe alle oben genannten Methoden ausprobiert, aber keine konnte das gleiche Problem auf meinem Laptop beheben. Anstatt den Zweig in git bash nach Origin zu schieben, versuche ich die Push-Option von TortoiseGit zu verwenden. Dann wird ein Fenster eingeblendet, in dem ich aufgefordert wird, den neuen Host-Schlüssel zum Zwischenspeichern hinzuzufügen jetzt gut.

Ich hoffe es hilft euch allen.

0
Allen Jin