Git clone / pull постоянно зависает в «Хранить ключ в кеше?»

160

Я пытаюсь клонировать репо из моей учетной записи BitBucket на мой ноутбук с Windows 10 (с GitBash). Я выполнил все шаги, необходимые для подключения (настроил мой SSH-ключ, успешно проверил SSHing git@bitbucket.org и т. Д.). Однако всякий раз, когда я пытаюсь клонировать репозиторий, приглашение постоянно зависает после подтверждения того, что я хочу кешировать ключ Bitbucket.

User@Laptop MINGW64 /C/Repos
$ git clone git@bitbucket.org:mygbid/test.git
Cloning into 'test'...
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 97:8c:1b:f2:6f:14:6b:5c:3b:ec:aa:46:46:74:7c:40
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

Файлы не клонируются, и в результате получается пустой репо. Попытка инициировать мастер происхождения git pull из этого репозитория также запрашивает кеширование ключа, а затем зависает без обратной связи. Несмотря на то, что я не запрашиваю ключ для кэширования, когда я выполняю тестовый SSH, операции git всегда запрашивают ключ каждый раз перед сбоем.

Без сообщений об ошибках, чтобы работать, я действительно в растерянности относительно того, что не так. Я пробовал несколько репо, в том числе очень маленькие, но безуспешно.

MarathonStudios
источник

Ответы:

189

У меня была эта проблема при клонировании репо на Windows 10 тоже.

Я справился с этим, используя графический интерфейс Putty для SSH к рассматриваемому серверу (в вашем случае: bitbucket.org), а затем нажал «Да», когда на экране появится запрос на сохранение ключа сервера в кэш. Повторное выполнение команды клонирования затем сработало для меня!

theChumpus
источник
21
Для меня это не помогло, но я понял, что проблема связана с GitBash, использующим Putty для аутентификации ssh вместо OpenSSH. Когда я удалил системную переменную GIT_SSH и сбросил GitBash, все работало нормально. Спасибо!
MarathonStudios
2
Использование puttyдля добавления githubключа в кэш работал для меня
дуб
4
Это работало для меня на Win 7 с помощью командной консоли. Я хотел бы, чтобы кто-нибудь мог сказать мне, почему это произошло, а не просто обходной путь.
soulsabr
1
Может кто-нибудь сказать, как сделать вышеупомянутое решение
Shreyan Mehta
2
@Shreyan Mehta просто откройте замазку под именем хоста paste git@github.com (или любым другим хостом, который вы используете). Обязательно выберите тип подключения SSH. Номер порта должен быть 22. Также убедитесь, что ключ ssh загружен в Pageant перед запуском этого.
Мистер Невидимый
111
  1. Открытая замазка
  2. Введите имя хоста (как bitbucket.org)
  3. Нажмите Открыть
  4. Нажмите Да во всплывающем окне, чтобы кэшировать ключ хоста.
  5. Закрыть Замазка
cambunctious
источник
У меня такая же проблема. Глядя на вывод из git, кажется, что git не может кешировать ключ хоста (возможно, ошибка). Таким образом, вы должны сделать это с помощью PuTTY GUI.
Камбунктив
Я попробовал все шаги, но когда я выбираю 'y' или 'n', ничего не происходит, Git Bash ничего не делает
testsingh
Вы ввели правильное имя хоста в шаге 2? Вы пытались перезапустить Git Bash?
Камбунктив
1
Чем это отличается от принятого ответа?
zb226
1
Я проголосовал за этот ответ, так как он предусматривает шаги. Мне не нравится, как это обходной путь (вы должны повторять это для каждого SSH-сервера, к которому вы подключаетесь), как принятый ответ.
ShooShoSha
26

Чтобы сделать это из powershell, откройте окно powershell и вставьте следующее:

