2013-12-09 2 views
25

При развертывании приложения с шефом-поваром, у меня есть базовый код набор для клонирования из частного хранилища GitHub со следующим ресурсом:Git аутентификация в Chef

git '/mnt/application' do 
    repository '[email protected]:organization/repository' 

    reference 'master' 
    action :sync 

    user node.application.user 
    group node.application.user 
end 

Однако после сканирования документации для git ресурс, я не вижу, как вы поставляете ключевой файл для аутентификации. Я также смущен тем, как хранить этот ключ в пакете данных, поскольку файл содержит кучу новых строк. Есть идеи?

+0

Я подробно рабочий процесс [здесь] (http://stackoverflow.com/questions/23621251/how-do- i-authenticate-when-i-do-a-git-clone-with-chef/23736540 # 23736540) – zabumba

ответ

12

Мы используем аналогичную настройку для Mercurial, но она должна быть такой же с Git, я надеюсь.

Мы используем ключи ssh для аутентификации. Ключ хранится в зашифрованном каталоге данных (с заменой новых строк на «\ n»). Прежде всего этот закрытый ключ создается на узле из базы данных.

git_key = Chef::EncryptedDataBagItem.load("private_keys", "git_key") 
file "/some/path/id_rsa" do 
    content git_key['private'] 
end 

И затем использовать его при подключении к хранилищу мерзавца с помощью ssh_wrapper:

git "/opt/mysources/couch" do 
    repository "git://git.apache.org/couchdb.git" 
    reference "master" 
    action :sync 
    ssh_wrapper "ssh -i /some/path/id_rsa" #the path to our private key file 
end 
+0

Эй, Драко, это ново для меня, я читаю [doc] (http: //docs.opscode. com/chef/essentials_data_bags.html), но я немного борюсь. Это было бы большой помощью для новичка, подобного мне, если бы вы могли подробно описать (ложный фид), как вы храните ключ SSH в зашифрованном каталоге данных. Надеюсь, вы найдете для этого время. – zabumba

+0

'мешок данных ножа создать private_keys git_key --secret-file ~/.ssh/id_rsa' - это как вы это делаете? – zabumba

+1

'content git_key [: private]' не работал для меня, НО 'content git_key ['private']' сделал – zabumba

0

, если вы находитесь в магазине дистрибутива ключ SSH в <your home directory>/.ssh и добавить github.com к <your home directory>/.ssh/known_hosts

Вы можете добавить github.com в known_hosts, используя следующую команду:

ssh-keyscan -H github.com >> <your home directory>/.ssh/known_hosts

После этого вы можете клонировать репозиторий с помощью git ресурс повара

+0

Vineeth - я думаю, что они означают частные репозитории GitHub (и другие), которые используют SSH-ключ для аутентификации и не позволит вам клонировать без него. –

24
ssh_wrapper "ssh -i /some/path/id_rsa" 

В случае, если кто попадается это, прежде не работал для меня, я постоянно получаю ошибку:

error: cannot run ssh -i /some/path/id_rsa: No such file or directory 

Что указывает, что ssh_wrapper действительно устанавливает переменную среды GIT_SSH, и оказывается, что вы не можете предоставить параметры в переменной среды GIT_SSH (см. Git clone with custom SSH using GIT_SSH error).

Вместо этого вам нужно сначала записать свой сценарий в файл, а затем установить GIT_SSH.

Итак:

file "/some/path/git_wrapper.sh" do 
    owner "your_user" 
    mode "0755" 
    content "#!/bin/sh\nexec /usr/bin/ssh -i /some/path/id_rsa \"[email protected]\"" 
end 

И изменить часть мерзавец ресурсов для:

git "/opt/mysources/couch" do 
    repository "git://git.apache.org/couchdb.git" 
    reference "master" 
    action :sync 
    ssh_wrapper "/some/path/git_wrapper.sh" 
end 
+2

Это был мой опыт. Такая же проблема, такое же решение. –

+5

Также полезно добавить параметр '-o 'StrictHostKeyChecking = no" 'в ssh, чтобы пропустить проверку ключа хоста. – Poma

+0

это все еще не работает :( – stantonk

-1

Вы должны попробовать эту поваренную книгу https://github.com/poise/application_git. Он решает проблему, о которой вы говорили.

С этой поваренной книгой, вы можете использовать application_git ресурс, specifiyng закрытого ключа:

application_git '/srv/myapp' do 
    repository '[email protected]:organization/repository' 
    deploy_key '/some/path/id_rsa' 
end 
+2

Хотя эта ссылка может ответить на вопрос, лучше включить основные части ответа здесь и предоставить ссылку для справки. Ответы только для ссылок могут стать недействительными, если связанная страница изменится. - [Из обзора] (/ обзор/низкокачественный-сообщения/18008724) –

Смежные вопросы