Как использовать vagrant в прокси-среде?


сеть моей компании использует прокси. Поэтому, когда я использую vagrant up, Он показал мне ошибку 401 разрешение.

Как я могу сделать некоторые настройки для использования vagrant?

11   81   2013-11-09 09:09:35

11 ответов:

установить proxyconf:

vagrant plugin install vagrant-proxyconf

настройка Vagrantfile:

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

если ваш прокси требует аутентификации, лучше установить переменную окружения, а не хранить пароль в Vagrantfile. Также ваш Vagrantfile может быть использован другими легко, которые не находятся за прокси.

для Mac / Linux (в Bash)

export http_proxy="http://user:[email protected]:port"
export https_proxy="http://user:[email protected]:port"
vagrant plugin install vagrant-proxyconf

затем

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

для Windows используйте набор вместо экспорта.

set http_proxy=http://user:[email protected]:port
set https_proxy=%http_proxy%
vagrant plugin install vagrant-proxyconf

затем

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

установка proxyconf решит эту проблему, но за прокси вы не можете установить плагин просто с помощью команды vagrant plugin install, Bundler вызовет ошибку.

установите прокси-сервер в своей среде, если вы используете unix-подобную систему

export http_proxy=http://user:[email protected]:port

или получить более подробный ответ здесь: как использовать bundler за прокси?

после этого установите proxyconf

автоматическое определение настроек прокси-сервера и ввести их во всех ваших бродячих VM

установите плагин прокси

vagrant plugin install vagrant-proxyconf

добавьте этот conf к вам private / user VagrantFile (он будет выполнен для всех ваших проектов):

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

Теперь ваша виртуальная машина !

на хосте Windows

откройте командную строку;

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

замените адрес и порт в приведенных выше фрагментах на все, что подходит для вашей ситуации. Выше будет оставаться установленным, пока вы не закроете приглашение CMD. Если это работает для вас, подумайте о том, чтобы добавить их постоянно в переменные среды, чтобы вам не приходилось устанавливать их каждый раз, когда вы открываете новое приглашение CMD.

на windows, вы должны установить переменную для указания настроек прокси, скачать плагин vagrant-proxyconf: (замените {PROXY_SCHEME} (http:// или https://), {PROXY_IP} и {PROXY_PORT} правильными значениями)

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

после этого вы можете добавить плагин для жесткого кода настроек прокси в файле vagrant

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

и затем вы можете предоставить конфигурацию.полномочие.xxx настройки в вашем Vagrantfile должны быть независимыми от настроек среды переменные

вы хотите установить плагин proxyconf, так как это делает настройку прокси для гостевых машин довольно прямо вперед в VagrantFile

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

однако, есть довольно много вещей, которые все еще могут пойти не так. Во-первых, вы, вероятно, не можете установить бродячие Плагины, когда за прокси. Если это так, вы должны скачать источник, например, из rubygems.org и установить из источника

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

Если вы решите эту проблему, у вас может быть fortune of being behind an NTLM proxy, что означает, что если вы используете *nix на своих гостевых машинах, то у вас все еще есть какой-то путь, потому что аутентификация NTLM не поддерживается изначально Есть много способов решить эту проблему. Я использовал CNTLM для решения этой части головоломки. Он действует как клей между стандартными протоколами авторизации и NTLM

для полной прогулки, взгляните на эта запись в блоге об установлении залет за корпоративного прокси-сервера

в вопросе не упоминается поставщик виртуальной машины, но в моем случае я использую Virtual Box в той же среде. В графическом интерфейсе Virtual Box есть опция, которую мне нужно было включить, чтобы заставить ее работать. Находится в настройках приложения Virtual Box:Файл >> Настройки... > > Прокси. Как только я настроил это, я смог работать без проблем. Надеюсь, что этот совет также может помочь вам, ребята.

Если вы действительно хотите, чтобы ваши прокси-конфигурации и установки плагинов были в вашем Vagrantfile, например, если вы делаете Vagrantfile только для своей корпоративной среды и не можете иметь пользователей, редактирующих переменные среды, это был ответ для меня:

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

(Если вы этого не сделаете, просто установите их в качестве переменных среды, как говорят другие ответы, и обратитесь к ним из env в config.полномочие.директивы http(s).)

некоторые специальные символы в пароле создают проблему в прокси. Либо избежать их или избежать наличия специальных символов в пароле.

в MS Windows это работает для нас:

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

и эквивалент для *nix:

export http_proxy=< proxy_url >
export https_proxy=< proxy_url >