Как использовать переадресацию агента ssh с «vagrant ssh»?

107

Вместо того, чтобы создавать новую пару ключей SSH в бродячем ящике, я хотел бы повторно использовать пару ключей, которая у меня есть на моем хост-компьютере, с использованием пересылки агента . Я попытался установить config.ssh.forward_agent в TRUE в Vagrantfile, затем перезагрузил виртуальную машину и попытался использовать:

vagrant ssh -- -A

... но я все еще получаю запрос на ввод пароля, когда пытаюсь выполнить проверку git. Есть идеи, что мне не хватает?

Мэтт В.
источник
если у вас нет ключей ssh ​​должным образом, git не должен запрашивать пароль, но сообщит вам, что вы отказали в разрешениях. Я предполагаю, что вас просят ввести пароль, потому что вы клонируете с https вместо git@github.com (ssh). мои 2 цента.
alexserver

Ответы:

89

Я использую vagrant 2 на OS X Mountain Lion.

Vagrant.configure("2") do |config|
  config.ssh.private_key_path = "~/.ssh/id_rsa"
  config.ssh.forward_agent = true
end
  1. config.ssh.private_key_path ваш локальный закрытый ключ
  2. Ваш закрытый ключ должен быть доступен локальному ssh-агенту. Вы можете проверить с помощью ssh-add -L, если его нет в списке, добавьте его с помощьюssh-add ~/.ssh/id_rsa
  3. Не забудьте добавить свой открытый ключ ~/.ssh/authorized_keysна Vagrant VM. Вы можете скопировать и вставить или использовать такой инструмент, как ssh-copy-id
ЛуисСиньорелли
источник
8
Я заметил, что после настройки выше, я могу использовать «vagrant» пользователя для «git clone», но я не могу использовать «root» для «git clone». Вы знаете, в чем проблема? Спасибо
Нам Нгуен
7
config.ssh.private_key_path = "~/.ssh/id_rsa"заставляет Бродягу держаться Waiting for VM to boot.
apennebaker
14
Вам также необходимо сохранить ключ от бродячей вставкиconfig.ssh.private_key_path = [ '~/.vagrant.d/insecure_private_key', '~/.ssh/id_rsa' ]
Калин
3
В OS X я обнаружил, что добавлял закрытые ключи в цепочку ключей OS X с ssh-add -Kработающим (а также config.ssh.forward_agent = true). Смотрите этот ответ
Flimm
2
У меня та же ошибка, что и у @apennebaker. и выполнение шагов, которые предложил Калин, не помогло ... Что сработало для меня, так это добавление ключей в связку ключей из моей хост-ОС и отключение назначения config.ssh.private_key_path.
alexserver
80

Добавьте его в Vagrantfile

Vagrant::Config.run do |config|
   # stuff
   config.ssh.forward_agent = true
end

См. Документацию

EnabrenTane
источник
11
Убедитесь, что вы используете ssh-add на базовом хосте и ключ расшифрован.
EnabrenTane
1
Обратите внимание, что Windows не запускает автоматически ssh-agent, который необходимо запустить для пересылки ваших ssh-ключей. Следуйте этому руководству, чтобы настроить автозапуск ssh-agent в Windows.
nebffa 07
62
Этот ответ, наверное, не заслуживает такого количества голосов. OP четко заявляет, что они добавили config.ssh.forward_agentв свой файл конфигурации, так какую новую информацию предоставляет этот ответ? Даже по ссылке уже идет вопрос.
Trindaz
7
@Trindaz, ты прав. Я не могу объяснить, почему это один из моих самых популярных ответов. Тем не менее, похоже, это помогло как минимум 52 людям, так что я должен назвать это победой.
EnabrenTane
1
Этот ответ действительно не приносит никакой новой информации, но, с другой стороны, это все, что необходимо настроить для машины с Vagrant. По крайней мере, при условии, что у вас правильно настроена переадресация агента на подключающейся машине (т. Е. Пересылка работает для других, не бродячих машин).
techraf
20

В дополнение к добавлению config.ssh.forward_agent = true в бродячий файл убедитесь, что хост-компьютер настроен для пересылки агента. Github предоставляет для этого хорошее руководство . (Ознакомьтесь с разделом устранения неполадок).

ХипстерХобо
источник
7

У меня это работало с приведенными выше ответами на 1.4.3, но перестал работать на 1.5. Теперь мне нужно бежать, ssh-addчтобы полностью поработать с 1.5.

А пока я добавляю следующую строку в свой скрипт подготовки к работе. - name: Make sure ssk keys are passed to guest. local_action: command ssh-add

Я также создал суть своей настройки: https://gist.github.com/KyleJamesWalker/9538912

Кайл Джеймс Уокер
источник
Мне всегда приходилось использовать ssh-add с 1.4 и 1.5, иначе не было бы запущенного агента для перенаправления
iheggie
5

Если вы работаете в Windows, перенаправление SSH в Vagrant по умолчанию не работает должным образом (из-за ошибки в net-ssh). См. Этот конкретный отчет об ошибке Vagrant: https://github.com/mitchellh/vagrant/issues/1735

Однако есть обходной путь! Просто автоматически скопируйте свой локальный SSH-ключ на Vagrant VM с помощью простого сценария подготовки в вашем VagrantFile. Вот пример: https://github.com/mitchellh/vagrant/issues/1735#issuecomment-25640783

Тим Донохью
источник
2

Когда мы недавно опробовали vagrant-awsплагин с Vagrant 1.1.5, мы столкнулись с проблемой пересылки агента SSH. Оказалось, что Vagrant заставлял IdentitiesOnly=yesбез возможности изменить его на no. Это заставило Vagrant смотреть только на закрытый ключ, который мы указали Vagrantfileдля поставщика AWS.

Я написал о нашем опыте в блоге . В какой-то момент это может превратиться в запрос на перенос.

Бенджамин Оукс
источник
2
Есть ли способ автоматизировать копирование лежащего в основе открытого ключа на хост-машине в Vagrant VM при создании с помощью Vagrant up? Прямо сейчас мне нужно создать машину, вручную войти в систему, а затем добавить мой открытый ключ в /home/vagrant/.ssh/authorized_keys
Ной
1

Убедитесь, что виртуальная машина не запускает собственный агент SSH. У меня была эта строчка в моем~/.profile

eval `ssh-agent`

После его удаления сработала пересылка агента SSH.

Фабиан Шменглер
источник
0

Настоящая проблема заключается в том, что Vagrant использует 127.0.0.1:2222 в качестве перенаправления портов по умолчанию. Вы можете добавить один (не 2222, 2222 уже занят по умолчанию)

config.vm.network "forwarded_port", гость: 22, хост: 2333, host_ip: "0.0.0.0"

«0.0.0.0» - это способ получения запроса от внешнего соединения. тогда ssh -p 2333 vagrant@192.168.2.101 (изменить на свой собственный IP-адрес хоста, дуд) будет работать нормально. Поблагодари меня, просто зови меня Лэйфэн!

Leifeng
источник
0

В Windows проблема в том, что Vagrant не знает, как общаться с ssh-агентом git-bash. Однако он знает, как использовать Pageant PuTTY. Итак, пока Pageant запущен и загрузил ваш SSH-ключ, и пока вы установили config.ssh.forward_agent, это должно работать.

См. Этот комментарий для подробностей.

Если вы используете Pageant, то обходной путь обновления Vagrantfile для копирования ключей SSH в Windows больше не нужен.

Джош Келли
источник