Использование cygwin ssh-agent запущен, но git все еще запрашивает пароль

Я использую cygwin в качестве терминала в Windows 7. Я нашел несколько предложений по запуску ssh-agent в cygwin, поэтому мне не нужно вводить пароль каждый раз, когда я запускаю git fetch/pull/push. Я добавил следующее в мой.bash_profile и перезапустил сеанс cygwin:

SSH_ENV="$HOME/.ssh/environment"

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

# Source SSH settings, if applicable

if [ -f "${SSH_ENV}" ]; then
    . "${SSH_ENV}" > /dev/null
    #ps ${SSH_AGENT_PID} doesn't work under cywgin
    ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
        start_agent;
    }
else
    start_agent;
fi

Похоже, что ssh-agent и ssh-add успешно запущены, но мне все еще предлагается ввести пароль.

Initialising new SSH agent...
succeeded
Enter passphrase for /cygdrive/c/Users/<username>/.ssh/id_rsa:
Identity added: /cygdrive/c/Users/<username>/.ssh/id_rsa (/cygdrive/c/Users/<username>/.ssh/id_rsa)

$ ssh-add -l
2048 <fingerprint> /cygdrive/c/Users/<username>/.ssh/id_rsa (RSA)

$ git fetch --all
Fetching origin
Enter passphrase for key '/c/Users/<username>/.ssh/id_rsa':

На самом деле я использую SSH, а не HTTPS для моего git-соединения (отредактированная личная информация):

$ git remote -v
origin  ssh://git@XXX/XXX.git (fetch)
origin  ssh://git@XXX/XXX.git (push)

Самая близкая проблема, которую я нашел для этой проблемы, является следующим вопросом:

ssh-agent не работает / избавьте меня от ввода парольной фразы для git

Однако я не переименовал свой ssh ​​в /git/bin.

Любые предложения о том, как диагностировать эту проблему? Спасибо!

2 ответа

Вот более простое решение, чем приведенное выше:

  1. Запустить службы (можно найти, введя Службы в поле поиска на панели задач)
  2. Отредактируйте настройки «Агента аутентификации OpenSSH».
  3. Установите тип запуска на автоматический и запустите службу
  4. Запустите Edit the System Environment Variables (введите Environment в поле поиска на панели задач).
  5. Добавьте переменную GIT_SSH со значением «C:\Windows\System32\OpenSSH\ssh.exe».

Теперь при добавлении ключа SSH вам не нужно будет продолжать вводить фразу-пароль в командной строке Windows или в оболочке Cygwin Bash.

Проблема все еще остается. Кажется, это связано с различными путями и еще не исправлено. Вы можете рассмотреть использование ожидаемого в качестве альтернативы ssh-agent для взаимодействия с git-логином.

В Linux это должно быть установлено так:

sudo apt-get update
sudo apt-get --assume-yes install expect

В Cygwin вы можете найти его под Tcl:

Вот простой шаг о том, как его использовать.

Создайте файл, давайте найдем его и назовем ~/.expect_push

#!/usr/bin/expect -f
spawn git push origin master
expect "Username for 'https://github.com':"
send "<username>\n";
expect "Password for 'https://<username>@github.com':"
send "<password>\n";
interact

Изменить выше <username> а также <password> на ваш логин со следующими примечаниями:

  • Измените содержимое точно в соответствии с вашим взаимодействием с git.
  • Если твой <password> содержать символ $ положить это как \$ в противном случае аутентификация не будет выполнена.
  • Например, если ваш пароль mypa$$word затем положить <password> как mypa\$\$word,

Создать другой файл ~/.git_push

#!/usr/bin/bash
git remote set-url origin git@github.com:<username>/<repo>.git
git add .
git commit -m "my test commit using expect"
expect ~/.ssh/.expect_push

Сделайте их исполняемыми и создайте символическую ссылку в /bin

$ chmod +x ~/.expect_push
$ chmod +x ~/.git_push
$ cd /bin
$ ln -s ~/.git_push push

Тогда ты можешь push на пульт без необходимости вводить имя пользователя и пароль или пароль

$ cd /path/to/your/git/folder
$ push
Другие вопросы по тегам