Я использую 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
он запросит парольную фразу во второй команде, и это все. Каждое дополнительное действие, которое вам нужно будет выполнить (которое раньше требовало парольную фразу), не будет спрашивать у вас парольную фразу (см. пример на снимке экрана ниже):
решение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.