Comment utiliser vagrant dans un environnement proxy?

92

Le réseau de mon entreprise utilise un proxy. Ainsi, lorsque j'utilise vagrant up, cela m'a montré une erreur d'autorisation 401.

Comment puis-je faire un réglage pour utiliser vagrant?

ithelloworld
la source
1
avez-vous googlé pour cela?
Réponse de Ghost
Désolé, je ne l'ai pas fait, maintenant je sais vagrant plugin install vagrant-proxyconf.
ithelloworld
Mais après avoir installé et réglé mon URL de proxy dans le fichier de configuration, le résultat était le même.401
ithelloworld

Réponses:

104

Installez proxyconf:

vagrant plugin install vagrant-proxyconf

Configurez votre Vagrantfile:

config.proxy.http     = "http://yourproxy:8080"
config.proxy.https    = "http://yourproxy:8080"
config.proxy.no_proxy = "localhost,127.0.0.1"
Alejandro Moreno
la source
4
config.env_proxy.*est obsolète à partir de la version 2.0 et a été remplacé par config.proxy.*.
Tomalak
config.proxy.https = "https://yourproxy:8080"est-ce httpsou httpen deuxième ligne
eldos
2
ça pourrait être les deux. Dans mon entreprise, http et https passent par le même proxy qui se trouve dans http
Alejandro Moreno
30
Ok, quand je lance 'vagrant plugin install vagrant-proxyconf', il frappe mon proxy?
Mark Broadhurst
9
Juste une chose à mentionner, si vous êtes derrière un proxy, vous ne pouvez pas installer de plugins.
user3426711
87

Si votre proxy nécessite une authentification, il est préférable de définir la variable d'environnement plutôt que de stocker votre mot de passe dans le Vagrantfile. De plus, votre Vagrantfile peut être utilisé facilement par d'autres personnes qui ne sont pas derrière un proxy.

Pour Mac / Linux (dans Bash)

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

puis

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

Pour Windows, utilisez set au lieu d'exporter.

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

puis

set VAGRANT_HTTP_PROXY=%http_proxy%
set VAGRANT_HTTPS_PROXY=%https_proxy%
set VAGRANT_NO_PROXY="127.0.0.1"
vagrant up
rjdkolb
la source
1
De plus, si vous ne voulez pas qu'il reste dans votre environnement, vous pouvez faire VAGRANT_HTTP_PROXY = " user: password @ host: port " vagrant up (sans l'exportation ou la définition) pour cette variable d'environnement sur une seule commande.
maccam912
4
Excellente solution car elle ne nécessite pas de mettre les paramètres de proxy dans le fichier Vagrant où ils n'appartiennent clairement pas
emrass
7
Windows Powersehell v6.0: $ env: http_proxy = " user: password @ host: port " $ env: https_proxy = " user: password @ host: port " vagrant plugin install vagrant-proxyconf
Xolani
1
Pour ceux qui utilisent Windows Git Bash, utilisez les instructions Mac / Linux (dans Bash) .eg: export http_proxy = " user: password @ host: port "
Xolani
1
Vous avez oublié (?) export VAGRANT_HTTPS_PROXY=${https_proxy}Dans les instructions Mac / Linux.
Tom Hundt le
53

L'installation de proxyconf résoudra ce problème, mais derrière un proxy, vous ne pouvez pas installer un plugin simplement en utilisant la commande vagrant plugin install, Bundler générera une erreur.

définissez votre proxy dans votre environnement si vous utilisez un système de type Unix

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

ou obtenez une réponse plus détaillée ici: Comment utiliser le bundler derrière un proxy?

après cette configuration de proxyconf

pingween
la source
10
Sur Windows, j'ai fait ce que vous suggérez, mais j'ai utilisé "SET" au lieu de "export". A fonctionné comme prévu sans apporter de modifications au Vagrantfile.
Daniel Watrous
28

Détectez automatiquement vos paramètres de proxy et injectez-les dans toutes vos VM vagabondes

installer le plugin proxy

vagrant plugin install vagrant-proxyconf

ajoutez cette configuration à votre VagrantFile privé / utilisateur (il sera exécuté pour tous vos projets):

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

maintenant votre VM!

quazardeux
la source
1
J'aime cette réponse car elle réutilise les variables d'environnement HTTP_PROXY existantes que j'ai déjà déclarées sur mon système d'exploitation hôte. Mort à couper-coller !!
ripvlan
Cela semble être un bon moyen d’avancer. Qu'en est-il de le désactiver lorsque vous sortez du proxy? Nous avons constaté que le plugin vagrant a poinçonné le linux invité à plusieurs endroits pour faire fonctionner divers outils / applications. Existe-t-il un moyen simple de désactiver? Cela sera également au moins inversé de l'indicateur de ligne de commande et un seul vagrant reloadsera corrigé, et il pourrait être préférable de détecter automatiquement les paramètres de proxy entrant / sortant lors de la connexion à de nouveaux réseaux, et d'alerter l'utilisateur ou de le faire fonctionner de manière transparente. tmatilai.github.io/vagrant-proxyconf a mentionné la désactivation, mais pas sûr que cela résout ces points.
arntg
Je ne suis pas sûr de comprendre mais cet extrait teste l'existence de la variable http_proxy env pour configurer le plugin proxy. Si vous n'utilisez pas * _proxy env, il devrait être `` non activé '' (?)
quazardous
11

Sur un hôte Windows

ouvrez une invite CMD;

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

