Eu tenho um caso de uso em que ocasionalmente quero copiar um único arquivo da minha máquina host para o convidado do Vagrant.
Não quero fazer isso por meio de provisionadores tradicionais (Puppet / Chef), porque isso geralmente é único - só quero algo rápido para adicionar ao meu Vagrantfile.
Não quero compartilhar um diretório inteiro, possivelmente porque desejo substituir um arquivo existente sem colocar um diretório inteiro no convidado.
Também parece um pouco exagerado escrever um script de provisionamento de shell e lidar com possíveis escapes, quando tudo o que quero fazer é copiar um arquivo.
Então, qual é a maneira mais fácil de copiar um único arquivo do host para o convidado?
/vagrant
como mencionado aqui também pode ser uma boa opçãovagrant upload /path/to/my/file
...vagrant scp file.txt :~/.
Respostas:
Em vez de usar um provisionador de shell para copiar o arquivo, você também pode usar um provisionador de arquivos Vagrant .
fonte
/tmp
Como você pede a maneira mais fácil, sugiro usar o vagrant-scp . Ele adiciona um comando scp ao vagrant, para que você possa copiar arquivos para sua VM como faria normalmente com o scp.
Instalar via:
Use-o assim:
fonte
vagrant plugin
."vagrant scp /vagrant/www/koushik.php ubuntu/trusty64:/usr/share/nginx/html
, estou tentando copiar arquivos no diretório raiz do nginx. Diz:The machine with the name 'C' was not found configured for this Vagrant environment.
O diretório e tudo está bem.Na verdade, existe uma solução muito mais simples. Consulte https://gist.github.com/colindean/5213685/#comment-882885 :
fonte
config.vm.synced_folder ".", "/vagrant", disabled: false
e depoisvagrant reload
centos/7
caixa vagrant se você tentar fazer a operação reversa (caixa vagrant para a máquina local).Por padrão, a primeira instância vagrant usa a porta ssh como 2222 e seu endereço IP é 127.0.0.1 (pode ser necessário ajustar a porta com o host virtual real)
Portanto, você pode executar o comando abaixo para copiar seu arquivo local para uma instância vagrant. senha é igual ao nome de usuário que é
vagrant
.Você também pode copiar o arquivo de volta para o host local.
fonte
scp -P 2222 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no my-file.txt [email protected]:/tmp
~/.ssh/config
como padrão, o que eu fiz no meu ambiente: #StrictHostKeyChecking no
rsync
trabalhar neste caso em comparação comscp
, dada a descrição do rsync como um "substituto mais rápido e flexível para o rcp".Aqui está minha abordagem para o problema:
Etapa 1 - Encontre a chave privada, porta ssh e IP:
Etapa 2 - Transfira o arquivo usando a porta e a chave privada como parâmetros para scp:
Espero que ajude,
fonte
O que acabei fazendo foi manter o arquivo dentro do meu diretório vagrant (montado automaticamente como / vagrant /) e copiá-lo com um provisionador de shell:
fonte
install
por exemplo,install -D -m644 -C ...
src dest. em vez de cp, porque você pode fazer coisas como especificar permissões, propriedade, criar automaticamente diretórios principais, apenas copiar se o arquivo precisar ser atualizado, etc ... em vez de cp, o que é simples e adequado necessário fazer.Vagrantfile
lado de outros provedores. Você vai precisar para substituirpath_within_repo
eremote_file
com as coisas que fazem sentido, para a sua aplicação, é claro :)que colocará o arquivo local no diretório inicial do usuário vagante
https://www.vagrantup.com/docs/cli/upload.html
fonte
Se você não tiver os arquivos em seu diretório, poderá executar esse código em um arquivo de script na máquina Host.
Nesta configuração, você só precisa alterar
/File/To/Copy
para o arquivo ou arquivos que deseja copiar e, em seguida,/Where/To/Put/File
é o local na VM em que deseja que os arquivos sejam copiados.Se você criar esse arquivo e chamá-
copyToServer.sh
lo, poderá executar osh
comando para enviar esses arquivos por push.Como nota final, você não pode executar esse código como
provisioner
porque ele é executado no servidor Convidado, enquanto esse código é executado no Host.fonte
vagrant ssh-config
e colá-la em seu arquivo ~ / .ssh / config, para tornar isso ainda mais fácil no futuro. Ou seja, combinando isso com o CHF respostaOPTIONS=`vagrant ssh-config | tail -n +2 | awk -v ORS=' ' '{print "-o " $1 "=" $2}'`
omitir o uso dessa primeira linha de saída ssh-config.OPTIONS=`vagrant ssh-config | grep -v '^Host ' | awk -v ORS=' ' 'NF{print "-o " $1 "=" $2}'`
como documentado aqui: gist.github.com/geedew/11289350O Vagrant fornece uma maneira de executar um comando sobre ssh em vez de efetuar login, portanto, para host e convidado do Linux, você pode usar:
cat ~/file_on_host.txt | vagrant ssh -c 'cat - > ~/file_on_guest.txt'
vagrant ssh -c 'cat ~/file_on_guest.txt' > ~/file_on_host.txt
Não há necessidade de plugins ou recargas de convidados. Apenas certifique-se de fornecer o ID da caixa do vagrant ao 'vagrant ssh' se você não estiver no mesmo diretório que o arquivo Vagrant. Testado no Vagrant v1.8.1.
fonte
Você pode adicionar entrada em
~/.ssh/config
:e o simples
scp file vagrant:/path/
. Você pode encontrar o caminho para o arquivo de identidade usando ovagrant ssh-config
comandofonte
vagrant ssh-config
fornece uma configuração ainda mais completa e conveniente, que você pode colocar em ~ / .ssh / config. Mas obrigado novamente!Vá para o diretório em que você possui seu
Vagrantfile
Em seguida, edite seu
Vagrantfile
e adicione o seguinte:"." significa que o diretório em que você está atualmente na máquina host
"/ vagrant" refere-se a "/ home / vagrant" na máquina convidada (máquina Vagrant).
Copie os arquivos que você precisa enviar para a máquina convidada na pasta onde você possui o seu.
Vagrantfile
Em seguida, abra o Git Bash ecd
no diretório em que você possuiVagrantfile
e digite:onde XXXXXXX é o seu nome vm . Você pode obter seu nome de vm executando
fonte
se por algum motivo você não tiver permissão para usar
existe uma maneira alternativa:
Primeiro , vagueie o seu VagrantProject e depois escreva no terminal:
você terá informações sobre "HostName" e "Port" da sua máquina virtual.
Em alguns casos, você pode ter algumas máquinas virtuais em seu projeto. Portanto, basta encontrar sua máquina-mestre (em geral, esta VM possui a porta 2222) e não preste atenção às informações de outras máquinas.
escreva o comando para fazer a cópia:
Nesse íngreme, você terá que colocar uma senha vaga: por padrão, é "vaga"
depois disso, se você olhar para os arquivos em sua máquina virtual:
você terá o "arquivo.txt" no diretório da sua máquina virtual
fonte
O vagrant scp plugin funciona se você souber o nome da sua caixa vagrant. verifique o status global vagrante que fornecerá o nome da sua caixa e você poderá executar:
fonte
Tente isso .. ubuntu 14.04 vagrant Isso funcionou para mim.
fonte
Uma maneira alternativa de fazer isso sem instalar nada (
vagrant-scp
etc.) Observe que o nomedefault
precisa ser usado como está, poisvagrant ssh-config
emite isso.A função não seria necessária se
scp -F =(vagrant ssh-config) ...
tivesse funcionado através de shells. Mas como isso não é suportado pelo Bash, precisamos recorrer a essa solução alternativa.fonte
Se alguém quiser transferir arquivos do Windows host para vagrant, então esta solução funcionou para mim.
Você deve poder ver diretórios em sua máquina vagrant.
fonte
Melhor maneira de copiar o arquivo do local para o vagrant, Não há necessidade de escrever nenhum código ou qualquer coisa ou qualquer alteração na configuração. 1 - Abra o vagrant ( vagrant up ) 2 - abra o cygwin 3 - cygwin: vá para a pasta onde está o arquivo vagrant ou de onde você inicia o vagrant 4- ssh vagrant 5- agora ele funcionará como um sistema normal.
fonte