2014-01-06 7 views
23

OK, странный вопрос. У меня есть SSH-пересылка, работающая с Vagrant. Но я пытаюсь заставить его работать при использовании Ansible в качестве посредника для бродяг.Ansible SSH forwarding не работает с Vagrant

Я точно выяснил, что делает Ansible, и попробовал сам из командной строки, конечно же, он тоже терпит неудачу.

[/common/picsolve-ansible/u12.04%]ssh -o HostName=127.0.0.1 \ 
-o User=vagrant -o Port=2222 -o UserKnownHostsFile=/dev/null \ 
-o StrictHostKeyChecking=no -o PasswordAuthentication=no \ 
-o IdentityFile=/Users/bryanhunt/.vagrant.d/insecure_private_key \ 
-o IdentitiesOnly=yes -o LogLevel=FATAL \ 
-o ForwardAgent=yes "/bin/sh \ 
-c 'git clone [email protected]:bryan_picsolve/poc_docker.git /home/vagrant/poc_docker' " 
Permission denied (publickey,password). 

Но когда я просто запустить бродячую SSH экспедитор работает правильно, и я могу оформить R/W моего GitHub проекта.

[/common/picsolve-ansible/u12.04%]vagrant ssh 
[email protected]:~$ /bin/sh -c 'git clone [email protected]:bryan_picsolve/poc_docker.git /home/vagrant/poc_docker' 
Cloning into '/home/vagrant/poc_docker'... 
remote: Counting objects: 18, done. 
remote: Compressing objects: 100% (14/14), done. 
remote: Total 18 (delta 4), reused 0 (delta 0) 
Receiving objects: 100% (18/18), done. 
Resolving deltas: 100% (4/4), done. 
[email protected]:~$ 

У кого-нибудь есть идеи, как он работает?

Update:

С помощью ps awux я определил точную команду выполняется с помощью Vagrant.

Я воспроизвел его, и git checkout работал.

ssh [email protected] -p 2222 \ 
    -o Compression=yes \ 
    -o StrictHostKeyChecking=no \ 
    -o LogLevel=FATAL \ 
    -o StrictHostKeyChecking=no \ 
    -o UserKnownHostsFile=/dev/null \ 
    -o IdentitiesOnly=yes \ 
    -i /Users/bryanhunt/.vagrant.d/insecure_private_key \ 
    -o ForwardAgent=yes \ 
    -o LogLevel=DEBUG \ 
    "/bin/sh -c 'git clone [email protected]:bryan_picsolve/poc_docker.git /home/vagrant/poc_docker' " 
+0

Вы проверили связанные вопросы http://stackoverflow.com/questions/11955525/how-to-use-ssh-agent-forwarding-with-vagrant-ssh?rq=1 и http://stackoverflow.com/ вопросы/12923675/как в установке-бродяга-SSH-агент-экспедиторская? LQ = 1? – Vilsepi

+0

Я взглянул, но они напрямую не затронули мою проблему. Я узнал, что случилось. Я отправлю решение сейчас. –

ответ

20

По состоянию анзибль 1.5 (разви aa2d6e47f0) Последнее обновление 2014/03/24 14:23:18 (GMT + 100) и Vagrant 1.5.1 теперь это работает.

конфигурация Мои Vagrant содержит следующее:

config.vm.provision "ansible" do |ansible| 
    ansible.playbook = "../playbooks/basho_bench.yml" 
    ansible.sudo = true 
    ansible.host_key_checking = false 
    ansible.verbose = 'vvvv' 
    ansible.extra_vars = { ansible_ssh_user: 'vagrant', 
       ansible_connection: 'ssh', 
       ansible_ssh_args: '-o ForwardAgent=yes'} 

Это также хорошая идея, чтобы явно отключить использование SUDO. Например, при использовании модуля GIT анзибль, я делаю это:

- name: checkout basho_bench repository 
    sudo: no 
    action: git [email protected]:basho/basho_bench.git dest=basho_bench 
+0

По моему опыту, я считаю, что вы должны вручную указывать инвентарь, чтобы это работало. Это не сработало для меня, если я просто позволил бродяге сделать инвентарь. – btobolaski

+0

Нет, теперь он работает нормально. –

+0

Если вы уничтожите и заново создадите свой бродячий бокс, пересылка ssh-agent будет отключена без участия пользователя, если вы не передадите пустой файл известных хостов по запросу Бена Дарнелла: http://stackoverflow.com/a/23704069/459442 – eager

7

