Чому git не може запам'ятати свою парольну фразу під Windows


144

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

але я все одно отримую

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

Я не використовував msysgit себе, але театралізоване засіб аутентифікації може бути корисним.
Cebjyre

1
Я спробував все, а потім виявив, що це спрацювало.
Блейк Ніємійський

1
Windows 10 вже деякий час постачається з OpenSSH. Увімкніть службу ssh-агента, використовуйте ssh-add, щоб додати свій ключ до ssh-магазину, а потім встановіть GIT_SSHу вашому оточенні (якщо необхідно), а git / ssh запам’ятає вашу парольну фразу через ssh-agent. Дивіться мою відповідь нижче для більш детальних інструкцій.
d3r3kk

1
2019 рік, щойно встановлений git на Windows 10 і git запитує пароль один раз , і пам’ятає його.
Жан-Франсуа Фабре

@ Jean-FrançoisFabre Можливо, ви не використовуєте OpenSSL.
RoadRunner

Відповіді:


206

Я усвідомлюю, що це питання виникає на два роки, але у мене було те саме питання, і кілька відповідей тут не повністю відповіли на запитання для мене. Ось два покрокові рішення, залежно від того, використовуєте ви TortoiseGit на додаток до msysgit чи ні.

Перше рішення передбачає Windows, msysgit і PuTTY.

  1. Встановіть msysgit та PuTTY згідно інструкцій.
  2. (Необов’язково) Додайте PuTTY на свій шлях. (Якщо ви цього не зробите, то будь-які посилання на команди PuTTY нижче повинні бути встановлені повним шляхом до відповідного виконуваного файлу.)
  3. Якщо ви цього ще не зробили, то створіть хеш-ключ, як вказується в GitHub або за вказівкою вашого хоста Git.
  4. Знову ж , якщо ви ще не зробили цього, конвертувати ключ для використання з pageant.exe замазки, використовуючи puttygen.exe . Інструкції містяться в документації PuTTY, у цьому корисному посібнику та кількох інших місцях у кіберпросторі.
  5. Запустіть pageant.exe PuTTY , відкрийте файл .ppk ("Додати ключ") та введіть свою ключ пароля.
  6. Відкрийте діалогове вікно змінних середовища Windows (клацніть правою кнопкою миші на "Комп'ютер", натисніть кнопку "Властивості", натисніть "Розширені налаштування системи" або вкладку "Додаткові", натисніть "Змінні середовища"). Додайте таку змінну середовища:

    GIT_SSH = C: \ full \ path \ to \ 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 git@github.com

    Якщо сховище git, до якого ви намагаєтеся підключитися, розміщене десь в іншому місці, замініть git@github.com відповідним іменем користувача та URL-адресою. (Припускаючи Github) Вам слід повідомити, що ключ хоста сервера не кешований, і запитати, чи довіряєте ви цьому. Відповідь з у . Це додасть ключ хоста сервера до списку відомих хостів PuTTY. Без цього кроку команди git не працюватимуть належним чином. Після натискання клавіші Enter, Github повідомляє вам, що Github не забезпечує доступ до оболонки. Це добре ... нам це не потрібно. (Якщо ви підключаєтесь до якогось іншого хоста, і він надає вам доступ до оболонки, можливо, найкраще припинити посилання, не роблячи нічого іншого.)

  9. Готово! Команди Git тепер повинні працювати з командного рядка. Можливо, ви хочете, щоб pageant.exe завантажував ваш .ppk файл автоматично під час завантаження , залежно від того, як часто вам це буде потрібно.

Друге рішення передбачає Windows, msysgit і TortoiseGit.

TortoiseGit поставляється з виконуваними файлами PuTTY та спеціально модифікованою версією планкіна (так званої TortoisePlink.exe), яка полегшить роботу.

  1. Встановіть msysgit та TortoiseGit за інструкціями.
  2. Якщо ви цього ще не зробили, то створіть хеш-ключ, як вказується в GitHub або за вказівкою вашого хоста Git.
  3. Знову ж , якщо ви ще не зробили цього, конвертувати ключ для використання з pageant.exe TortoiseGit, використовуючи TortoiseGit в puttygen.exe . Інструкції містяться в документації PuTTY, у корисному посібнику, пов’язаному з першим рішенням, та кількох інших місцях у кіберпросторі.
  4. Запустіть pageant.exe TortoiseGit , відкрийте файл .ppk ("Додати ключ") і введіть свою ключ пароля.
  5. Відкрийте діалогове вікно змінних середовища Windows (клацніть правою кнопкою миші на "Комп'ютер", натисніть кнопку "Властивості", натисніть "Розширені налаштування системи" або вкладку "Додаткові", натисніть "Змінні середовища"). Додайте таку змінну середовища:

    GIT_SSH = C: \ full \ path \ to \ 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 файл автоматично під час завантаження , залежно від того, як часто вам це буде потрібно.

