Как сделать так, чтобы git не запрашивал пароль для ключа SSH?

Как сделать так, чтобы git не запрашивал пароль для ключа SSH?

Я использую git bash и настраиваю ключ ssh с помощью ssh-keygen и каждый раз, когда я что-то делаю с репозиторием, git запрашивает у меня пароль для /c/Users/jankiewj/.ssh/id_rsa. Есть ли способ отключить этот пароль?

РЕДАКТИРОВАТЬ: Я отредактировал оригинальный заголовок (удали Windows), так как я только что использовал свежую установку Ubuntu на моем рабочем ноутбуке, и когда у ключа ssh есть парольная фраза, он всегда ее запрашивает, и решение для исправления этого то же самое. Это, вероятно, работает так же на MacOSX, который также является Unix и использует те же основные инструменты.

решение1

Вы можете запустить это в git bash, Windows WLS или bash на настоящем GNU/Linux.

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

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

добавление парольной фразы в git bash на Windows

решение2

Немного лучше ипостоянное решениеэто автоматический запуск ssh-agent при открытии git bash на windows. Вы можете скопировать/вставить нижеследующее в ваш .profile или .bashrc. Я предпочитаю поместить его на.профиль

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

Это решение было принятоиз этой статьи справки github

решение3

TDLR: Для пользователей Windows,

  • бегатьssh-add "C:\\Users\\<your user>/.ssh/id_rsa"
  • нетssh-add ~/.ssh/id_rsa

Например, я постоянно вижу это:

$ ssh-add ~/.ssh/id_rsa
Enter passphrase for /c/Users/User/.ssh/id_rsa: 
Identity added: /c/Users/User/.ssh/id_rsa (/c/Users/User/.ssh/id_rsa)

$ git pull
Enter passphrase for key 'C:\Users\User/.ssh/id_rsa': 

Обратите внимание на несоответствующие разделители путей: ssh-agent преобразует ~, используя разделители путей Unix, но git использует разделители путей Windows. Учитывая, что путь к файлу id_rsaиспользуется в качестве ключа, это объясняет, почему кэш отсутствует.

  • Другое отличие заключается в том, что C:/вместо/c/
  • Связанное замечание: Когда git запрашивает у вас парольную фразу, она не будет кэширована, поэтому вы можете вводить ее там бесконечно. Попробуйте передать фразу только ssh-add.
  • В Windows предполагается, что ~это «многозначный» параметр, поэтому лучше указать это явно.
  • ssh-addсмотрит на расположения по умолчанию, например ~/.ssh/id_rsa. В Windows предположим, что это неоднозначно. Явно передайте явно отформатированный путь вместо того, чтобы полагаться на пути по умолчанию:
    • ssh-add "C:\\Users\\<your user>/.ssh/id_rsa", т. е. в ответе @velval тоже.

решение4

Брелокэто программа для разумного выполнения этой работы.

Его следует запускать из .bashrc (или эквивалента), и он правильно настроит среду, не требуя никаких настроек, кроме того, какие ключи следует загрузить.

Вот что я использую:keychain --quiet key1.pem key2.pem

Он понимает, что оболочка — Zsh, и работал точно так же, когда я использовал Bash.

Связанный контент