Git продолжает спрашивать меня о моей ключевой фразе ssh

538

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

Что может быть причиной?

Рогач
источник
Связанный: stackoverflow.com/questions/14762034/…
Джефф

Ответы:

1039

Как только вы запустили агент SSH с:

eval $(ssh-agent)
  1. Вы должны добавить свой закрытый ключ к нему:

    ssh-add
    

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

  2. Для постоянного сохранения ключа в macOS:

    ssh-add -K  
    

    Это сохранится после закрытия и повторного открытия, сохраняя его в цепочке для ключей пользователя.

Роберто Бонваллет
источник
16
Выйдите из сервера, снова зайдите в ssh, запустите git pull, снова введите пароль.
cyber8200
35
ssh-add -Kбудет сохраняться после закрытия и повторного открытия, сохраняя его в цепочке для ключей пользователя.
Кирк
72
@Kirk ssh-add -Kдает следующее:unknown option -- K usage: ssh-add [options] [file ...] Options: -l List fingerprints of all identities. -L List public key parameters of all identities. -k Load only keys and not certificates. -c Require confirmation to sign using identities -t life Set lifetime (in seconds) when adding identities. -d Delete identity. -D Delete all identities. -x Lock agent. -X Unlock agent. -s pkcs11 Add keys from PKCS#11 provider.
Sandeep C
13
Я все еще получаю запрос на фразу-пароль.
Игорь Ганапольский
21
-Kэто яблоко специфично. См help.github.com/articles/...
bkdir
238

Это происходит со мной после перезагрузки с момента обновления с OS X El Capitan (10.11) до macOS Sierra (10.12). ssh-addРешение работал временно , но не будет сохраняться через другую перезагрузку.

Постоянным решением было отредактировать (или создать) ~/.ssh/configи включить UseKeychainопцию.

Host *
    UseKeychain yes

Связанный: macOS продолжает спрашивать мою парольную фразу ssh, так как я обновил Sierra

Кайл Клегг
источник
1
сработало для меня спасибо ... я сделал ... ssh-add -K /Users/***/.ssh/git/id_rsaно он все еще не работал после перезапуска терминала ... спасибо.
nawlbergs
2
Хотите, чтобы это произошло? Прочитайте техническую записку о OpenSSH изменения developer.apple.com/library/content/technotes/tn2449/...
samwize
62

Если вы пробовали, ssh-addно вам все еще предлагается ввести пароль, попробуйте использовать ssh-add -K. Это добавит вашу парольную фразу к вашей цепочке для ключей.

Обновление: если вы используете macOS Sierra, вам, вероятно, потребуется сделать еще один шаг, так как приведенное выше может больше не работать. Добавьте следующее к вашему ~/.ssh/config:

Host *
  UseKeychain yes
Дэррил Янг
источник
2
Все еще предлагает мне пароль.
Игорь Ганапольский
@IgorGanapolsky Вы используете macOS Sierra? Если это так, проверьте, что я только что добавил в ответ. Надеюсь, это поможет.
Дэррил Янг
2
Да, я на Сьерре. Тем не менее, вот линия, которая работала, работала и для меня: AddKeysToAgent yes
IgorGanapolsky
1
Это также работает с BitBucket Cloud. У меня были проблемы в GitKraken, и это решило мои проблемы.
Малахи
54

Я бы попробовал следующее:

  1. Запустить GitBash
  2. Отредактируйте ваш ~/.bashrcфайл
  3. Добавьте следующие строки в файл

SSH_ENV=$HOME/.ssh/environment

# start the ssh-agent
function start_agent {
    echo "Initializing new SSH agent..."
    # spawn ssh-agent
    /usr/bin/ssh-agent | sed 's/^echo/#echo/' > ${SSH_ENV}
    echo succeeded
    chmod 600 ${SSH_ENV}
    . ${SSH_ENV} > /dev/null
    /usr/bin/ssh-add
}

if [ -f "${SSH_ENV}" ]; then
     . ${SSH_ENV} > /dev/null
     ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
        start_agent;
    }
else
    start_agent;
