Могу ли я переопределить 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 $@
Основная идея заключается в том, что он стирает ключ в цепочке для ключей сразу же после его создания.