Третє рішення передбачає вікно, msysgit і нативної командної лінії.

  1. Встановити msysgit
  2. Переконайтеся, що дозволено використовувати git у командному рядку MS-DOS
  3. Біжи start-ssh-agent
  4. Введіть паролі SSH
  5. Готово! Команди Git тепер повинні працювати в натурному командному рядку.

3
Якщо у вас є і GitExtensions, і TortoiseGit, кожна з яких має свою власну версію шпаклівки, переконайтеся, що ви встановили змінну середовища GIT_SSH для шляху виклику для виступів, який ви фактично використовуєте.
шовавник

15
Про всяк випадок, якщо хтось інший зіткнеться з цією дурною помилкою: переконайтеся, що ви використовуєте формат віддаленої URL-адреси SSH (git @ host: accountname / reponame.git), а не HTTPS URL, інакше він продовжує запитувати цей пароль ...
Дейн

Коли я запускаю plink.exe git@github.com, я отримую "FATAL ERROR: Сервер несподівано закрив мережеве з'єднання"
Brett

4
Примітка. Спосіб третій був введений в msysgit, щоб ви могли просто ввести start-ssh-agentкомандний рядок, щоб отримати його для збереження вашої SSH-фрази.
Метт Кларксон

6
Третє рішення працює лише до закриття командного рядка і лише для цього командного рядка - всі інші CMD все ще вимагають пройти фразу. Також всі інші клієнти (VS, VS Code) не в змозі спілкуватися з віддаленим git.
Діма

21

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


Швидкі кроки для нетерплячих користувачів, як я

  1. Увімкніть OpenSSH Authentication Agentпослугу і змусьте її запускатися автоматично.
  2. Додайте свій ключ SSH до агента ssh-addза допомогою командного рядка.
  3. Перевірте інтеграцію git, якщо вона все ще вимагає вашої парольної фрази, продовжуйте продовжувати.
  4. Додайте змінну середовища $ENV:GIT_SSH=C:\Windows\System32\OpenSSH\ssh.exeдо свого сеансу або назавжди до свого користувальницького середовища.

Детальні кроки: огляд

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

Я припускаю, що у вас уже є налаштування ключа SSH і він знаходиться за адресою ~/.ssh/id_rsa

Увімкніть службу ssh-агент у вікні 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 git@github.com: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. Повторіть дії в Try Git + SSH вище.

Встановити GIT_SSH постійно

  1. Відкрийте Провідник файлів. Пуск-> введіть «Провідник файлів» та натисніть на нього у списку.
  2. Клацніть правою кнопкою миші «Цей ПК» та натисніть «Властивості».
  3. Клацніть на «Розширені налаштування системи».
  4. Натисніть кнопку "Змінні середовища ...".
  5. У розділі "Змінні користувача для вашого імені_користувача" натисніть кнопку Створити ...
  6. Встановити Variable name:поле GIT_SSH
  7. Встановіть Variable value:поле для шляху-to-ssh.exe (як правило C:\Windows\System32\OpenSSH\ssh.exe).
  8. Натисніть кнопку ОК, щоб вимкнути діалогове вікно "Нова змінна користувача".
  9. Натисніть кнопку ОК, щоб вимкнути діалогове вікно Змінні середовища.
  10. Повторіть дії в Спробуйте Git + SSH вище.

Зауважте, що це, ймовірно, зміниться з новими кроками / процедурами в міру просування Windows 10 і в міру того, як я дізнаюся більше. Я спробую тримати це оновленням, сподіваюсь на відгуки в коментарях.


3
Це найповніша відповідь станом на 31.01.2020 р., Принаймні для Windows. Не потрібно встановлювати PUTTY або щось інше.
Джейк

Домовились. Здається, що нарешті тут вбудована підтримка.
Ерон Ллойд

Легенда! Це вирішило мою проблему. Деякий час шукали рішення, пробуючи різні речі, і це руками найповніший прихильник цієї проблеми
Collin

Дякую за гарну відповідь і за те, що врятувало мене, швидше за все, за кілька годин безладу. +1
Сердитий 84

20

Для тих, хто потребує більш детальних інструкцій, дивіться цю сторінку: http://help.github.com/working-with-key-passphrases/


Саме те, що мені було потрібно для використання msysgitоболонки.
Артуракай

1
Працював для мене під час використання програми Git Bash Desktop. Я використав notepad ~/.profileі скопіював вкладений вміст із цього посилання, перезапустив Git Bash, ввів свій пароль, отримав прибуток ...
Дарин

