Ter o provisionamento do vagrant clonar um repositório,

5

Estou tentando criar um ambiente que, quando terminar de trazer a VM para cima, clona um repositório no diretório de compartilhamento. O problema é que a caixa não tem permissão SSH no repositório remoto.

Eu tenho um script simples:

#!/bin/bash
cd /vagrant
if [ ! -d "repo" ]; then
  git clone [email protected]:/my/repo.git
end

Eu recebo o erro:

Host key verification failed.

fatal: The remote end hung up unexpectedly

O que faz sentido, já que não há chaves em /home/vagrant/.ssh

Eu fiz um pouco de googling sem sucesso, eu tentei definir config.ssh.forward_agent = true que me permite clonar manualmente o repositório quando estou ssh'ed na máquina, mas não quando ele tenta executar em si. Eu também tentei especificar config.ssh.private_ssh_key = "~/.ssh/id_rsa" , mas então vagrant simplesmente não terminará de carregar (suponho que o aplicativo não pode ssh na caixa).

Então, minha pergunta é ... Preciso reconstruir minha caixa de base para incluir um conjunto de chaves e autorizar essas chaves com meu repositório remoto? Ou há uma solução mais fácil que estou perdendo?

nota: Eu olhei para Noções básicas de SSH em VMs de Vagrant que parecem semelhantes mas eu acho que isso é mais sobre como configurar um usuário diferente na caixa e a solução postada é muito mais manual do que eu gostaria.

    
por JaredMcAteer 23.03.2013 / 01:29

2 respostas

4

A solução temporária para mim era gerar um conjunto de chaves e colocá-las no mesmo diretório que o Vagrantfile ; depois, ao provisionar, copio as chaves para /root/.ssh/ . Houve um pequeno problema com isso e foi que eu também tive que gerar um arquivo known_hosts para que a VM aceitasse a conexão do servidor remoto. O arquivo known_hosts também reside no diretório /vagrant/.ssh/ e é copiado com as chaves e agora tudo está funcionando.

Eventualmente, quando não estou tentando enviar uma caixa de 1 GB para meu host de arquivos por Wi-Fi irregular, a solução real será incluir esses arquivos na caixa de fundo permanentemente.

    
por 24.03.2013 / 16:02
1

Há algumas informações sobre isso aqui: link - O resumo é que o encaminhamento de SSH funciona por meio de uma variável de ambiente que não é preservada por su . Soluções em vários níveis do Unix-fu são sugeridas; Eu fui com um barato e alegre:

su -c "export SSH_AUTH_SOCK=$SSH_AUTH_SOCK; CMD" -l vagrant

em que CMD é o comando que você deseja executar.

Isso me permite executar git clone como vagrant durante o provisionamento, para que eu possa clonar repos GitHub / Bitbucket usando a chave SSH pública do meu sistema host OS X sem que tudo acabe sendo de propriedade de root . E a única outra etapa necessária é pré-preencher ~/.ssh/known_hosts com todas as chaves necessárias (o que imagino que você já esteja fazendo).

(Ao contrário da situação em um sistema real (veja os comentários na resposta sugerindo isso - link ), não há necessidade para alterar as permissões de soquete, já que ele pertence a vagrant - algo que o mecanismo vagrant ssh manipula para você, eu suponho. Então, não acredito que haja problemas de segurança associados a isso.)

    
por 06.01.2016 / 22:17