fi
  1. Сохраните и закройте файл
  2. Закрыть GitBash
  3. Откройте GitBash
  4. Введите ваш пароль
Roland
источник
4
Для дальнейшего использования, это также работает с zsh. Просто добавьте это к.zshrc
Арда
2
Я полагаю, это предполагает, что ваш ключевой файл называется id_rsa. Если у вас есть собственное имя, вы должны использовать, например. /usr/bin/ssh-add ~/.ssh/custom_filename
Юха Унтинен,
2
Можете ли вы объяснить, что происходит с этим сценарием?
LeeR
2
@ См. Он запускает ssh-agent, если он еще не запущен, что позволяет вам не спрашивать парольную фразу ssh при каждом нажатии (более или менее).
Роланд
Это просто запускает ssh-agent и добавляет ключ при каждом входе в систему. Вам все равно придется вводить пароль при каждом входе в систему. Так, например, если у вас есть сценарии ssh-ing и команды GIT, это, к сожалению, бесполезно.
trainoasis
27

Попробуйте добавить это в ~ / .ssh / config :

Host *
   AddKeysToAgent yes
   UseKeychain yes
   IdentityFile ~/.ssh/id_rsa

... при условии, что ваш закрытый ключ называется id_rsa

IgorGanapolsky
источник
11
UseKeychain yes действителен только для Mac
Oz123
3
@ Oz123 какой эквивалент для windows
Игорь Ганапольский
@ Oz123 Я думаю, что эквивалент в Windows - AddKeysToAgent, да, проверьте этот ответ stackoverflow.com/questions/52423626/…
fedeteka
6

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

Оказывается, у меня было несколько ключей, и Git сначала использовал неправильный. Он запросит у меня пароль и я введу его, тогда Git будет использовать другой ключ, который будет работать (чтобы мне не нужно было вводить фразу).

Я просто удалил ключ, который он использовал, чтобы запросить у меня пароль, и теперь он работает!

11101101b
источник
5

Похоже, у вас могут быть проблемы с самим SSH-агентом. Я бы попробовал устранить это.

1) Вы делали ssh-add, чтобы добавить свой ключ в SSH?

2) Вы закрываете окно терминала между использованиями, потому что, если вы закроете окно, вам придется снова вводить пароль при его открытии.

Джефф Веллинг
источник
2
Было бы неплохо добавить информацию о том, как решить первую проблему Джеффа Веллинга.
Ран
5

Если вышеуказанные решения не работают для меня, нужно проверить, есть ли у вас открытый ключ (обычно id_rsa.pub ). Это необычно, но это было причиной для меня.

Чтобы создать ваш открытый ключ из вашего личного ключа:

ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub
Стивен Харрис
источник
1

Я пробую разные решения, но ничего не помогу. Но это шаги ( Моя среда GitBash SSH всегда запрашивает мою фразу-пароль, что я могу сделать? ) Из швов Bitbucket.com работает хорошо:

Идея заключается в следующем:

  1. вы создаете ~/.bashrcфайл

  2. добавить следующий скрипт:

    SSH_ENV=$HOME/.ssh/environment
    
    # start the ssh-agent
        function start_agent {
        echo "Initializing new SSH agent..."
        # spawn ssh-agent
        /usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
        echo succeeded
        chmod 600 "${SSH_ENV}"
        . "${SSH_ENV}" > /dev/null
        /usr/bin/ssh-add
    }
    
    if [ -f "${SSH_ENV}" ]; then
         . "${SSH_ENV}" > /dev/null
         ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
            start_agent;
        }
    else
        start_agent;
    fi
    
  3. повторно запустить Bash

Alx Lark
источник
1

Другое возможное решение, которое не упомянуто выше, - это проверить пульт с помощью следующей команды:

git remote -v

Если пульт не запускается с git, а запускается с https, вы можете изменить его на git, следуя приведенному ниже примеру.

git remote -v // origin is https://github.com/user/myrepo.git
git remote set-url origin git@github.com:user/myrepo.git
git remote -v // check if remote is changed
Дарков
источник