2015-11-03 3 views
1

Я пытаюсь использовать AWS CodeCommit для своих репозиториев. Для тех, кто этого не знает, CC требует специального помощника git credential для генерации пароля для HTTPS-запросов, поскольку он зашифрован и основан на времени. Это нормально работает нормально.Могу ли я переопределить git-credential-osxkeychain на OS X Yosemite?

Однако у меня есть одна отягчающая проблема: git, похоже, автоматически кэширует мои учетные данные, чувствительные к времени, в Keychain, а это значит, что через 15 минут я получаю 403 ошибки от нажатия или выборки.

Я пробовал следовать the instructions here, но у меня нет osxkeychain настроен где угодно. Насколько я могу судить, он жестко закодирован в Apple git.

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

Intial

MikeBook-Pro:sensei-cli mike$ GIT_TRACE=1 git fetch 
13:43:19.583664 git.c:348    trace: built-in: git 'fetch' 
13:43:19.584764 run-command.c:347  trace: 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' 

# This last command returns nothing, as nothing is in Keychain. 
13:43:20.029928 run-command.c:347  trace: run_command: 'git-credential-osxkeychain' 'get' 
13:43:21.016738 run-command.c:347  trace: run_command: 'aws --profile default codecommit credential-helper [email protected] get' 

# This returns the correct generated credentials 
13:43:21.018020 run-command.c:195  trace: exec: '/bin/sh' '-c' 'aws --profile default codecommit credential-helper [email protected] get' 'aws --profile default codecommit credential-helper [email protected] get' 
13:43:21.985711 run-command.c:347  trace: run_command: 'git credential-osxkeychain store' 

# This stores the credentials in Keychain 
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 default codecommit credential-helper [email protected] store' 
13:43:22.017897 run-command.c:195  trace: exec: '/bin/sh' '-c' 'aws --profile default codecommit credential-helper [email protected] store' 'aws --profile default codecommit credential-helper [email protected] store' 
13:43:22.302123 run-command.c:347  trace: run_command: 'rev-list' '--objects' '--stdin' '--not' '--all' '--quiet' 
...

После извлечения

MikeBook-Pro:sensei-cli mike$ GIT_TRACE=1 git fetch 
13:53:51.224971 git.c:348    trace: built-in: 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' 

# This DOES return credentials, so it doesn't try any helpers 
13:53:53.877419 run-command.c:347  trace: run_command: 'git-credential-osxkeychain' 'get' 
fatal: unable to access 'https://git-codecommit.us-east-1.amazonaws.com/v1/repos/sensei-cli/': The requested URL returned error: 403

git --version и git config -l выход

 
MikeBook-Pro:sensei-cli mike$ git --version 
git version 2.4.9 (Apple Git-60)
MikeBook-Pro:sensei-cli mike$ git config -l 
user.name=Mike Caron 
[email protected] 
credential.helper=!aws --profile default codecommit credential-helper [email protected] 
credential.usehttppath=true 
core.repositoryformatversion=0 
core.filemode=true 
core.bare=false 
core.logallrefupdates=true 
core.ignorecase=true 
core.precomposeunicode=true 
remote.origin.url=https://git-codecommit.us-east-1.amazonaws.com/v1/repos/sensei-cli 
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/* 
branch.master.remote=origin 
branch.master.merge=refs/heads/master

ответ

1

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

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

+0

(Надеюсь, у кого-то есть какое-то умное обходное решение. Я, конечно, не знаю.) –

+0

Вы знаете, как просмотреть эту ошибку? Я попытался перейти на https://bugreport.apple.com и найти его, но не смог его подтянуть. В любом случае, похоже, единственная резолюция может заключаться в установке другой сборки git :( –

+0

Я думаю, что вы можете видеть только радиолокационные ошибки, которые * вы * подали. Они не столько с прозрачностью. –

1

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

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

я добавил, что хроны работают каждые пять минут.

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

2

Я просто взломал ее с помощью:

git config --global credential.helper '!security delete-internet-password -l "git-codecommit.us-east-1.amazonaws.com"; aws codecommit credential-helper [email protected]' 

Надеется, что это помогает,

0

Это похоже на Pablo's ответ, но я использую 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 [email protected] 

Основная идея заключается в том, что она стирает ключ в связке ключей, как только он будет создан.