Como usar o vagrant em um ambiente proxy?


92

A rede da minha empresa está usando proxy. Então, quando eu uso vagrant up, ele me mostrou um erro de permissão 401.

Como posso fazer algumas configurações para usar o vagrant?


1
você já pesquisou por isso?
Ghost Answer

Desculpe, não sabia vagrant plugin install vagrant-proxyconf. Agora eu sei .
ithelloworld

Mas depois que instalei e configurei meu URL de proxy para o arquivo de configuração, o resultado foi o mesmo.401
ithelloworld

Respostas:


103

Instale o proxyconf:

vagrant plugin install vagrant-proxyconf

Configure seu Vagrantfile:

config.proxy.http     = "http://yourproxy:8080"
config.proxy.https    = "http://yourproxy:8080"
config.proxy.no_proxy = "localhost,127.0.0.1"

4
config.env_proxy.*está obsoleto a partir da versão 2.0 e foi substituído por config.proxy.*.
Tomalak

config.proxy.https = "https://yourproxy:8080"é isso httpsou httpna segunda linha
eldos

2
pode ser ambos. Na minha empresa http e https passam pelo mesmo proxy que está em http
Alejandro Moreno

30
Ok, quando eu executo 'vagrant plugin install vagrant-proxyconf' ele atinge meu proxy?
Mark Broadhurst

9
Só uma coisa a dizer, se você estiver atrás de um proxy, não poderá instalar plug-ins.
user3426711

87

Se o seu proxy requer autenticação, é melhor definir a variável de ambiente ao invés de armazenar sua senha no Vagrantfile. Além disso, seu Vagrantfile pode ser usado facilmente por outras pessoas que não estejam atrás de um proxy.

Para Mac / Linux (em Bash)

export http_proxy="http://user:password@host:port"
export https_proxy="http://user:password@host:port"
vagrant plugin install vagrant-proxyconf

então

export VAGRANT_HTTP_PROXY=${http_proxy}
export VAGRANT_HTTPS_PROXY=${https_proxy}
export VAGRANT_NO_PROXY="127.0.0.1"
vagrant up

Para Windows, use definir em vez de exportar.

set http_proxy=http://user:password@host:port
set https_proxy=https://user:password@host:port
vagrant plugin install vagrant-proxyconf

então

set VAGRANT_HTTP_PROXY=%http_proxy%
set VAGRANT_HTTPS_PROXY=%https_proxy%
set VAGRANT_NO_PROXY="127.0.0.1"
vagrant up

1
Além disso, se você não quiser que ele permaneça em seu ambiente, você pode fazer VAGRANT_HTTP_PROXY = " usuário: senha @ host: porta " vagrant up (sem exportar ou definir) para aquela variável de ambiente em apenas um comando.
maccam912

4
Ótima solução, pois não requer colocar as configurações de proxy no Vagrantfile onde elas claramente não pertencem
emrass

7
Windows Powersehell v6.0: $ env: http_proxy = " usuário: senha @ host: porta " $ env: https_proxy = " usuário: senha @ host: porta " instalação do plugin vagrant vagrant-proxyconf
Xolani de

1
Para aqueles que usam o Windows Git Bash, use as instruções do Mac / Linux (em Bash). Por exemplo: export http_proxy = " usuário: senha @ host: porta "
Xolani de

1
Você esqueceu (?) De export VAGRANT_HTTPS_PROXY=${https_proxy}nas instruções do Mac / Linux.
Tom Hundt

53

Instalar o proxyconf resolverá isso, mas atrás de um proxy você não pode instalar um plugin simplesmente usando o comando vagrant plugin install, o Bundler irá gerar um erro.

defina seu proxy em seu ambiente se você estiver usando um sistema semelhante ao unix

export http_proxy=http://user:password@host:port

ou obtenha uma resposta mais detalhada aqui: Como usar o bundler atrás de um proxy?

depois de configurar o proxyconf


10
No windows eu fiz o que você sugere, mas usei "SET" ao invés de "export". Funcionou como esperado sem fazer alterações no Vagrantfile.
Daniel Watrous

28

Detecte automaticamente suas configurações de proxy e injete-as em todas as suas VMs vagrant

instale o plugin proxy

