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

126

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

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

*\subnus.mvc>git push origin master
Enter passphrase for key '/c/Users/Subnus/.ssh/id_rsa':
  • 0
    Я сам не использовал msysgit, но может помочь агент проверки подлинности конкурса .
  • 1
    Я перепробовал все, а потом нашел то, что сработало.
Теги:
cmd
ssh

11 ответов

198
Лучший ответ

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

Первое решение. Предполагается использование Windows, msysgit и PuTTY.

  • Установите msysgit и PuTTY в соответствии с инструкциями.
  • (Необязательно) Добавьте PuTTY в свой путь. (Если вы этого не сделаете, то любые ссылки на команды PuTTY ниже должны иметь префикс полного пути к соответствующему исполняемому файлу.)
  • Если вы еще этого не сделали, создайте хэш ключа, как указано в GitHub, или как указано вашим хостом Git.
  • Опять же, если вы еще этого не сделали, конвертируйте свой ключ для использования с PuTTY pageant.exe с помощью puttygen.exe. Инструкции находятся в документации PuTTY, в это полезное руководство и несколько других мест в киберпространстве.
  • Запустите PuTTY pageant.exe, откройте файл .ppk( "Добавить ключ" ) и предоставьте ключевую фразу для вашего ключа.
  • Откройте диалоговое окно переменных среды Windows (щелкните правой кнопкой мыши на "Компьютер", нажмите "Свойства", нажмите "Дополнительные системные настройки" или вкладку "Дополнительно", нажмите "Переменные среды" ). Добавьте следующую переменную среды:

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

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

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

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

    plink.exe git @github.com

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

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

Второе решение. Предполагается использование Windows, msysgit и TortoiseGit.

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

  • Установите msysgit и TortoiseGit в соответствии с инструкциями.
  • Если вы еще этого не сделали, создайте хэш ключа, как указано в GitHub, или как указано вашим хостом Git.
  • Опять же, если вы еще этого не сделали, конвертируйте свой ключ для использования с TortoiseGit pageant.exe, используя TortoiseGit puttygen.exe. Инструкции содержатся в документации PuTTY, в полезном руководстве, связанном с первым решением, и в нескольких других местах в киберпространстве.
  • Запустите TortoiseGit pageant.exe, откройте свой .ppk файл ( "Добавить ключ" ) и предоставьте ключевую фразу для вашего ключа.
  • Откройте диалоговое окно переменных среды 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), вероятно, вызовет у вас проблемы.

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

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

Третье решение. Предполагает окно, msysgit и встроенную командную строку.

  • Установить msysgit
  • Обязательно разрешите Git использовать в командной строке MS-DOS
  • Выполнить start-ssh-agent
  • Введите кодовые фразы SSH
  • Все сделано! Команды Git теперь должны работать в командной строке.
  • 3
    Если у вас есть и GitExtensions, и TortoiseGit, каждый из которых имеет свою собственную версию putty, убедитесь, что вы задали для переменной среды GIT_SSH путь plink для фактически используемого вами представления.
  • 1
    Этот пост великолепен, и единственное, что можно улучшить, это сделать его короче.
Показать ещё 13 комментариев
17

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

  • 0
    Именно то, что мне нужно для использования оболочки msysgit .
  • 1
    Работал для меня при использовании Git Bash Desktop App. Я использовал notepad ~/.profile и скопировал содержимое этой ссылки, перезапустил Git Bash, ввел свой пароль, получил прибыль ...
Показать ещё 1 комментарий
12

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

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

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

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


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

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

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

  • 8
    Это решение, кажется, не работает с репозиториями SSH, только HTTPS. /злое лицо
10

Это не git, это ssh.

Я не делаю окна, но у ssh есть концепция агента, которая может запомнить парольные фразы для вас. OS X имеет это значение по умолчанию. Возможно, у вашего клиента ssh есть способ настроить это.

7

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

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

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

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

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

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

  • 0
    Не могли бы вы преобразовать это в описание, используемое кем-то, у кого нет доступа к оболочке? Например, что мы должны поместить в author_keys, используя блокнот или подобное?
  • 0
    Спасибо, что напомнили мне об этом! Я думаю, что мой ответ немного вводил в заблуждение, надеюсь, новая версия поможет.
7

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

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

  • 0
    запуск ssh-keygen -p должен позволить OP не устанавливать пароль
  • 0
    Все еще запрашиваю пароль.
4

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

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

  • 0
    Обратите внимание, что это кэширование вашего пароля GitHub, а не ключевой фразы GPG.
3

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

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

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

Изображение 7352

Надеюсь, поможет.

Ура,

Guy.

  • 1
    Этот ответ кажется мне проще, спасибо!
  • 0
    @ Осмар - Спасибо :), рад, что смог помочь.
3

Для этой проблемы существует более сильное решение, если вы не возражаете, если у вас есть пароль, хранящийся в открытом виде, и вы используете TortoiseGit.

Просто создайте файл _netrc в каталоге вашего профиля пользователя, то есть в Windows 7 это будет C:\Users\MyName\_netrc. Этот файл сохранит ваши данные для входа в этом формате:

machine bitbucket.org login thisismyname password p455w0rD
machine bitbucket.org login another_account password pwdpwdPWd
machine github.com login thisismynameagain password p455w0rD

Я использую TortoisePLink в качестве SSH-клиента, и он работает безупречно.

  • 0
    К сожалению, это не работает, если вы используете openssh вместо plink. я хочу использовать openssh, чтобы он работал с Eclipse и другими системами. Я потратил несколько дней, пытаясь найти способ сохранить парольную фразу, пока не повезло.
1

Вы можете создать файл .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 вместо файла .bashrc требуется файл .bash_profile, так что на всякий случай .bashrc:

copy .bashrc .bash_profile
1

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

ssh-add -k ~/.ssh/id_rsa

Ещё вопросы

Сообщество Overcoder
Наверх
Меню