git push использует ssh-agent в bash, но не в графическом интерфейсе - PullRequest
4 голосов
/ 14 июня 2019

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

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

git@gitlab.com:repo

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

Настройка ssh-agent. Я использовал предоставленный код здесь (скопировано и вставлено ниже для справки), чтобы создать файл .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-agent при выполнении push, fetch илилюбая другая связанная удаленная функция.Есть ли какой-то шаг, который я пропустил при настройке ssh-agent, .bashrc script и / или GUI, чтобы завершить удаление запроса пароля?или что-то еще происходит?

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

Ответы [ 2 ]

2 голосов
/ 11 июля 2019

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

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

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

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

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

2 голосов
/ 18 июня 2019

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

...