Я дотримувався розділу "Автозапуск ssh-агента в Git для Windows" (використовуючи git 2.x у програмі Win 10), але він все ще просив мене ввести пароль. Після першого рішення (шпаклівки) з прийнятої відповіді зафіксовано це для мене.
jakub.g

20

Якщо ви використовуєте Git bash під Windows, ви можете виконати наступні дії:

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

він попросить пропустити фразу в другій команді, і все. Кожна додаткова дія, яку вам потрібно буде виконати (яка колись вимагає пропустити фразу), не запитає вас про фразову фразу (див. Приклад на знімку екрана нижче):

додавання пропускної фрази в Git bash для Windows


2
Це також працює в підсистемі Ubuntu в Windows 10.
meetar

1
зауважте, що якщо ваше
ключове слово

13

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

ПРИМІТКА. Передбачається, що ви використовуєте комп'ютер під керуванням Windows.

  1. Завантажте git-poverible-winstore .
  2. Запусти! Якщо у вас є PATHзмінна середовище GIT , вона повинна просто працювати. Якщо ви цього не зробите, біжіть git-credential-winstore -i C:\Path\To\Git.exe.

Наступного разу, коли ви намагатиметеся зробити доступ до сховища, вам буде запропоновано ввести свої облікові дані. Це повинно бути. Поки ви не будете просити ваші облікові дані, поки ви не зміните свій пароль.


Тільки для ваших знань ... Ваші облікові дані зберігаються у магазині облікових даних Windows

Де ви зберігаєте мої облікові дані?

Цей додаток просто використовує наявний магазин облікових записів Windows для зберігання ваших облікових даних. Ви можете побачити збережені облікові дані, перейшовши на Панель управління> Облікові записи користувачів> Менеджер довірених даних та оберіть "Повноважні дані Windows". Записи, що починаються з "git:", - від git-credential-winstore.


8
Здається, це рішення не працює з репортажами SSH, лише HTTPS. / goldenface
JasonCoder

8

Якщо ви встановите пароль для свого ключового файлу, вам завжди потрібно буде ввести цей пароль під час підключення. Якщо ви створили ключ без пароля, вам не доведеться вводити його щоразу, проте кожен, хто має доступ до вашого ключового файлу, тепер може підключитися до вашого облікового запису github.

ssh-агент також може працювати. Спробуйте запустити це і побачити, чи запам'ятає він вашу парольну фразу.


біг ssh-keygen -pповинен дозволяти ОП не встановлювати парольну фразу
luchosrock

Все ще запитує пароль.
versedi

7

[редагувати - неправильно прочитати питання, це відповідь на пов’язану проблему. залишаючи переформульовану версію для нащадків]

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

Додавши свій відкритий ключ до авторизованих ключів на сервері, я зміг отримати безпровільне натискання на цей сервер. І тому, що не було парольної фрази в моєму приватному ключі (що погана практика btw!), Мені взагалі нічого не потрібно було вводити.

Ось команда додати ваш відкритий ключ до сервера. Це передбачає користувачаgit є користувачем на сервері.

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

Те ж саме можна досягти, увійшовши на сервер та вручну додавши відкритий ключ до файлу за адресою ~/.ssh/authorized_keys


Чи можете ви перетворити це в опис, який може використовуватися тим, хто не має доступу до оболонки? Наприклад, що нам слід помістити в дозволені_кейси за допомогою блокнота чи подібного?
Джон Маленький

4

Я усвідомлюю, що це вже кілька років, але я наткнувся на це питання, намагаючись знайти рішення, і знайшов щось, що відповідає всім рівням знань, тому я подумав, що поділюсь.

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


Зауважте, що це кешування вашого пароля GitHub , а не парольна фраза ключа GPG.
Суддя2020

4

Припустимо, ви хочете використовувати чисте рішення тільки для 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-агента (bash скрипт GitHub перевіряє, чи цей процес вже запущений).
  • Як і два вище, але тим більше, коли у вас є окремі SSH-ключі для різних хостів, наприклад, один для GitHub та ще один для GitLab, тож надання їх відразу одразу і незручно.

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

Налаштування SSH запитувати паролі фрази один раз, коли потрібно, використовуючи лише Git Bash

  1. По-перше, ми хочемо автоматично запустити ssh-agentпри запуску оболонки Git Bash. Для цього ми будемо використовувати модифікований скрипт GitHub , оскільки він перевіряє, чи процес уже запущений, але ми не хочемо, щоб він 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

    З сторінки man ssh config : Якщо для цієї опції встановлено так, а ключ завантажено з файлу, ключ та його пропускна фраза додаються до агента зі строком служби за замовчуванням, як якщо б ssh-add (1).

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

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

Дивіться тут для інших класифікаторів формату часу.


3

Ви можете створити .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

1

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

ssh-add -k ~/.ssh/id_rsa
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.