vagrant plugin install vagrant-proxyconf

adicione esta configuração ao seu usuário privado / VagrantFile (ela será executada para todos os seus projetos):

vi $HOME/.vagrant.d/Vagrantfile

Vagrant.configure("2") do |config|
  puts "proxyconf..."
  if Vagrant.has_plugin?("vagrant-proxyconf")
    puts "find proxyconf plugin !"
    if ENV["http_proxy"]
      puts "http_proxy: " + ENV["http_proxy"]
      config.proxy.http     = ENV["http_proxy"]
    end
    if ENV["https_proxy"]
      puts "https_proxy: " + ENV["https_proxy"]
      config.proxy.https    = ENV["https_proxy"]
    end
    if ENV["no_proxy"]
      config.proxy.no_proxy = ENV["no_proxy"]
    end
  end
end

agora sua VM!


1
Gosto dessa resposta porque ela reutiliza as variáveis ​​env HTTP_PROXY existentes que já declarei em meu sistema operacional host. Morte para cortar e colar !!
ripvlan

Parece um bom caminho a seguir. Que tal desativá-lo ao sair do proxy? Descobri que o plugin vagrant perfurou o linux convidado em vários lugares para fazer várias ferramentas / aplicativos diferentes funcionarem. Existe uma maneira simples de desativar? Isso também será pelo menos virado da bandeira da linha de comando e uma única vagrant reloadserá corrigida, e pode ser melhor para detectar configurações de proxy de entrada / saída automaticamente ao se conectar a novas redes e alertar o usuário ou fazer com que funcione perfeitamente. tmatilai.github.io/vagrant-proxyconf mencionou a desativação, mas não tenho certeza se aborda esses pontos.
arntg de

Não tenho certeza de entender, mas este trecho testa a existência do http_proxy env var para configurar o plug-in do proxy. Se você não usar * _proxy env, ele deve ser 'não ativado' (?)
quazardous

11

Em um host Windows

abrir um prompt CMD;

set HTTP_PROXY=http://proxy.yourcorp.com:80
set HTTPS_PROXY=https://proxy.yourcorp.com:443

Substitua o endereço e a porta nos snippets acima pelo que for apropriado para sua situação. O acima permanecerá definido até que você feche o prompt do CMD. Se funcionar para você, considere adicioná-los permanentemente às variáveis ​​de ambiente para que você não precise defini-los toda vez que abrir um novo prompt CMD.


9

