Подтвердить что ты не робот

Неспособная SSH-пересылка, похоже, не работает с Vagrant

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

Я точно выяснил, что делает 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 работа выполнена.

 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' "
4b9b3361

Ответ 1

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

Конфигурация My 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. Например, при использовании модуля Ansible git я делаю следующее:

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

Ответ 2

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

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

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

Ответ 3

Здесь обходной путь:

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

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

Ответ 4

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

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

    Defaults env_keep += "SSH_AUTH_SOCK"
    

Ответ 5

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

config.ssh.forward_agent = true

Примечание: не забудьте выполнить задачу с помощью become: false

Надеюсь, это поможет.

Ответ 6

Я боролся с очень похожей проблемой в течение нескольких часов. Бродяга 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-адрес. Я не уверен, но я считаю, что линия была виновником. Эти строки создаются, когда я уничтожаю и создаю бродячие виртуальные машины.