Почему git не может запомнить мою парольную фразу под Windows

Я только начал использовать git и не могу заставить его запомнить свою парольную фразу. Я использую cmd.exe с повышенными правами, а мой хост git - github, и я создал ключ ssh, подобный этому руководству на github.

но я все еще получаю

*\subnus.mvc>git push origin master
Enter passphrase for key '/c/Users/Subnus/.ssh/id_rsa':

person Nesizer    schedule 15.12.2008    source источник
comment
Сам я не использовал msysgit, но конкурс агент аутентификации может быть полезным.   -  person Cebjyre    schedule 16.12.2008
comment
Я пробовал все, а затем нашел это, которое сработало.   -  person Blake Niemyjski    schedule 28.08.2012
comment
Windows 10 уже некоторое время поставляется с OpenSSH. Включите службу ssh-agent, используйте ssh-add, чтобы добавить свой ключ в хранилище ssh, и установите GIT_SSH в вашей среде (при необходимости), и git/ssh запомнит вашу парольную фразу через ssh-agent. Смотрите мой ответ ниже для более подробных инструкций.   -  person d3r3kk    schedule 10.11.2019
comment
2019, только что установил git на Windows 10, и git запрашивает пароль один раз и запоминает его.   -  person Jean-François Fabre    schedule 22.12.2019
comment
@Jean-FrançoisFabre Возможно, вы не используете OpenSSL.   -  person RoadRunner    schedule 26.05.2020
comment
Я ничего не меняю, поэтому, возможно, я использую Windows SSH.   -  person Jean-François Fabre    schedule 26.05.2020


Ответы (11)


Я понимаю, что этому вопросу уже два года, но у меня была такая же проблема, и несколько ответов здесь не полностью ответили на вопрос для меня. Вот три пошаговых решения, в зависимости от того, используете ли вы TortoiseGit в дополнение к msysgit или нет.

Первое решение предполагает наличие Windows, msysgit и PuTTY.

  1. Установите msysgit и PuTTY в соответствии с инструкциями.

  2. (Необязательно) Добавьте PuTTY к вашему пути. (Если вы этого не сделаете, то любые приведенные ниже ссылки на команды PuTTY должны начинаться с полного пути к соответствующему исполняемому файлу.)

  3. Если вы еще этого не сделали, сгенерируйте хэш ключа в соответствии с инструкциями на GitHub или в соответствии с инструкциями вашего хоста Git.

  4. Опять же, если вы еще этого не сделали, преобразуйте свой ключ для использования с pageant.exe PuTTY с помощью puttygen.exe. Инструкции находятся в документации PuTTY, в этом полезном руководстве и в нескольких других местах. в киберпространстве.

  5. Запустите pageant.exe от PuTTY, откройте файл .ppk (Добавить ключ) и введите кодовую фразу для вашего ключа.

  6. Откройте диалоговое окно переменных среды Windows (щелкните правой кнопкой мыши «Компьютер», выберите «Свойства», нажмите «Дополнительные параметры системы» или на вкладке «Дополнительно» нажмите «Переменные среды»). Добавьте следующую переменную среды:

    GIT_SSH=C:\полный\путь\к\plink.exe

    Замените C:\full\path\to полным путем установки к PuTTY, где находится plink.exe. Вероятно, лучше всего добавить его в раздел «Пользовательские переменные». Кроме того, убедитесь, что путь, который вы используете для plink.exe, совпадает с путем, который вы используете для Pageant (pageant.exe). В некоторых случаях у вас может быть несколько установок PuTTY, потому что он может быть установлен вместе с другими приложениями. Использование plink.exe из одной установки и pageant.exe из другой, скорее всего, вызовет у вас проблемы.

  7. Откройте командную строку.

  8. Если вы пытаетесь подключиться к репозиторию git, размещенному на Github.com, выполните следующую команду:

    plink.exe [email protected]

    Если репозиторий git, к которому вы пытаетесь подключиться, размещен в другом месте, замените [email protected] соответствующим именем пользователя и URL-адресом. (Предполагая Github) Вам следует сообщить, что ключ хоста сервера не кэшируется, и спросить, доверяете ли вы ему. Ответьте знаком y. Это добавит ключ хоста сервера в список известных хостов PuTTY. Без этого шага команды git не будут работать должным образом. После нажатия Enter Github сообщит вам, что Github не предоставляет доступ к оболочке. Это нормально... нам это не нужно. (Если вы подключаетесь к какому-то другому хосту, и он дает вам доступ к оболочке, вероятно, лучше всего разорвать связь, ничего не делая.)

  9. Все сделано! Команды Git теперь должны работать из командной строки. Возможно, вы захотите, чтобы pageant.exe загрузил ваш .ppk файл автоматически во время загрузки, в зависимости от того, как часто он вам понадобится.

