TortoiseGit с ключом openssh не аутентифицируется с помощью ssh-agent

Я настраиваю git-среду в Windows XP (msysGit 1.7.11, TortoiseGit 1.7.14) и пытаюсь достичь следующих целей:

  • SSH-соединение через порт, отличный от значения по умолчанию 22
  • SSH-агент выполняет аутентификацию ssh

Поэтому я создаю файл ~/.ssh/config:

Host gitbox
   User gitolite
   Hostname XX.XX.XX.XX
   Port 154
   PreferredAuthentications publickey
   IdentityFile "/c/Documents and Settings/kraymer/.ssh/id_rsa"

При использовании интерфейса командной строки git bash все работает как задумано.

Я борюсь с TortoiseGit.
Сначала я установил TortoiseGit с Plink и использовал Pageant для загрузки закрытого ключа ssh. Автоматическая аутентификация (Pageant) работала, но установка не удалась, так как TortoiseGit не распознает URL-адрес git-репозитория в формате gitolite@gitbox/repo.git.

Затем я решил установить TortoiseGit с помощью openssh-клиента, чтобы ssh-клиент мог прочитать конфигурационный файл и имитировать настройку git CLI.
Я выбрал ssh.exe, поставляемый с msys git, в качестве клиента ssh в настройках TortoiseGit.
При выполнении git pull удаленный URL-адрес теперь разрешен, но пароль парольной фразы запрашивается, в то время как я ожидаю, что произойдет автоматическая аутентификация ssh-agent.

https://dl.dropbox.com/u/1026715/tortoisegit.png

Можно ли заставить TortoiseGit работать с ssh-agent?
Или сделать TortoiseGit (Plink) осведомленным о .ssh / config?

Правка № 1

Следуя совету @VonC, я настроил переменную $HOME.
Когда я нажимаю Показать переменные среды в TortoiseGit, у меня теперь есть:

 HOME=C:\Documents and Settings\kraymer  
 HOMEDRIVE=C: 
 HOMEPATH=\Documents and Settings\kraymer 

Но git pull по-прежнему требуют ввода пароля.

9 ответов

Решение

Никаких настроек не требуется.

Просто сделайте так, чтобы TortoiseGit указывал на тот же ssh-клиент, который использовался самим git, см. Скриншот:

Это должно быть C:\Program Files\Git\usr\bin\ssh.exe в последней версии Git, упомянутой Алексеем Концевичем в комментариях.

Система
Windows10 #TortoiseGit
в сетевом разделе
Из: C:\Program Files\TortoiseGit\bin\TortoiseGitPlink.exe
Кому: "C:\Users{user}\AppData\Local\Programs\Git\usr\bin\ssh.exe"

1) Cygwin

Используйте подход, описанный в следующей статье: https://help.github.com/articles/working-with-ssh-key-passphrases

Пароль будет запрошен только один раз при запуске сеанса Cygwin.!!! Перед выходом из сеанса cygwin не забудьте убить процесс ssh-agent (используйте ps для поиска PID процесса и kill -9).

Мы используем отдельный подход для Cygwin, потому что Cygwin по какой-то причине не видит процессы, запущенные извне в среде Windows.

2, 3) MsysGit, TortoiseGit

Полезная ссылка: http://dogbiscuit.org/mdub/weblog/Tech/WindowsSshAgent

Установите MsysGit. Установите TortoiseGit (во время установки проверьте openssh вместо plink).!!! Проверьте системные переменные. Если есть переменная GIT_SSH - удалите ее.

Зайдите в TortoiseGit-> Настройки-> Общие

Установить Git exe путь к / bin Установить внешний путь dll к / mingw / bin

Перейдите в TortoiseGit-> Настройки-> Сеть. Установите для свойства SSH Client значение /bin/ssh.exe.

Определите системную переменную SSH_AUTH_SOCKS=C:\temp.ssh-socket

