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?
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?
vagrant plugin install vagrant-proxyconf
.
Réponses:
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"
config.env_proxy.*
est obsolète à partir de la version 2.0 et a été remplacé par config.proxy.*
.
config.proxy.https = "https://yourproxy:8080"
est-ce https
ou http
en deuxième ligne
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
export VAGRANT_HTTPS_PROXY=${https_proxy}
Dans les instructions Mac / Linux.
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
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!
vagrant reload
sera 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.
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.
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
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
plugin-source
pour 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
vagrant plugin install C:/folder1/folder2/vagrant-proxyconf-1.5.2.gem --plugin-clean-sources
la clé est --plugin-clean-sources
de ne pas essayer d'accéder aux rubygems
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.
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).)
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.