echo y | & 'C:\Program Files (x86)\GitExtensions\PuTTY\plink.exe' -ssh git@github.com
echo y | & 'C:\Program Files (x86)\GitExtensions\PuTTY\plink.exe' -ssh git@gist.github.com
echo y | & 'C:\Program Files (x86)\GitExtensions\PuTTY\plink.exe' -ssh git@bitbucket.org

или с автономной версией PuTTY:

echo y | & 'C:\Program Files (x86)\PuTTY\plink.exe' -ssh git@github.com
echo y | & 'C:\Program Files (x86)\PuTTY\plink.exe' -ssh git@gist.github.com
echo y | & 'C:\Program Files (x86)\PuTTY\plink.exe' -ssh git@bitbucket.org

Также стоит знать, что putty хранит известные хосты в разделе реестра :

HKEY_CURRENT_USER\SoftWare\SimonTatham\PuTTY\SshHostKeys

Чтобы сократить это, вы можете поместить в .regфайл следующее и запустить его:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\SOFTWARE\SimonTatham\PuTTY\SshHostKeys]
"rsa2@22:github.com"="0x23,0xab603b8511a67679bdb540db3bd2034b004ae936d06be3d760f08fcbaadb4eb4edc3b3c791c70aae9a74c95869e4774421c2abea92e554305f38b5fd414b3208e574c337e320936518462c7652c98b31e16e7da6523bd200742a6444d83fcd5e1732d03673c7b7811555487b55f0c4494f3829ece60f94255a95cb9af537d7fc8c7fe49ef318474ef2920992052265b0a06ea66d4a167fd9f3a48a1a4a307ec1eaaa5149a969a6ac5d56a5ef627e517d81fb644f5b745c4f478ecd082a9492f744aad326f76c8c4dc9100bc6ab79461d2657cb6f06dec92e6b64a6562ff0e32084ea06ce0ea9d35a583bfb00bad38c9d19703c549892e5aa78dc95e250514069"
"rsa2@22:gist.github.com"="0x23,0xab603b8511a67679bdb540db3bd2034b004ae936d06be3d760f08fcbaadb4eb4edc3b3c791c70aae9a74c95869e4774421c2abea92e554305f38b5fd414b3208e574c337e320936518462c7652c98b31e16e7da6523bd200742a6444d83fcd5e1732d03673c7b7811555487b55f0c4494f3829ece60f94255a95cb9af537d7fc8c7fe49ef318474ef2920992052265b0a06ea66d4a167fd9f3a48a1a4a307ec1eaaa5149a969a6ac5d56a5ef627e517d81fb644f5b745c4f478ecd082a9492f744aad326f76c8c4dc9100bc6ab79461d2657cb6f06dec92e6b64a6562ff0e32084ea06ce0ea9d35a583bfb00bad38c9d19703c549892e5aa78dc95e250514069"
"rsa2@22:bitbucket.org"="0x23,0xb9b88df3578371a7eb80c78bcda14fb30da436f11ca932a5fd5a8b6adfcc681df7a59cb4cb7ac966d9eac11daa38ebdbc0a6582a210ed4ee95a8d101c4abc925e942ab47535d64f9a5b3b68035c2ea1e900d709a1e8ea938718f532f9805a190446b92bac3040126225ae9d8374bc2008f106979d631734c7453f78c70091f4783b288869cb3c1941a784cd9baad823be27333833dc1f488a45b85952be75cf0a64965662302e3915378dcd5cfcd3ec903d804a29dff2fdf19df5deba4534b09e4dea6e44f152e339b3c43be98ddadfc56533192e216a3d673f00b4aa9cc9e7870acd8b6adb7e0feb77f2292fc2dede94819def3eb1e785541a06ab31ccf725f"

putty-hosts.reg gist

Тим Абелл
источник
2
Смотрите также предыдущий вопрос и ответ об этом аспекте plink
Йосип Роден
2
FATAL ERROR: Disconnected: No supported authentication methods available (server sent: publickey)
Азимут
В случае, если ваш пульт работает на порте, отличном от 22, вам нужно запустить plink с портом, передав ему -P <port>аргумент.
PitaJ
20

