Могу ли я переопределить git-credential-osxkeychain в OS X Yosemite?

Я пытаюсь использовать AWS CodeCommit для своих репозиториев. Для тех, кто не знает, CC требует специального помощника по учетным данным git для генерации пароля для запросов HTTPS, поскольку он зашифрован и основан на времени. Это нормально работает нормально.

Тем не менее, у меня есть одна проблема: git автоматически кэширует мои учетные данные, чувствительные ко времени, в цепочке для ключей, а это значит, что через 15 минут я получу только 403 ошибки от отправки или извлечения.

Я пытался следовать инструкциям здесь, но у меня нет osxkeychain настроен где угодно. Насколько я могу судить, это жестко закодировано в Apple git.

Вот пара следов от git показывая проблему:

Начальная выборка

MikeBook-Pro: сенсорик Майк $ GIT_TRACE=1 git fetch
13:43:19.583664 git.c:348 трассировка: встроенная: git 'fetch'
13:43:19.584764 run-command.c:347 трассировка: run_command: 'git-remote-https' 'origin' 'https://git-codecommit.us-east-1.amazonaws.com/v1/repos/sensei-cli'
13:43:20.024288 run-command.c:347       trace: run_command: 'git credential-osxkeychain get'
13:43:20.025203 run-command.c:195       trace: exec: '/bin/sh' '-c' 'git credential-osxkeychain get' 'git credential-osxkeychain get'
13:43:20.029429 git.c:557               trace: exec: 'git-credential-osxkeychain' 'get'

# Эта последняя команда ничего не возвращает, поскольку в Keychain ничего нет.
13:43:20.029928 run-command.c:347 трассировки: run_command: 'git-credential-osxkeychain' 'get'
13:43:21.016738 run-command.c:347 трассировки: run_command: 'aws --profile учетные данные кода по умолчанию по умолчанию -helper $@ get'

# Это возвращает правильные сгенерированные учетные данные 13:43:21.018020 run-command.c:195       trace: exec: '/bin/sh' '-c' 'aws --profile default codecommit credential-helper $@ get' 'aws --profile по умолчанию codecommit credential-helper $@ get'
13:43:21.985711 run-command.c:347       trace: run_command: 'git credential-osxkeychain store'

# Это хранит учетные данные в цепочке для ключей 13:43:21.986731 run-command.c:195       trace: exec: '/bin/sh' '-c' 'git credential-osxkeychain store' 'git credential-osxkeychain store'
13:43:21.991811 git.c:557               trace: exec: 'git-credential-osxkeychain' 'store'
13:43:21.992266 run-command.c:347       trace: run_command: 'git-credential-osxkeychain' 'store'13:43:22.017201 run-command.c:347       trace: run_command: 'aws --profile по умолчанию codecommit учетная запись-помощник $@ store'
13:43:22.017897 run-command.c:195       trace: exec: '/bin/sh' '-c' 'aws --profile default codecommit credential-helper $@ store' 'aws --profile default codecommit credential-helper $@ store'
13:43:22.302123 run-command.c:347       trace: run_command: 'rev-list' '--objects' '--stdin' '--not' '--all' '--quiet'
...

Последующая выборка

MikeBook-Pro: сенсей-майк $ GIT_TRACE = 1 выборка
13:53:51.224971 git.c:348 трассировка: встроенная: git 'fetch'
13:53:51.231140 run-command.c:347       trace: run_command: 'git-remote-https' 'origin' 'https://git-codecommit.us-east-1.amazonaws.com/v1/repos/sensei-cli"
13:53:53.855917 run-command.c:347       trace: run_command: 'git credential-osxkeychain get'
13:53:53.859291 run-command.c:195       trace: exec: '/bin/sh' '-c' 'git credential-osxkeychain get' 'git credential-osxkeychain get'
13:53:53.876895 git.c:557               trace: exec: 'git-credential-osxkeychain' 'get'

# Это возвращает учетные данные, поэтому он не пытается никаких помощников
13:53:53.877419 run-command.c:347       trace: run_command: 'git-credential-osxkeychain' 'get'
Неустранимый: невозможно получить доступ к "https://git-codecommit.us-east-1.amazonaws.com/v1/repos/sensei-cli/": запрошенный URL вернул ошибку: 403

git --version а также git config -l выход

MikeBook-Pro: сенсей-майк $ git - версия
git версия 2.4.9 (Apple Git-60)
MikeBook-Pro: сенсей-мейк $ git config -l
user.name= Майк Карон
user.email=myemail@domain.com
credential.helper=!aws --profile по умолчанию codecommit credential-helper $@
credential.usehttppath= верно
core.repositoryformatversion=0
core.filemode= верно
core.bare= ложь
core.logallrefupdates= верно
core.ignorecase= верно
core.precomposeunicode= верно
remote.origin.url=https://git-codecommit.us-east-1.amazonaws.com/v1/repos/sensei-cli
remote.origin.fetch=+ ссылки / главы /*: ссылки / пультов ДУ / происхождение /*
branch.master.remote= Происхождение
branch.master.merge= ссылки / головки / мастер

4 ответа

Решение

Да, он жестко запрограммирован osxkeychain в их реализации Apple-Git. Исходный код ссылается на радарную ошибку 12266645.

Я верю, что многие последующие ошибки радара возникли в результате этого ужасно ошибочного решения. Я рекомендую вам открыть один тоже!

Я только что взломал это с помощью:

git config --global credential.helper '!security delete-internet-password -l "git-codecommit.us-east-1.amazonaws.com"; aws codecommit credential-helper $@'

Надеюсь, поможет,

У меня та же проблема, и единственное исправление, которое я нашел, это продолжать удалять запись пароля цепочки для ключей, как это в терминале:

security delete-internet-password -l "git-codecommit.us-east-1.amazonaws.com"

Я добавил это к работе cron, выполняемой каждые пять минут.

Определенно не самое элегантное решение, но помогает мне подключиться. Надеюсь, это поможет как-то.

Это похоже на ответ Pablo E. Colazurdo, но я использую git credential-osxkeychain erase утилита, которая принимает данные от stdin так что вроде как долго. Таким образом, вспомогательная линия .gitconfig заканчивается следующим образом:

[credential]
    helper = !printf 'host=%s\nprotocol=https\n\n' 'git-codecommit.us-east-2.amazonaws.com' | git credential-osxkeychain erase && aws codecommit credential-helper $@

Основная идея заключается в том, что он стирает ключ в цепочке для ключей сразу же после его создания.

Другие вопросы по тегам