Ansible SSH forwarding, похоже, не работает с 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 git@bitbucket.org:bryan_picsolve/poc_docker.git /home/vagrant/poc_docker' "
Permission denied (publickey,password).
но когда я просто запускаю vagrant ssh, переадресация агента работает правильно, и я могу проверить R/W мой проект github.
[/common/picsolve-ansible/u12.04%]vagrant ssh
vagrant@vagrant-ubuntu-precise-64:~$ /bin/sh -c 'git clone git@bitbucket.org: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.
vagrant@vagrant-ubuntu-precise-64:~$
кто-нибудь знает, как это работает?
обновление:
С помощью ps awux
Я определил точную команду, выполняемую бродягой.
Я реплицировал его, и git checkout работал.
ssh vagrant@127.0.0.1 -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 git@bitbucket.org:bryan_picsolve/poc_docker.git /home/vagrant/poc_docker' "
6 ответов
по состоянию на ansible 1.5 (devel aa2d6e47f0) последнее обновление 2014/03/24 14:23:18 (GMT +100) и Vagrant 1.5.1 теперь это работает.
моя Бродячая конфигурация содержит следующее:
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 repo=git@github.com:basho/basho_bench.git dest=basho_bench
ключевое различие представляется установка UserKnownHostFile. Даже при выключенном StrictHostKeyChecking ssh спокойно отключает определенные функции, включая переадресацию агента, когда есть конфликтующая запись в известном файле hosts (эти конфликты являются общими для vagrant, поскольку несколько виртуальных машин могут иметь один и тот же адрес в разное время). Это работает для меня, если я укажу UserKnownHostFile на /dev / null:
config.vm.provision "ansible" do |ansible|
ansible.playbook = "playbook.yml"
ansible.raw_ssh_args = ['-o UserKnownHostsFile=/dev/null']
end
вот решение:
создать ansible.cfg
файл в том же каталоге, что и ваш Vagrantfile со следующими строками:
[ssh_connection]
ssh_args = -o ControlMaster=auto -o ControlPersist=60s -o ForwardAgent=yes
я обнаружил, что мне нужно сделать две отдельные вещи (на Ubuntu 12.04), чтобы заставить его работать:
- на
-o ForwardAgent
вещь ,которую @ Lorin упоминает -
добавлять
/etc/sudoers.d/01-make_SSH_AUTH_SOCK_AVAILABLE
С этим содержанием:Defaults env_keep += "SSH_AUTH_SOCK"
вы можете просто добавить эту строку в свой Vagrantfile, чтобы включить пересылку ssh:
config.ssh.forward_agent = true
надеюсь, это поможет. Спасибо
я боролся с очень похожей проблемой в течение нескольких часов. Залетный 1.7.2 ansible 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-агент пересылает, как ожидалось:
vagrant@vagrant-ubuntu-trusty-64:~$ ssh -T git@github.com
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.
после подтверждения этого моего ансибля.файл cfg был настроен, как отметил @Lorin, и мой Vagrantfile set 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-адрес. Я не уверен, но я считаю, что эта линия была виновницей. Эти линии создаются по мере того, как я разрушаю и создаю бродячие VMs.