Мне удалось заставить его работать, запустив plink напрямую, после запуска Pageant использовать команду plink напрямую - plink.exe -agent -v git@github.comзатем после этого git работает без зависаний.

benjaminRRR
источник
3
Отличное решение! Это должно было быть отмечено как ответ
ZenithS
Это лучший ответ.
Брайан Лейси
5

Чтобы обойти эту проблему, я настроил GitBash для использования plink с -batchопцией. Опция отключает все запросы - плинк завершится без зависания и не добавит отпечаток ключа в кеш.

Чтобы добавить -batchпараметр в команду plink, выполняемую GitBash, вы можете установить опцию git config:

git config --global core.sshCommand "plink -batch"

Или установите GIT_SSH_COMMANDпеременную среды.

Вывод при клонировании репо с неизвестного хоста будет примерно таким:

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 97:8c:1b:f2:6f:14:6b:5c:3b:ec:aa:46:46:74:7c:40
Connection abandoned.
fatal: Could not read from remote repository.

После этого сообщения вы можете добавить ключ в кеш с помощью команды:

echo y | plink git@bitbucket.org

ЗАМЕЧАНИЕ : Пожалуйста, проверьте, есть ли у вас plink PATH. В качестве альтернативы используйте UNIX-подобный путь в опции конфигурации GitBash, например:

/c/Program\ Files/PuTTY/plink.exe -batch
frenchu
источник
1
Привет, я получаю это сообщение: FATAL ERROR: Disconnected: Нет доступных поддерживаемых методов аутентификации (сервер отправлен: publickey)
pungggi
4

Даже после выполнения обходного пути, упомянутого в других ответах, вы можете столкнуться с ошибкой, такой как:

FATAL ERROR: Disconnected: нет поддерживаемых методов аутентификации (сервер отправлен: publickey)

Чтобы решить обе проблемы одновременно, измените git bash на использование SSH вместо PuTTY, добавив следующее в ваш ~/.profileфайл ( C:\Users\<Username>\.profile). Если у вас еще нет этого файла, создайте новый файл с этой строкой.

GIT_SSH="/usr/bin/ssh.exe"

Затем откройте новое окно git bash и попробуйте снова git cloneили git pullснова.

Обратите внимание, что для этого может потребоваться создать ключ SSH, если у вас его еще нет. Для этого следуйте инструкциям на сайте Bitbucket .

Смотрите этот вопрос так для получения дополнительной информации.

Schparky
источник
1

В вашей оболочке git bash проверьте наличие GIT_SSH:
echo $GIT<tab><tab>
если он существует и для него установлена ​​putty, выполните:
unset GIT_SSH
Возможно, вы захотите поместить это в один из сценариев запуска git bash.
Это НЕ универсальное решение. Это сработало в нашем конкретном случае.

Ричард Джессоп
источник
что / где находится «скрипт запуска git bash»? Я знаком только с настоящим Linux.
Джефф К
Есть несколько сценариев запуска. Некоторые находятся в каталоге / etc; другие могут быть в вашем домашнем каталоге. Какие сценарии запуска выполняются, зависит от параметров командной строки в вашей оболочке (интерактивное или логин). Они актуальны независимо от ОС, над которой работает оболочка.
Ричард Джессоп
В Windows нет каталога / etc.
Джефф К
Bash оболочки, которые работают под Windows, делают. Они обычно отображаются в каком-либо месте вне базового (или установочного) каталога оболочки. Взгляните на git bash и Cygwin bash. Помните, что эти оболочки выглядят и работают так же, как оболочки в системе Linux.
Ричард Джессоп
0

Это звучит немного глупо, но после попытки всего вышесказанного, я решил переустановить Git Bash с параметрами по умолчанию, и это сработало.

Влад
источник