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

319

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

В чем может быть причина?

  • 0
    @uDaY - я уже пытался запустить ssh-agent - это не помогло.
  • 0
    Недавно в github было нарушение, поэтому они хотели, чтобы вы явно проверяли ваши ssh-ключи, не так ли? с тем, который вы в основном используете?
Показать ещё 3 комментария
Теги:
github

10 ответов

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

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

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

    ssh-add
    

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

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

    ssh-add -K  
    

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

  • 11
    Выйдите из сервера, вернетесь по ssh, запустите git pull , снова запросите пароль.
  • 1
    Это не сработало для меня. Он все еще просит пароль, когда я закрываю Gitbash и открываю его снова.
Показать ещё 20 комментариев
144

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

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

Host *
    UseKeychain yes

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

  • 4
    Я понятия не имею, почему Сьерра однажды спросила меня об этом, но это сработало. Спасибо! (тем более что я не помню парольную фразу!)
  • 1
    работал для меня, спасибо ... я сделал ... ssh-add -K /Users/***/.ssh/git/id_rsa но он все еще не работал после перезапуска терминала ... спасибо.
Показать ещё 5 комментариев
43

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

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

Host *
  UseKeychain yes
  • 1
    Все еще предлагает мне пароль.
  • 0
    @IgorGanapolsky Вы используете macOS Sierra? Если это так, проверьте, что я только что добавил в ответ. Надеюсь, это поможет.
Показать ещё 1 комментарий
31

Я бы попробовал этот. Они говорят:

  • Начать GitBash
  • Отредактируйте файл ~/.bashrc
  • Добавьте в файл следующие строки

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. Reopen GitBash
  4. Введите ключевую фразу
  • 1
    Для дальнейшего использования это также работает с zsh . Просто добавьте это в .zshrc
  • 0
    Это работало для меня, каждый раз, когда я открывал bash в репозитории, он запрашивал пароль, все исправлено, спасибо.
Показать ещё 6 комментариев
5

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

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

  • 6
    UseKeychain yes действителен только для Mac
  • 1
    @ Oz123 что эквивалентно для windows
Показать ещё 2 комментария
5

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

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

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

4

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

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

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

  • 3
    Как я должен это делать?
  • 2
    Было бы неплохо добавить информацию о том, как решить первую проблему Джеффа Веллинга.
3

Что работало для меня в Windows (я клонировал код из репо 1-го):

eval $(ssh-agent)
ssh-add 
git pull 

и в это время он спросил меня в последний раз для моей кодовой фразы

Кредиты: решение было принято из https://unix.stackexchange.com/questions/12195/how-to-avoid-being-asked-passphrase-each-time-i-push-to-bitbucket

  • 0
    Иногда не очень люблю пользователей Windows. Спасибо за это!
  • 0
    Вопрос был про линукс !!
1

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

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

ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub
0

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

Идея такова:

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

  • добавить script:

    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
    
  • перезапустить Bash

Ещё вопросы

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