#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"
...