Сбой инициализации Vagrant shell и ansible с помощью bitbucket

#git #vagrant #bitbucket #ansible #ssh-agent

#git #vagrant #bitbucket #ansible #ssh-агент

Вопрос:

Я не могу заставить vagrant provisioning клонировать частные репозитории git из bitbucket. У меня vagrant 1.6.3.

 Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
    config.ssh.private_key_path = "~/.vagrant.d/insecure_private_key"
    config.ssh.forward_agent = true

    config.vm.define "abox" do |abox|
        abox.vm.box = "ubuntu/trusty32"
        abox.vm.hostname = "abox"
        abox.ssh.forward_agent = true

        abox.vm.network "private_network", ip: "192.168.50.4"
        abox.vm.network "forwarded_port", guest: 22, host: 2233
        abox.vm.network "forwarded_port", guest: 6340, host: 6340
        abox.vm.network "forwarded_port", guest: 8080, host: 6388

        abox.vm.provision :shell,
            :path => "provisioning/ssh_keys.sh", :privileged => false
        abox.vm.provision :shell,
            :path => "provisioning/setup_project.sh"
     end 
end
 

Где в ssh_keys у меня есть:

 function create_key() {
    ssh-add -L >> ~/.ssh/authorized_keys
    ssh-keyscan -t rsa 127.0.0.1 > ~/.ssh/known_hosts
}

create_key
 

Затем в setup_project я вызываю:

 su - vagrant -c "ssh-keyscan bitbucket.org >> /home/vagrant/.ssh/known_hosts amp;amp; 
                 ssh-keyscan github.com >> /home/vagrant/.ssh/known_hosts"

echo 'Clone bitbucket repo'
su - vagrant -c "cd /vagrant amp;amp; git clone git@bitbucket.org:someuser/some-project-that-i-have-access-to.git"
 

На выходе получается:

 Permission denied (publickey).
==> abox: fatal: Could not read from remote repository.
==> abox: 
==> abox: Please make sure you have the correct access rights

==> abox: and the repository exists.

Error: Error while executing git clone -q git@bitbucket.org:someuser/some-project-that-i-have-access-to.git localclone
 

Однако, когда я vagrant ssh вхожу в поле, а затем вызываю ту же команду git clone обычно — все работает. я также протестировал конфигурацию ansible, но проблема была точно такой же.

Что здесь не так?

Ответ №1:

Подготовка оболочки будет выполняться в контексте гостевой машины (см. Документы).

Поэтому вам просто нужно изменить, setup_project чтобы быть (вы также можете удалить использование ключа ssh-keygen перед клонированием, чтобы в итоге не получить дублирующиеся записи ~/.ssh/known_hosts ):

 ssh-keygen -R bitbucket.org
ssh-keyscan bitbucket.org >> /home/vagrant/.ssh/known_hosts
ssh-keygen -R github.com
ssh-keyscan github.com >> /home/vagrant/.ssh/known_hosts

echo 'Clone bitbucket repo'

cd /vagrant
git clone git@bitbucket.org:someuser/some-project-that-i-have-access-to.git
 

Комментарии:

1. Не могли бы вы объяснить это немного подробнее? Что я сделал, так это: 1. удалите su - vagrant -c "command" и оставьте только command 2. запустите setup_project with :privileged => false Теперь это работает. Я полагаю, что проблема здесь связана с тем фактом, что изначально я запускал setup_project от имени root и su пользователя vagrant .