El reenvío de SSH Ansible no parece funcionar con Vagrant
ssh-agent (6)
A partir de ansible 1.5 (devel aa2d6e47f0) última actualización 2014/03/24 14:23:18 (GMT +100) y Vagrant 1.5.1 esto ahora funciona.
La configuración de mi Vagabundo contiene lo siguiente:
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''}
También es una buena idea desactivar explícitamente el uso de sudo. Por ejemplo, cuando uso el módulo Ansible git, hago esto:
- name: checkout basho_bench repository
sudo: no
action: git [email protected]:basho/basho_bench.git dest=basho_bench
OK, pregunta extraña. Tengo reenvío SSH trabajando con Vagrant. Pero estoy tratando de hacerlo funcionar cuando utilizo Ansible como un proveedor de Vagrant.
Descubrí exactamente qué está ejecutando Ansible, y lo intenté desde la línea de comandos, por supuesto, falla allí también.
[/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).
Pero cuando solo ejecuto vagabundo ssh, el reenvío de agente funciona correctamente, y puedo pagar R / W mi proyecto github.
[/common/picsolve-ansible/u12.04%]vagrant ssh
vagrant@vagrant-ubuntu-precise-64:~$ /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.
vagrant@vagrant-ubuntu-precise-64:~$
¿Alguien tiene alguna idea de cómo está funcionando?
Actualizar:
Por medio de ps awux
, determiné el comando exacto que estaba ejecutando Vagrant.
Lo repliqué y git checkout funcionó.
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'' "
Aquí hay una solución:
Cree un archivo ansible.cfg
en el mismo directorio que su Vagrantfile con las siguientes líneas:
[ssh_connection]
ssh_args = -o ControlMaster=auto -o ControlPersist=60s -o ForwardAgent=yes
He descubierto que necesito hacer dos cosas por separado (en Ubuntu 12.04) para que funcione:
- el
-o ForwardAgent
cosa ForwardAgent que @Lorin menciona añadiendo
/etc/sudoers.d/01-make_SSH_AUTH_SOCK_AVAILABLE
con estos contenidos:Defaults env_keep += "SSH_AUTH_SOCK"
La diferencia clave parece ser la configuración UserKnownHostFile. Incluso con StrictHostKeyChecking desactivado, ssh desactiva silenciosamente ciertas funciones, incluido el reenvío de agente cuando hay una entrada en conflicto en el archivo de hosts conocido (estos conflictos son comunes para vagabundos ya que varias máquinas virtuales pueden tener la misma dirección en diferentes momentos). Funciona para mí si apunto UserKnownHostFile a / dev / null:
config.vm.provision "ansible" do |ansible|
ansible.playbook = "playbook.yml"
ansible.raw_ssh_args = [''-o UserKnownHostsFile=/dev/null'']
end
Luché con un problema muy similar durante unas horas. Vagrant 1.7.2 ansible 1.9.4
Mis síntomas:
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
Al hacer clic en SSH en el invitado, descubrí que mi ssh-agent se estaba reenviando como se esperaba:
vagrant@vagrant-ubuntu-trusty-64:~$ ssh -T [email protected]
Hi baxline! You''ve successfully authenticated, but GitHub does not provide shell access.
Sin embargo, desde la máquina host, no pude abrir la conexión:
$ ansible web -a "ssh-add -L"
vagrant1 | FAILED | rc=2 >>
Could not open a connection to your authentication agent.
Después de confirmar que mi archivo ansible.cfg estaba configurado, como @Lorin notó, y mi Vagrantfile config.ssh.forward_agent = true
, todavía me quedé corto.
La solución fue eliminar todas las líneas en el archivo ~ / .ssh / known_hosts de mi host que estaban asociadas con mi invitado. Para mí, fueron las líneas que comenzaron con:
[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
Tenga en cuenta que la tercera línea tiene una dirección IP divertida. No estoy seguro, pero creo que esa línea fue la culpable. Estas líneas se crean cuando destruyo y creo VMs vagabundos.
simplemente puede agregar esta línea a su Vagrantfile para habilitar el reenvío ssh:
config.ssh.forward_agent = true
Espero, esto ayudará. Gracias