git push с использованием ssh-агента в bash, но не в графическом интерфейсе

Используя git для окон (git-scm.com) и скрипт, я могу заставить Bash перестать запрашивать парольную фразу, но я не могу удалить запрос парольной фразы из графического интерфейса git.

URL-адрес удаленного устройства использует ссылку ssh (см. Ниже), поэтому я уверен, что это не проблема. Но я не эксперт ни в git, ни в SSH..

[email protected]:repo

Ключи SSH (ED25519) были созданы с предоставленной парольной фразой, а открытый ключ был добавлен в учетную запись хостинга. Ключи SSH хранятся в обычном месте C:\Users\<user>\.ssh\id_ed25519. При нажатии Help->Show SSH Key в графическом интерфейсе отображается используемый ключ ssh. Агент ssh работает в фоновом режиме, и ключ ssh был добавлен к агенту ssh с помощью приведенной ниже настройки.

При настройке ssh-агента я использовал предоставленный код здесь (скопировано и вставлено ниже для справки), чтобы создать файл .bashrc по пути C:\Users\<user>. Кажется, все работает, как и ожидалось, в командной строке bash, но не в графическом интерфейсе Git.

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

Мне кажется, что графический интерфейс Git не использует ssh-агент при выполнении push, fetch или любой другой связанной удаленной функции. Есть ли шаг, который я пропустил при настройке ssh-агента, сценария .bashrc и/или графического интерфейса, чтобы завершить удаление запроса на ввод парольной фразы? или что-то еще происходит?

Любая помощь очень ценится, спасибо заранее


person Mr.Invisible    schedule 14.06.2019    source источник
comment
Какой графический интерфейс Git? Какую команду вы вводите, чтобы запустить этот Git GUI? Вы печатаете из сеанса bash?   -  person VonC    schedule 15.06.2019
comment
Использование git для окон (git-scm.com). Обычно я запускаю графический интерфейс из контекстного окна (щелкнув правой кнопкой мыши папку в проводнике Windows). Затем выполняйте типичное использование промежуточной подготовки, фиксации или отправки на протяжении всего рабочего процесса. А потом закрыть окно до следующего раза.   -  person Mr.Invisible    schedule 15.06.2019
comment
@VonC, это приносит хорошие результаты. Интересно отметить, что если git GUI запускается из bash с помощью команды git gui, git GUI перестает запрашивать парольную фразу ssh...   -  person Mr.Invisible    schedule 21.06.2019
comment
Да, из контекстного меню он может использовать учетную запись «Все пользователи» или «Система», которая не имеет папки ~/.ssh, как ваша собственная C:\Users\<user>.   -  person VonC    schedule 21.06.2019


Ответы (2)


.bashrc запускается при запуске Git Bash. Это влияет только на среду bash, но ничего не делает для Windows в целом. Когда вы запускаете графический интерфейс, ни одна из настроек в .bashrc не действует. Я использую интеграцию Git с IntelliJ на своем ноутбуке с Windows и до сих пор не понял, как использовать с ним свои ключи SSH. В настоящее время я открываю Git Bash, чтобы вытягивать, нажимать или делать что-то еще, что взаимодействует с пультом.

person Code-Apprentice    schedule 18.06.2019
comment
Хотя это наполовину ожидаемо и нормально (потому что я могу запустить скрипт bash при запуске/входе в систему), есть ли способ заставить git GUI распознавать запущенный в данный момент ssh-агент? Поскольку решение этого является основой моего вопроса. - person Mr.Invisible; 18.06.2019
comment
Есть ли способ заставить git GUI распознавать запущенный в данный момент ssh-агент? Я предполагаю, что вы имеете в виду ssh-агент, который вы запускаете в .bashrc при запуске Git Bash. Это правильно? Если да, то нет, этот ssh-агент является локальным для Git Bash. Вам нужно будет найти способ запустить ssh-агент во внешней среде, чтобы он был доступен для всех приложений, которые вы запускаете в Windows. - person Code-Apprentice; 18.06.2019
comment
А! Я не знал об этом. Из-за этого существует ли более простая альтернативная настройка, позволяющая заставить графический интерфейс git перестать запрашивать парольную фразу? я понимаю, что это новый вопрос, но есть смысл ответить на вопрос и обновить его, чтобы предоставить ссылку для других, которые тоже попали в это.. - person Mr.Invisible; 18.06.2019
comment
@Mr.Invisible Это то, что я пытался объяснить с самого начала. Я думаю, что формулировка в моем комментарии, вероятно, более ясна, чем в моем первоначальном ответе. Я не знаю никакого решения с головы. В основном я работаю в Linux и только изредка пишу код в Windows. - person Code-Apprentice; 18.06.2019

Просматривая руководство, я нашел здесь, это заставило меня искать вещи по-другому. В конечном итоге мне посоветовали использовать Putty и его ssh-агент для управления паролями.

В конце концов наткнулся на этот пост, в котором они говорят о том, как заставить git использовать ssh шпатлевки агент. Это просто сводилось к тому, что я поместил GIT_SSH в переменные среды, указывающие на plink.exe, найденные в папке установки шпатлевки.

При использовании этого метода возникает ошибка, в которой я не уверен, что это только моя машина/установка или это влияет на всех. Проблема была решена здесь в этот пост, открыв замазку и ssh на хосте, чтобы таким образом сгенерировать кеш. Поскольку об этом уже есть публикация, я воздержусь от дальнейших рассуждений о том, почему git не смог сделать этот шаг за меня.

Также обратите внимание на мой вопрос выше, я использовал скрипт .bashrc для автоматического запуска ключей в ssh-агент OpenSSH при открытии git bash. Из-за такого подхода к замазке этот скрипт и все соответствующие файлы были удалены. В этот краткий список удаленных файлов вошли agent.env, созданные сценарием, .bashrc, содержащие скрипт, а также .pash_profile, которые были созданы.

После этого и git bash, и git gui успешно использовали агент шпатлевки, и их можно использовать так, как мне нравится. Я даже могу запустить git gui из контекстного меню, и он распознает ключи ssh и больше не будет запрашивать кодовые фразы.

person Mr.Invisible    schedule 11.07.2019
comment
Я рад, что вы нашли решение. И спасибо, что написали. Надеюсь, это будет полезно для других в будущем. - person Code-Apprentice; 12.07.2019