Второе решение предполагает наличие Windows, msysgit и TortoiseGit.

TortoiseGit поставляется с исполняемыми файлами PuTTY и специально модифицированной версией plink (называемой TortoisePlink.exe), которая упрощает работу.

  1. Установите msysgit и TortoiseGit в соответствии с инструкциями.

  2. Если вы еще этого не сделали, сгенерируйте хэш ключа в соответствии с инструкциями на GitHub или в соответствии с инструкциями вашего хоста Git.

  3. Опять же, если вы еще этого не сделали, преобразуйте свой ключ для использования с pageant.exe TortoiseGit с помощью puttygen.exe TortoiseGit. Инструкции находятся в документации PuTTY, в полезном руководстве, на которое ссылается первое решение, и в нескольких других местах в киберпространстве.

  4. Запустите pageant.exe TortoiseGit, откройте файл .ppk (Добавить ключ) и введите кодовую фразу для вашего ключа.

  5. Откройте диалоговое окно переменных среды Windows (щелкните правой кнопкой мыши «Компьютер», выберите «Свойства», нажмите «Дополнительные параметры системы» или на вкладке «Дополнительно» нажмите «Переменные среды»). Добавьте следующую переменную среды:

    GIT_SSH=C:\полный\путь\к\TortoisePlink.exe

    Замените C:\full\path\to полным путем установки к TortoiseGit, где находится TortoisePlink.exe. Вероятно, лучше всего добавить его в раздел «Пользовательские переменные». Кроме того, убедитесь, что путь, который вы используете для TortoisePlink.exe, совпадает с путем, который вы используете для Pageant (pageant.exe). В некоторых случаях у вас может быть несколько установок PuTTY, потому что он может быть установлен вместе с другими приложениями. Использование TortoisePlink.exe из установки TortoiseGit и pageant.exe из другой установки другого приложения (или из отдельной установки PuTTY), скорее всего, вызовет у вас проблемы.

  6. Все сделано! Команды Git теперь должны работать из командной строки. При первой попытке подключения к репозиторию git вам, вероятно, сообщат, что ключ хоста сервера не кэширован, и спросят, доверяете ли вы серверу. Нажмите Да. (Это TortoisePlink.exe в действии.)

    Возможно, вы захотите, чтобы pageant.exe загрузил ваш .ppk файл автоматически во время загрузки, в зависимости от того, как часто он вам понадобится.

Третье решение предполагает наличие Windows, msysgit и встроенной командной строки.

  1. Установить мсисгит
  2. Обязательно разрешите использование git в командной строке MS-DOS.
  3. Выполнить start-ssh-agent
  4. Введите парольные фразы SSH
  5. Все сделано! Команды Git теперь должны работать в собственной командной строке.