Запустите cmd.exe и выполните следующие команды (поскольку мы установили MsysGit, все следующие команды доступны в cmd - / bin добавлена ​​в системную переменную PATH):

# following command is required to execute for avoiding Address already bind message when ssh-agen is not started yet but .ssh-socket exists after previous agent session
rm "%SSH_AUTH_SOCK%"

# Starting ssh-agent
ssh-agent -a "%SSH_AUTH_SOCK%"

# Adding our openssh key
ssh-add "%USERPROFILE%\.ssh\id_rsa"

# Type password for your key

Вот и все. С этого момента вы можете выполнять git push, git pull из TortoiseGit и MsysGit без запроса пароля.

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

Сначала я установил TortoiseGit с Plink и использовал Pageant для загрузки закрытого ключа ssh. Автоматическая аутентификация (Pageant) работала, но установка не удалась, так как TortoiseGit не распознает URL-адрес git-репозитория в формате gitolite@gitbox/repo.git.

Наконец, я нашел обходной путь, который заключается в создании сессии PuTTY с тем же именем, что и псевдоним ssh (т.е. gitbox в вопросе).
Таким образом, я могу клонировать как git clone gitbox/monrepo в CLI и тому origin синтаксис правильно обрабатывается TortoiseGit.

Кажется, есть множество вариантов, чтобы решить эту проблему. Поскольку ничего из вышеперечисленного не помогло мне, я решил поделиться тем, что мне помогло.

Снимок экрана: Настройки сети / Git SSH Client

В Settings... -> Network -> SSH -> SSH clientустановите клиент на C:\Program Files\TortoiseGit\bin\TortoiseGitPlink.exe, Используя Pageant, вы автоматически аутентифицируетесь, как и ожидалось, в противном случае вам будет предложено ввести пароль-пароль. Убедитесь, что в диалоговом окне push установлен флажок "Autoload Putty Key".

Ни один из приведенных выше ответов не помог мне.

Я создал этот командный файл для решения проблемы.

CALL "C:\Program Files\Git\cmd\start-ssh-agent.cmd"
SETX SSH_AUTH_SOCK "%SSH_AUTH_SOCK%"
SETX SSH_AGENT_PID "%SSH_AGENT_PID%"

Запустите это один раз и введите вашу фразу-пароль.

Затем вы можете использовать tortoisegit с openssh без необходимости вводить вашу фразу-пароль для каждой операции.

Поскольку объяснения здесь немного устарели, я решил опубликовать свое решение.

Я использую Git Bash и TortoiseGit 2.8.0 в Windows 10, которые распространены в настоящее время.

Я поставил ssh.exe как клиент SSH в Settings->Network как объяснено в предыдущих постах.

Я создал скрипт со следующими командами, как объяснено в предыдущем комментарии. Вы также можете установить переменную среды HOME, если ваша система не делает это автоматически. Предполагая, что ваш дом находится на диске H:\, вы можете добавить следующие строки:

SETX HOME /h
CALL "C:\Program Files\Git\cmd\start-ssh-agent.cmd"
SETX SSH_AUTH_SOCK "%SSH_AUTH_SOCK%"
SETX SSH_AGENT_PID "%SSH_AGENT_PID%"

Я добавил скрипт, используя Win logo+R shell:startup в папку автозагрузки. Кроме того, вы можете добавить скрипт в реестр, чтобы гарантировать, что он запускается раньше других процессов:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run

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

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

В качестве примера см. " Сбой аутентификации в Windows XP с git и tortoisegit".
(Другие возможные источники: " Как мне сказать Git для Windows, где найти мой закрытый ключ RSA?")

Если вы используете ключи RSA в репозиториях, добавьте в конец скрипта, как описано выше ^

CALL "C:\Program Files\Git\cmd\start-ssh-agent.cmd"
...
"C:\Program Files\Git\usr\bin\ssh-add"  ~/.ssh/myid.rsa

Работает с Git 2.24.0, TortoiseGit 2.9.0, Windows 10 и не использует Putty.

Другие вопросы по тегам