106

変更をローカル リポジトリからリモート リポジトリにプッシュしようとしています。入力すると:

git push origin

次のエラーが表示されます。

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

どうすればこれを解決できますか? Windows 7 でコマンドラインから git を使用しています。

編集

単純な ssh を実行しようとすると

ssh user@hostname

次のエラーが表示されます。

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

パスが無効であるため、どういうわけかディレクトリが作成されません。これを修正する方法は?

@eckes: Edit2

マイホームの設定%HOMEDRIVE%%HOMEPATH%は正しいですか?

4

20 に答える 20

164

標準のコマンド プロンプト経由で PuTTY を使用して Windows で MSYS Git をセットアップしている場合、PuTTY のキャッシュにホストを追加する方法は、

> plink.exe <host>

例えば:

> 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)

と答えるだけyで、残りは Ctrl+C です。

ただし、指紋を確認してください。この警告には正当な理由があります。一部の git サービスのフィンガープリント (さらに追加するには編集してください):

于 2012-09-16T17:19:28.140 に答える
81

GitBashプロンプトから「set|grep-issh」を実行してみてください

あなたのセットアップが私のようなものであるなら、あなたはおそらくこれらのセットを持っています:

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

私は

unset GIT_SSH
unset PLINK_PROTOCOL
unset GIT_SVN

その後は機能しました。..パテはキーを$HOME/ .sshなどとして別の場所に保存していると思います...($HOMEが"C:\Users\に設定されているボックスでも問題が発生しました。 「/C/ Users /usrnam/」の代わりに「usrnam」

とにかく、あなたのマイレージは変わるかもしれません、しかしそれは私のためにそれを修正しました。:-)

(おそらく、設定されていないGIT_SSHを実行するだけで十分ですが、私は順調に進んでいました)

注:unsetが機能しない場合は、次のことを試してください。

set GIT_SSH=
于 2012-02-21T22:22:05.473 に答える
54

originこのメッセージは、信頼できるホスト ファイルにのホスト キーが存在しないことを意味します。

これを回避するには、プレーンな SSH 接続を開くoriginと、SSH が (Git コンソールから) リモート ホストを信頼するかどうかを尋ねてきます。

$ 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)?

リモート ホスト (つまり type ) を信頼する場合yes、SSH はそのキーを既知のホストのリストに追加します。

その後、あなたはあなたのgit push origin.

origin別の方法として、 のキーを手動で追加することもできますが、これには、 のマニュアル ページ(セクションAUTHORIZED_KEYS FILE FORMAT.ssh/known_hosts ) で説明されているファイルの形式に準拠する必要があります。known_hostssshd

于 2011-02-08T09:39:01.347 に答える
4

少なくとも Windows では、ホストに ssh 接続するだけでは十分ではありません。これによりホストキーが追加されますssh/known_hostsが、エラーは引き続き発生します。

git bash ウィンドウを閉じて、新しいウィンドウを開く必要があります。次に、レジストリ キャッシュがクリアされ、プッシュ/プルが機能します。

于 2012-02-03T18:54:45.137 に答える
2

Plink を使用したソリューション

この python スクリプト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: 'type@port: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

Win7x64 およびPython 2.7でテスト済み。

次に実行します。

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

レジストリにインポートすることを選択します。keyscan はドメインの公開鍵を取得し (私は bitbucket で問題がありました)、Python スクリプトがそれを Plink 形式に変換します。

于 2012-08-23T15:29:08.953 に答える
2

Rene さん、HOME変数が正しく設定されていません。に変更するc:\Users\(your-username)か、単に に変更し%USERNAME%ます。

于 2012-07-11T16:08:33.940 に答える
2

同じ問題があり、一般的なSSHポートだけでなく、実際のリポジトリであるポートでSSHに接続するのを忘れると、ホストキーが異なります!

于 2013-08-22T10:19:42.090 に答える
1

この回避策を使用して同様の問題を解決しました。

Embedded Git に切り替えて、プッシュし、[はい] ボタンを押してから、System Git に戻すだけです。

このオプションは次の場所にあります。

Tools -> Options -> Git
于 2015-12-16T12:59:59.077 に答える
1

Windows 7 マシンでリポジトリのクローンを作成しようとしたときにも、同じ問題が発生しました。ここに記載されているほとんどの回答を試しました。それらのどれも私のために働きませんでした。

私にとってうまくいったのは、Pageant (パテ認証エージェント) プログラムを実行することでした。Pageant がバックグラウンドで実行されると、クローンを作成し、リポジトリからプッシュおよびプルすることができました。これは私にとってはうまくいきました。これは、初めて使用するときにパスワードが必要になり、Pageant が起動するように公開鍵を設定したためかもしれません。

于 2014-02-12T14:00:53.480 に答える
0

ホストを Bash で直接追加しても問題は解決しませんでした。Git 拡張機能で「Fetch all」を使用すると、引き続きエラーが発生しました。1 つのブランチで「プル」を使用すると、必要なホストが Git 拡張機能によって Bash ポップアップ画面で自動的に追加されました。これを行った後、「Fetch All」を再び使用できるようになりました。Git 拡張機能によって何が違うのかわかりません。

于 2016-06-01T10:50:35.920 に答える
0

ハードディスクを交換し、Windows をインストールしました。ファイルをアップロードしようとすると、このコマンド ウィンドウが表示されました。

「y」を押してから Ctrl + C. Openedputty.exeを押し、古いキーを追加してgitに戻し、ファイルをプッシュしました。

于 2018-11-15T07:55:31.700 に答える