person Community    schedule 05.12.2010
comment
Если у вас есть и GitExtensions, и TortoiseGit, каждая из которых имеет свою собственную версию шпатлевки, убедитесь, что вы установили переменную среды GIT_SSH на путь plink для конкурса, который вы фактически используете. - person shovavnik; 18.02.2011
comment
На всякий случай, если кто-то еще столкнется с этой глупой ошибкой: убедитесь, что вы используете формат удаленного URL-адреса SSH (git@host:accountname/reponame.git), а не URL-адрес HTTPS, иначе он будет продолжать запрашивать этот пароль... - person dain; 06.01.2012
comment
Когда я запускаю plink.exe [email protected], я получаю ФАТАЛЬНУЮ ОШИБКУ: сервер неожиданно закрыл сетевое соединение - person Brett; 13.12.2012
comment
Последняя версия TortoiseGIT позволяет установить ключ Putty в меню «Настройки» > «Git» > «Удаленное» > «исходное» > «Ключ Putty». Он по-прежнему требует преобразования в специальный формат Putty и URL-адрес формата git@host. - person Chloe; 09.03.2013
comment
Почему-то оболочка не принимала переменную GIT_SSH, если она содержала пробелы, поэтому я использовал: ln -s /c/Program\ Files\ (x86)/PuTTY/plink.exe /bin/plink - person Adder; 20.03.2013
comment
@Adder Думаю, это один из способов сделать это. Возможно, вы захотите исследовать использование строк в кавычках в переменных среды для будущих подобных ситуаций, с которыми вы можете столкнуться. Немного проще, чем ссылка. - person RobertB; 07.04.2013
comment
Примечание: третий метод был вверх по течению в msysgit так что вы можете просто ввести start-ssh-agent в командной строке, чтобы сохранить вашу парольную фразу SSH. - person Matt Clarkson; 17.07.2014
comment
Вариант start-ssh-agent действительно классный и простой! Любить это! Для меня совершенно необъяснимо, что этого нет на соответствующей странице документации Github.!? - person Domi; 08.05.2017
comment
Как ни странно, когда я использую URL-адрес HTTPS, я не получаю запроса на ввод пароля. без этого я делаю. - person Leeish; 20.07.2017
comment
Третье решение работает только до закрытия командной строки и только для этой командной строки — все остальные CMD по-прежнему запрашивают парольную фразу. Также все остальные клиенты (VS, VS Code) не могут связаться с удаленным git. - person Dima; 02.09.2017
comment
Интересно, что использование start-ssh-agent превращает мой экземпляр Powershell в ванильный экземпляр CMD. - person Christopher Ronning; 14.09.2018

Каждый раз, когда я настраиваю новый рабочий стол, я забываю эти инструкции, поэтому добавляю сюда еще один ответ, так как сталкиваюсь с ним одинаково часто!


Быстрые шаги для нетерпеливых пользователей вроде меня

  1. Enable the OpenSSH Authentication Agent service and make it start automatically.
    • ???? Update ????
    • С последним обновлением Windows Version 10.0.19042.867 мне пришлось повторить этот шаг!
  2. Добавьте свой SSH-ключ к агенту с помощью ssh-add в командной строке.
  3. Протестируйте интеграцию с git, если она по-прежнему запрашивает вашу парольную фразу, продолжайте.
  4. Добавьте переменную среды $ENV:GIT_SSH=C:\Windows\System32\OpenSSH\ssh.exe в свой сеанс или навсегда в пользовательскую среду.

Подробные шаги: обзор

Windows уже некоторое время поставляется с OpenSSH. необходимые биты для ssh для работы вместе с Git, но, похоже, все еще требуется некоторая TLC, прежде чем он заработает на 100% без проблем. Вот шаги, которые я успешно выполнял, начиная с Windows версии 10.0.18362.449 (вы можете увидеть свою версию Windows 10, открыв оболочку cmd.exe и набрав ver).

Я предполагаю, что у вас уже есть настроенный ключ SSH, и он находится по адресу ~/.ssh/id_rsa

Включите службу ssh-agent на вашем компьютере с Windows 10.

  1. Пуск-> Введите «Службы» и нажмите на появившееся приложение «Службы».
  2. Найдите в списке службу OpenSSH Authentication Agent.
  3. Щелкните правой кнопкой мыши службу OpenSSH Authentication Agent и выберите «Свойства».
  4. Измените Startup type: на Automatic.
  5. Нажмите кнопку Start, чтобы изменить статус службы на Running.
  6. Закройте диалоговое окно, нажав OK, и закройте приложение «Службы».