Вот обходной путь:

Создать ansible.cfg файл в том же каталоге, что Vagrantfile следующих строк:

[ssh_connection] 
ssh_args = -o ControlMaster=auto -o ControlPersist=60s -o ForwardAgent=yes 
+2

Это работает при использовании Ansible без Vagrant (я использую ту же конфигурацию), но не (если я правильно помню) при использовании его с Vagrant. ИМХО, хлопот, связанный с получением этой работы, является слабым местом в другом фантастическом инструменте. –

2

Я обнаружил, что мне нужно сделать две разных вещей (на Ubuntu 12.04), чтобы заставить его работать:

  • -o ForwardAgent тонкий г, что @Lorin упоминает
  • добавления /etc/sudoers.d/01-make_SSH_AUTH_SOCK_AVAILABLE с этим содержимым:

    Defaults env_keep += "SSH_AUTH_SOCK" 
    
+0

Я уверен, что пробовал оба. Я попробую еще раз в следующий уик-энд с последним Ansible, и оба ваши предложения, thx, bryan –

+1

@binarytemple_picsolve Остерегайтесь ControlMaster! Насколько я могу судить, это поддерживает ваше соединение SSH в течение 60 секунд, даже если Vagrant остановился. Поэтому, если вы внесете изменения, влияющие на работу ssh, оно не вступит в силу, если исходное соединение запущено. Я рекомендую удалить параметры ControlMaster и ControlPersist из файла ansible.cfg, по крайней мере, во время отладки. – offby1

+0

спасибо за головы! –

15

Основное различие, как представляется, настройка UserKnownHostFile. Даже если StrictHostKeyChecking отключен, ssh отключает некоторые функции, включая перенаправление агентов, когда есть конфликтная запись в файле известных хостов (эти конфликты являются общими для бродяг, поскольку несколько виртуальных машин могут иметь один и тот же адрес в разное время). Это работает для меня, если я указываю UserKnownHostFile в/Dev/нуль:

config.vm.provision "ansible" do |ansible| 
    ansible.playbook = "playbook.yml" 

    ansible.raw_ssh_args = ['-o UserKnownHostsFile=/dev/null'] 
end 
+2

Wow , сколько способов может этот материал сломаться, я работал над этим раньше, но снова сломался, последовали за вашим предложением, и это сработало. Этот материал очень необходим, но очень хрупкий, не помогающий хреном команды ssh, который использует действительно демонстрирует, что это возраст/крут. –

1

вы можете просто добавить эту строку в Vagrantfile, чтобы включить переадресацию SSH:

config.ssh.forward_agent = true 

Надежда, это поможет.Спасибо

1

Я боролся с очень похожей проблемой в течение нескольких часов. Бродячие 1.7.2 анзибль 1.9.4

Мои симптомы:

failed: [vagrant1] => {"cmd": "/usr/bin/git ls-remote '' -h refs/heads/HEAD", "failed": true, "rc": 128} 
stderr: Permission denied (publickey). 
fatal: Could not read from remote repository. 

Please make sure you have the correct access rights 
and the repository exists. 

msg: Permission denied (publickey). 
fatal: Could not read from remote repository. 

Please make sure you have the correct access rights 
and the repository exists. 

FATAL: all hosts have already failed -- aborting 

ssh'ing в гостевую, я обнаружил, что мой SSH-агент пересылки, как ожидалось:

[email protected]:~$ ssh -T [email protected] 
Hi baxline! You've successfully authenticated, but GitHub does not provide shell access. 

Однако с главной машины я не мог открыть соединение:

$ ansible web -a "ssh-add -L" 
vagrant1 | FAILED | rc=2 >> 
Could not open a connection to your authentication agent. 

После подтверждения того, что мой файл ansible.cfg был настроен, как отметил @Lorin, и мой набор Vagrantfile config.ssh.forward_agent = true, я до сих пор не понял.

Решение должно было удалить все строки в файле ~/.ssh/known_hosts моего хоста, которые были связаны с моим гостем. Для меня это были линии, которые начинались с:

[127.0.0.1]:2201 ssh-rsa 
[127.0.0.1]:2222 ssh-rsa 
[127.0.01]:2222 ssh-rsa 
[127.0.0.1]:2200 ssh-rsa 

Обратите внимание, что в третьей строке есть смешной адрес ip. Я не уверен, но я считаю, что линия была виновником. Эти строки создаются, когда я уничтожаю и создаю бродячие виртуальные машины.

Смежные вопросы