No Windows , você deve definir uma variável para especificar as configurações de proxy, faça download do plug-in vagrant-proxyconf: (substitua {PROXY_SCHEME} (http: // ou https: //), {PROXY_IP} e {PROXY_PORT} pelos valores corretos)

set http_proxy={PROXY_SCHEME}{PROXY_IP}:{PROXY_PORT}
set https_proxy={PROXY_SCHEME}{PROXY_IP}:{PROXY_PORT}

Depois disso, você pode adicionar o plug-in para codificar suas configurações de proxy no arquivo vagrant

vagrant plugin install vagrant-proxyconf --plugin-source http://rubygems.org

e então você pode fornecer configurações config.proxy.xxx em seu Vagrantfile para ser independente das variáveis ​​de configuração de ambiente


Apenas um parâmetro adicional (rubygem de https para http) para evitar erros ao verificar os certificados SSL: vagrant plugin install vagrant-proxyconf --plugin-source http://rubygems.org src
boly38

esta é uma solução melhor que as anteriores, porque esta não precisa de mais nada. Outras soluções (instalar um plug-in) precisam definir primeiro o acesso gratuito à Internet para fazer isso.
Raul Luna

5

Você desejará instalar o plugin proxyconf, pois isso torna a configuração do proxy para as máquinas convidadas bastante simples no VagrantFile

config.proxy.http     = "http://proxy:8888"
config.proxy.https    = "http://proxy:8883"
config.proxy.no_proxy = "localhost,127.0.0.1"

No entanto, há algumas coisas que ainda podem dar errado. Em primeiro lugar, você provavelmente não pode instalar plug-ins vagrant quando está atrás do proxy. Se for esse o caso, você deve baixar a fonte, por exemplo, de rubygems.org e instalar a partir da fonte

$ vagrant plugin install vagrant-proxyconf --plugin-source file://fully/qualified/path/vagrant-proxyconf-1.x.0.gem

Se você resolver esse problema, você pode ter a sorte de estar atrás de um proxy NTLM, o que significa que se você estiver usando * nix em suas máquinas convidadas, você ainda tem um caminho a percorrer, porque a autenticação NTLM não é suportada nativamente. Existem muitas maneiras de resolver isso. Usei o CNTLM para resolver essa parte do quebra-cabeça. Ele atua como cola entre os protocolos de autorização padrão e NTLM

Para uma explicação completa, dê uma olhada nesta entrada do blog sobre como configurar o vagrant por trás de um proxy corporativo


Eu estaria interessado em saber por que isso foi rejeitado. Explica como resolver o problema e também como resolver outros possíveis problemas que você possa encontrar
Rune FS

não é basicamente a mesma resposta já fornecida várias vezes? além disso, ele não diz o que fazer para obter plug-ins vagrant se você estiver usando um proxy corporativo, apenas afirma que seria um problema e, em seguida, vincular em outro lugar.
eis

Parece que agora deveria ser vagrant plugin install file://fully/qualified/path/vagrant-proxyconf-1.x.0.gem. Fonte
Martin de

Ótima ideia para plugin-sourceinstalar de um GEM local, mas ainda não consegui fazer isso funcionar no Windows. Não tenho certeza se minha sintaxe está errada, tipo file://C:/path1/path2/vagrant-proxyconf-1.5.2.gem? Eu também tentei a abordagem que @Martin mencionou acima, isso também não funcionou, pois ainda está tentando entrar em contato com rubygems nesse caso
Adam Burley

2
Isso funcionou para mim: vagrant plugin install C:/folder1/folder2/vagrant-proxyconf-1.5.2.gem --plugin-clean-sourcesa chave é --plugin-clean-sourcesque faz com que ele não tente acessar rubygems
Adam Burley

2

A pergunta não menciona o provedor de VM, mas no meu caso, utilizo o Virtual Box no mesmo ambiente. Há uma opção na GUI do Virtual Box que precisei habilitar para que funcione. Está localizado nas preferências do app Virtual Box: Arquivo >> Preferências ... >> Proxy . Depois de configurar isso, pude trabalhar sem problemas. Espero que essa dica também possa ajudar vocês.


1

Se você realmente deseja que suas configurações de proxy e instalações de plug-in estejam em seu Vagrantfile, por exemplo, se você está fazendo um Vagrantfile apenas para seu ambiente corporativo e não pode ter usuários editando variáveis ​​de ambiente, esta foi a resposta para mim:

ENV['http_proxy']  = 'http://proxyhost:proxyport'
ENV['https_proxy'] = 'http://proxyhost:proxyport'

# Plugin installation procedure from http://stackoverflow.com/a/28801317
required_plugins = %w(vagrant-proxyconf)

plugins_to_install = required_plugins.select { |plugin| not Vagrant.has_plugin? plugin }
if not plugins_to_install.empty?
  puts "Installing plugins: #{plugins_to_install.join(' ')}"
  if system "vagrant plugin install #{plugins_to_install.join(' ')}"
    exec "vagrant #{ARGV.join(' ')}"
  else
    abort "Installation of one or more plugins has failed. Aborting."
  end
end

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.proxy.http     = "#{ENV['http_proxy']}"
  config.proxy.https    = "#{ENV['https_proxy']}"
  config.proxy.no_proxy = "localhost,127.0.0.1"
  # and so on

(Se não, apenas defina-as como variáveis ​​de ambiente como as outras respostas dizem e consulte-as em env nas diretivas config.proxy.http (s).)


1

Alguns caracteres especiais na senha criam problemas no proxy. Faça um escape ou evite caracteres especiais na senha.


1

No PowerShell, você pode definir as variáveis ​​de ambiente http_proxy e https_proxy assim:

$env:http_proxy="http://proxy:3128"
$env:https_proxy="http://proxy:3128"

0

No MS Windows isso funciona para nós:

set http_proxy=< proxy_url >
set https_proxy=< proxy_url >

E o equivalente para * nix:

export http_proxy=< proxy_url >
export https_proxy=< proxy_url >
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.