Добавьте свой ключ в ssh-agent

  1. Откройте предпочтительную оболочку (в этом примере я буду использовать Windows Powershell, это относится и к Powershell Core).
  2. Добавьте свой SSH-ключ в ssh-agent: ssh-add (вы можете добавить путь к вашему ключу в качестве первого аргумента, если он отличается от значения по умолчанию).
  3. Введите парольную фразу, если/когда будет предложено сделать это.

Попробуйте Git + SSH

  1. Откройте свою оболочку (опять же, я использую Powershell) и клонируйте репозиторий. git clone [email protected]:octocat/Spoon-Knife
  2. Если вы видите это приглашение, перейдите к следующему разделу:
Enter passphrase for key '/c/Users/your_user_name/.ssh/id_rsa':

Установите переменную среды GIT_SSH

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

Чтобы установить GIT_SSH только в текущей оболочке:

  1. Откройте свою оболочку предпочтений. (Powershell для меня)
  2. Установите для переменной среды GIT_SSH соответствующее значение ssh.exe: $Env:GIT_SSH=$((Get-Command -Name ssh).Source).
  3. Повторите шаги из раздела Попробуйте Git + SSH выше.

Чтобы установить GIT_SSH навсегда

  1. Откройте проводник. Пуск-> введите «Проводник» и нажмите на него в списке.
  2. Щелкните правой кнопкой мыши «Этот компьютер» и выберите «Свойства».
  3. Нажмите «Дополнительные параметры системы».
  4. Нажмите кнопку «Переменные среды...».
  5. В разделе "Пользовательские переменные для your_user_name" нажмите "Создать"...
  6. Установите для поля Variable name: значение GIT_SSH.
  7. Установите в поле Variable value: путь к ssh.exe (обычно C:\Windows\System32\OpenSSH\ssh.exe).
  8. Нажмите «ОК», чтобы закрыть диалоговое окно «Новая пользовательская переменная».
  9. Нажмите «ОК», чтобы закрыть диалоговое окно «Переменные среды».
  10. Повторите шаги из раздела Попробуйте Git + SSH выше.

Обратите внимание, что это, вероятно, будет меняться с новыми шагами/процедурами по мере развития Windows 10 и по мере того, как я буду узнавать больше. Я постараюсь держать это в курсе, я с нетерпением жду отзывов в комментариях.

