Почему git запрашивает ключевую парольную фразу, когда ssh этого не делает?

#git #ssh #windows-10

Вопрос:

Я просмотрел несколько вопросов и ответов о том, почему git каждый раз запрашивает парольную фразу ключа SSH, но я не нашел ни одного, описывающего мою ситуацию. Моя ситуация отличается тем, что я успешно создал ssh-ключ, добавил его в агент, и агент запущен. Поэтому, когда я бегу:

 ssh -T git@github.com
 

Я сразу же получаю сообщение об успешном выполнении: «Вы успешно прошли аутентификацию, но GitHub не предоставляет доступ к оболочке». Он не запрашивает парольную фразу.

Озадачивает то, что в powershell, когда я перехожу к репозиторию git, связанному с этой учетной записью, и запускаю команду git, подобную этой:

 cd ~/mygitrepo
git fetch
 

Меня об этом просят Enter passphrase for key 'C:Usersme.sshgithub' .

Если я введу кодовую фразу, я успешно смогу извлечь ее из репозитория.

Почему меня просят ввести парольную фразу при выполнении git команды, но не при выполнении ssh команды?

Дополнительные сведения

Я использую Windows 10, используя PowerShell внутри терминала Windows. Я каждый день использую ssh для подключения к различным удаленным устройствам, и он никогда не запрашивает кодовую фразу.

Фрагмент из ~/.ssh/config

 Host github.com
    HostName github.com
    User git
    IdentityFile C:Usersme.sshgithub
 

Фрагмент из ~/mygitrepo/.git/config

 [remote "origin"]
    url = git@github.com:myuser/myrepo.git
 

Комментарии:

1. Git поставляется со своим собственным ssh; Windows 10 также поставляется со своим собственным ssh. Две ваши разные установки ssh не могут общаться друг с другом. Если ваш Windows ssh способен выполнять все, что нужно Git (вероятно, это так, не уверен в этом, так как я не использую Windows, но Windows 10, вероятно, достаточно нова), вы, вероятно, просто хотите убедить Git использовать Windows ssh.

2. (В данном конкретном случае, я думаю, что Git ssh ищет другого агента, что приводит к необходимости в парольной фразе.) Установка GIT_SSH_COMMAND в среде или core.sshCommand в вашей глобальной конфигурации Git должна исправить это.

3. Хорошо, @torek Я не могу сказать вам, сколько часов я потратил на эту проблему, и вы нашли ее причину.

Ответ №1:

Когда вы запускаете команду git, по умолчанию она использует свою собственную версию ssh, которая не может взаимодействовать с ssh-агентом Windows.

Узнайте, что использует двоичная Windows:

 Powershell> where.exe ssh
CMD> where ssh
 

Для меня результат таков C:WindowsSystem32OpenSSH . Теперь заставьте git использовать этот двоичный файл, установив следующую строку в вашем глобальном .gitconfig файле:

 [core]
    sshCommand = "C:/WINDOWS/System32/OpenSSH/ssh.exe"
...