Remplacez l'adresse et le port dans les extraits ci-dessus par ce qui convient à votre situation. Ce qui précède restera défini jusqu'à ce que vous fermiez l'invite CMD. Si cela fonctionne pour vous, pensez à les ajouter de manière permanente à vos variables d'environnement afin de ne pas avoir à les définir à chaque fois que vous ouvrez une nouvelle invite CMD.

collations
la source
9

Sous Windows , vous devez définir une variable pour spécifier les paramètres du proxy, téléchargez le plugin vagrant-proxyconf: (remplacez {PROXY_SCHEME} (http: // ou https: //), {PROXY_IP} et {PROXY_PORT} par les bonnes valeurs)

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

Après cela, vous pouvez ajouter le plugin pour coder en dur vos paramètres de proxy dans le fichier vagrant

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

puis vous pouvez fournir les paramètres config.proxy.xxx dans votre fichier Vagrant pour être indépendant des variables de paramètres d'environnement

l.cotonea
la source
Juste un paramètre supplémentaire (rubygem de https à http) pour éviter les erreurs lors de la vérification des certificats SSL: vagrant plugin install vagrant-proxyconf --plugin-source http://rubygems.org src
boly38
c'est une meilleure solution que les précédentes, car celle-ci n'a besoin de rien d'autre. Pour ce faire, d'autres solutions (installer un plugin) doivent d'abord définir un accès Internet gratuit.
Raul Luna
5

Vous voudrez installer le plugin proxyconf car cela rend la configuration du proxy pour les machines invitées assez simple dans le VagrantFile

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

Cependant, il y a pas mal de choses qui pourraient encore mal tourner. Premièrement, vous ne pouvez probablement pas installer de plugins vagrant derrière le proxy. Si tel est le cas, vous devez télécharger la source, par exemple sur rubygems.org et l'installer à partir des sources

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

Si vous résolvez ce problème, vous pourriez avoir la chance d'être derrière un proxy NTLM, ce qui signifie que si vous utilisez * nix sur vos machines invitées, vous avez encore du chemin à faire, car l'authentification NTLM n'est pas prise en charge en mode natif Il existe de nombreuses façons de résoudre cela. J'ai utilisé CNTLM pour résoudre cette partie du puzzle. Il sert de colle entre les protocoles d'autorisation standard et NTLM

Pour un aperçu complet, jetez un œil à cette entrée de blog sur la configuration du vagabond derrière un proxy d'entreprise

Rune FS
la source
J'aimerais savoir pourquoi ce vote a été rejeté. Il explique comment résoudre le problème et également comment résoudre les autres problèmes potentiels que vous pourriez rencontrer
Rune FS
n'est-ce pas à peu près la même réponse déjà fournie plusieurs fois? en outre, il ne dit pas quoi faire pour obtenir des plugins vagabonds si vous êtes un proxy d'entreprise, il indique simplement que ce serait un problème, puis établissez des liens ailleurs.
eis
On dirait que ça devrait l'être maintenant vagrant plugin install file://fully/qualified/path/vagrant-proxyconf-1.x.0.gem. Source
Martin
Excellente idée à utiliser plugin-sourcepour installer à partir d'un GEM local, mais je n'ai pas encore réussi à faire fonctionner cela sous Windows. Je ne sais pas si ma syntaxe est incorrecte, comme file://C:/path1/path2/vagrant-proxyconf-1.5.2.gem? J'ai également essayé l'approche mentionnée par @Martin ci-dessus, cela n'a pas non plus fonctionné car il essaie toujours de contacter rubygems dans ce cas
Adam Burley
2
Cela a fonctionné pour moi: vagrant plugin install C:/folder1/folder2/vagrant-proxyconf-1.5.2.gem --plugin-clean-sourcesla clé est --plugin-clean-sourcesde ne pas essayer d'accéder aux rubygems
Adam Burley
2

La question ne mentionne pas le VM Provider mais dans mon cas, j'utilise Virtual Box sous le même environnement. Il y a une option dans l'interface graphique de Virtual Box que je devais activer pour la faire fonctionner. Se trouve dans les préférences de l'application Virtual Box: Fichier >> Préférences ... >> Proxy . Une fois que j'ai configuré cela, j'ai pu travailler sans problèmes. J'espère que cette astuce pourra également vous aider.

James
la source
1

Si vous voulez réellement que vos configurations de proxy et installations de plugins soient dans votre Vagrantfile, par exemple si vous créez un Vagrantfile juste pour votre environnement d'entreprise et que vous ne pouvez pas laisser les utilisateurs éditer les variables d'environnement, c'était la réponse pour moi:

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

(Si vous ne le faites pas, définissez-les simplement comme des variables d'environnement comme le disent les autres réponses et faites-y référence à partir de env dans les directives config.proxy.http (s).)

eis
la source
1

Certains caractères spéciaux dans le mot de passe créent un problème dans le proxy. Soit les échapper, soit éviter d'avoir des caractères spéciaux dans le mot de passe.

ernitingoel
la source
1

Dans PowerShell, vous pouvez définir les variables d'environnement http_proxy et https_proxy comme suit :

$env:http_proxy="http://proxy:3128"
$env:https_proxy="http://proxy:3128"
kal3v
la source
0

Dans MS Windows, cela fonctionne pour nous:

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

Et l'équivalent pour * nix:

export http_proxy=< proxy_url >
export https_proxy=< proxy_url >
csoria
la source