person d3r3kk    schedule 09.11.2019
comment
Это самый полный ответ на 31.01.2020, по крайней мере, для Windows. Нет необходимости устанавливать PUTTY или что-то еще. - person Jake; 01.02.2020
comment
Согласованный. Похоже, наконец-то появилась встроенная поддержка. - person Eron Lloyd; 02.03.2020
comment
Легенда! Это решило мою проблему. Некоторое время искал решение, пробовал разные вещи, и это самый полный ответ на эту проблему. - person Collin; 05.03.2020
comment
Спасибо за хороший ответ, который, скорее всего, сэкономил мне несколько часов безделья. +1 - person Angry 84; 11.07.2020
comment
Спасибо за это! Единственное, чего мне не хватало, так это переменной окружения. Я не мог понять, почему он работал, и я мог добавить ssh без ошибок, и агент работал, но он не помнил мои учетные данные! - person trnelson; 10.09.2020
comment
Это помогло, но в итоге я получил 2 версии ssh.exe и 2 агента ssh: один от msysgit и один от windows. Установки GIT_SSH было недостаточно, мне пришлось удалить C:\Program Files\Git\usr\bin\ssh.exe, чтобы заставить git для Windows использовать версию ssh для Windows и, следовательно, правильный агент. - person Willem; 19.10.2020
comment
@Willem возможно ли, что у вас был путь к оскорбительному ssh.exe в вашей переменной среды PATH, указанной перед системным ssh PATH? Тот, кто указан первым, получит вызов. - person d3r3kk; 19.10.2020
comment
Да, это так, но оскорбительный ssh.exe - это тот, что из самого msysgit, который при использовании git bash всегда автоматически ставится первым элементом. - person Willem; 20.10.2020
comment
Ах, понял @Willem, мой пост посвящен использованию Git в оболочке Powershell/cmd.exe/Windows, а не Git-Bash. Git-Bash - это другая настройка, и некоторые другие ответы на этой странице, вероятно, будут вам более полезны для этого сценария (и, насколько я могу судить, они также не являются взаимоисключающими решениями). Удачи! - person d3r3kk; 21.10.2020
comment
Если вы используете git в Powershell в марте 2021 года, это ответ, который вам нужен. Поддержка SSH уже давно встроена в Windows. - person rgoliveira; 24.03.2021
comment
Если вы используете Visual Studio, то, поскольку включенный git.exe является 32-разрядным, вам необходимо создать соединение каталогов, указывающее на C:\Windows\System32\OpenSSH, и установить для переменной среды GIT_SSH значение C:\PathToJunction\ssh.exe. В противном случае внутренний git.exe VS не сможет найти ssh.exe, потому что 32-разрядный исполняемый файл не может напрямую получить доступ к System32 в 64-разрядной системе. - person Saul; 21.05.2021
comment
Спасибо за понимание @Saul! Для сторонних инструментов, таких как Visual Studio и другие, скорее всего, всегда будут крайние случаи, которые не будут работать с базовой настройкой, обсуждаемой в этом посте. Существуют специальные сообщения, которые могут помочь в этих крайних случаях (и, вероятно, лучше, чем этот более общий), например, я нашел это для VS2017: stackoverflow.com/q/42773636/895739. Спасибо! - person d3r3kk; 28.05.2021

Если вы используете Git bash под Windows, вы можете выполнить следующее:

eval `ssh-agent -s`
ssh-add ~/.ssh/*_rsa

он запросит парольную фразу во второй команде, и все. Каждое дополнительное действие, которое вам нужно будет выполнить (которое когда-то требовало парольной фразы), не будет запрашивать у вас парольную фразу (см. пример на снимке экрана ниже):

«добавление

person Guy Avraham    schedule 02.04.2018
comment
Это также работает в подсистеме Ubuntu в Windows 10. - person meetar; 17.12.2019
comment
обратите внимание, что если ваша пара ключей находится в другом месте, вы можете заменить ~/.ssh/*_rsa на путь к файлу *.pem - person alex_danielssen; 04.06.2020

Для тех, кому нужны более подробные инструкции, посетите эту страницу: http://help.github.com/working-with-key-passphrases/

person Community    schedule 14.03.2010
comment
Именно то, что мне нужно для использования оболочки msysgit. - person arthurakay; 03.02.2016
comment
У меня работало при использовании настольного приложения Git Bash. Я использовал notepad ~/.profile и скопировал содержимое этой ссылки, перезапустил Git Bash, ввел свой пароль, получил прибыль... - person Daryn; 11.04.2017
comment
Я следил за автоматическим запуском ssh-agent в разделе Git для Windows (используя git 2.x в Win 10), но он все равно все время запрашивал пароль. Следующее первое решение (замазка) из принятого ответа исправило это для меня. - person jakub.g; 02.08.2018

Одно дополнительное решение через 5 лет, 8 месяцев и 6 дней после публикации вопроса было бы неплохо, так что вот.

ПРИМЕЧАНИЕ. Предполагается, что вы используете компьютер с Windows.

  1. Загрузите git-credential-winstore.
  2. Запустить его! Если у вас есть GIT в вашей переменной среды PATH, она должна просто работать. Если нет, запустите git-credential-winstore -i C:\Path\To\Git.exe.

В следующий раз, когда вы попытаетесь зафиксировать в репозитории, вам будет предложено ввести свои учетные данные. Это должно быть так. Вас больше не будут спрашивать о ваших учетных данных, пока вы не измените свой пароль.


Просто для вашего сведения... Ваши учетные данные хранятся в хранилище учетных данных Windows.

Где вы храните мои учетные данные?

Это приложение просто использует существующее хранилище учетных данных Windows для хранения ваших учетных данных. Вы можете просмотреть сохраненные учетные данные, выбрав «Панель управления» > «Учетные записи пользователей» > «Диспетчер учетных данных» и выбрав «Учетные данные Windows». Записи, начинающиеся с «git:», взяты из git-credential-winstore.

person Alex Essilfie    schedule 21.08.2014
comment
Это решение не работает с репозиториями SSH, только с HTTPS. /злое лицо - person JasonCoder; 16.07.2015

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

ssh-агент также может работать. Попробуйте запустить его и посмотрите, запомнит ли он вашу парольную фразу.

person Grant Limberg    schedule 15.12.2008
comment
запуск ssh-keygen -p должен позволить OP не устанавливать парольную фразу - person luchosrock; 15.04.2014
comment
Все еще запрашивает пароль. - person versedi; 28.04.2015

[редактировать - неправильно прочитал вопрос, это ответ на связанную проблему. оставив перефразированную версию для потомков]

В моем случае я пытался нажать на репозиторий, размещенный на одном из наших серверов. Всякий раз, когда я пытался выполнить push, git запрашивал у меня мой пароль (nb - пароль, а не парольную фразу для моего закрытого ключа).

Добавив свой открытый ключ к авторизованным ключам на сервере, я смог получить беспарольные отправки на этот сервер. А поскольку в моем закрытом ключе не было фразы-пароля (кстати, это плохая практика!) мне вообще не нужно было ничего вводить.

Вот команда для добавления вашего открытого ключа на сервер. Предполагается, что пользователь git является пользователем сервера.

cat .ssh/id_rsa.pub | ssh git@GIT_MASTER_IP 'cat >> .ssh/authorized_keys'

Вы можете добиться того же, войдя на сервер и вручную добавив свой открытый ключ в файл по адресу ~/.ssh/authorized_keys.

person hwjp    schedule 14.10.2010
comment
Не могли бы вы преобразовать это в описание, которое может использовать кто-то, у кого нет доступа к оболочке? Например. что мы должны поместить в author_keys с помощью блокнота или подобного? - person John Little; 14.07.2014

Предположим, вы хотите использовать чистое решение Git Bash без использования TortoiseGit или PuTTY. Кроме того, вы не хотите постоянно хранить свои парольные фразы, поскольку это почти то же самое, как если бы вы сгенерировали свой SSH-ключ без парольной фразы. Но вы все еще хотите использовать кэширование.

Для кеширования используется процесс ssh-agent, входящий в дистрибутив Git Bash. Этот процесс не запускается по умолчанию, поэтому его необходимо запустить первым. Для кэширования любых SSH-ключей их следует добавить в этот процесс с помощью команды ssh-add, которая запросит у вас кодовую фразу ключа и сохранит ее в памяти.

Недостатки других решений:

  • Автоматический запуск ssh-agent как в статья GitHub с самого начала запрашивает парольную фразу при запуске Git Bash, независимо от того, нужно ли вам использовать ключ SSH в этом сеансе или нет. Если вы сегодня работаете со своим локальным репозиторием, вы, вероятно, захотите предоставлять парольную фразу только тогда, когда это действительно необходимо (например, при взаимодействии с удаленным репо).
  • Если вы запустите свой ssh-agent, как в GitLab статью с eval $(ssh-agent -s) вы, вероятно, устали вводить это каждый раз. Скорее всего, в конечном итоге вы добавили эти две строки в конфигурацию .bashrc для автоматического запуска. Недостатки те же, что и выше, плюс дополнительный: каждый раз, когда вы запускаете новый терминал Git Bash, вы получаете дополнительный процесс ssh-agent (скрипт GitHub bash проверяет, запущен ли этот процесс).
  • Как и два выше, но особенно, когда у вас есть отдельные ключи SSH для разных хостов, например. один для GitHub, а другой для GitLab, поэтому предоставлять их все сразу раздражает и неудобно.

Так что это решение для тех, кто задается вопросом, как заставить Git Bash запрашивать парольную фразу только один раз за сеанс Windows и только тогда, когда это действительно необходимо. Это похоже на поведение управления парольными фразами с коммитами GnuPG автоподпись с помощью default-cache-ttl.

Настройка SSH для однократного запроса парольной фразы, когда это необходимо, с использованием только Git Bash

  1. Во-первых, мы хотим автоматически запускать ssh-agent при запуске оболочки Git Bash. Мы будем использовать модифицированный GitHub script для этого, так как он проверяет, запущен ли уже процесс, но мы не хотим, чтобы он сразу ssh-add ключей. Этот скрипт переходит к вашему ~/.bashrc или ~/.profile или ~/.bash_profile (~ — это домашний каталог вашего пользователя, такой как C:\Users\Username — запустите cd ~, а затем pwd, чтобы Git Bash распечатал его):

    ### Start ssh-agent
    
    env=~/.ssh/agent.env
    
    agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; }
    
    agent_start () {
        (umask 077; ssh-agent >| "$env")  # use -t here for timeout
        . "$env" >| /dev/null ; }
    
    agent_load_env
    
    # agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2= agent not running
    agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)
    
    if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then
        agent_start
    fi
    
    unset env
    
  2. Теперь отредактируйте или создайте файл ~/.ssh/config и добавьте параметр AddKeysToAgent для каждой строфы хоста, для которой вы хотите включить кэширование (вы также можете включить его глобально, поместив директиву в начало файла перед всеми объявления хоста):

    # GitHub.com
    Host github.com
      Preferredauthentications publickey
      IdentityFile ~/.ssh/id_ed25519_github
      AddKeysToAgent yes
    
    # GitLab.com
    Host gitlab.com
      Preferredauthentications publickey
      IdentityFile ~/.ssh/id_ed25519_gitlab
      AddKeysToAgent yes
    

    Со страницы ssh config man страницы: если для этого параметра установлено значение yes и ключ загружается из файла, ключ и его фраза-пароль добавляются к агенту со временем жизни по умолчанию, как если бы ssh-add(1).

Максимальное время жизни по умолчанию — навсегда или до тех пор, пока процесс ssh-agent не будет уничтожен (либо вручную из диспетчера задач, либо при выключении компьютера). Если вы хотите использовать конечное время ожидания, вы можете установить его с помощью -t ssh-agent. параметр. Измените строку в сценарии bash с первого шага выше, например. на 30 минут жизни кэша ключей:

(umask 077; ssh-agent -t 30m >| "$env")

См. здесь другие квалификаторы формата времени.

person Nikolay Kotlyarov    schedule 22.12.2019

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

GitHub предоставляет очень полезный установщик, который упрощает и упрощает работу: https://help.github.com/articles/caching-your-github-password-in-git/

person roobeedeedada    schedule 22.10.2012
comment
Обратите внимание, что это кэширует ваш пароль GitHub, а не кодовую фразу ключа GPG. - person Judge2020; 21.07.2017

Вы можете создать файл .bashrc в домашнем каталоге вашего пользователя, например C:/Users/youruser, и поместить туда:

env=~/.ssh/agent.env

agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; }

agent_start () {
    (umask 077; ssh-agent >| "$env")
    . "$env" >| /dev/null ; }

agent_load_env

# agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2= agent not running
agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)

if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then
    agent_start
    ssh-add
elif [ "$SSH_AUTH_SOCK" ] && [ $agent_run_state = 1 ]; then
    ssh-add
fi

unset env

Этот скрипт выполняется каждый раз после запуска bash. Таким образом, вам нужно будет ввести пароль только один раз при запуске git-bash!

Некоторые версии bash требуют .bash_profile файла вместо .bashrc, поэтому на всякий случай клонируйте .bashrc:

copy .bashrc .bash_profile
person Alexander Goncharov    schedule 03.04.2018

можете попробовать добавить -k arg, когда вы это сделаете;

ssh-add -k ~/.ssh/id_rsa
person tarikakyol    schedule 26.07.2016