Ansible: SSH funciona, pero ansible arroja un error inalcanzable

Creado en 7 abr. 2016  ·  93Comentarios  ·  Fuente: ansible/ansible

TIPO DE PROBLEMA

  • Informe de error
VERSION ANSIBLE
ansible 2.0.0.2
  config file = 
  configured module search path = Default w/o overrides
CONFIGURACIÓN

Sin cambios

SO / MEDIO AMBIENTE

OS X El Capitan Versión 10.11.3

RESUMEN

Puedo conectarme a mi Rasberry Pi a través de ssh a través de un cable ethernet a través de "ssh [email protected] " pero la ejecución de Ansible con esta dirección IP como host falla.

He configurado con éxito esta Rasberry Pi con ansible a través de wifi (usando la dirección IP de wifi), pero ahora intento usar ansible a través de la conexión directa de ethernet, aparece el mensaje de error críptico:

`TASK [setup] *******************************************************************
fatal: [169.254.0.2]: UNREACHABLE! => {"changed": false, "msg": "ERROR! (25, 'Inappropriate ioctl for device')", "unreachable": true}`

Debido a que _puedo_ conectarme con éxito a este pi usando esa dirección IP a través de ssh desde la terminal, estoy planteando que esto es un error en Ansible.

PASOS PARA REPRODUCIR

Ejecuto este comando para ejecutar el rol

ansible-playbook ansible-pi/playbook.yml -i ansible-pi/hosts --ask-pass --sudo -c paramiko -vvvv

También lo intenté

ansible-playbook ansible-pi/playbook.yml -i ansible-pi/hosts --ask-pass --sudo -vvvv

que conducen al mismo error.

archivo hosts

[pis]
169.254.0.2

libro de jugadas


---

- name: Ansible Playbook for configuring brand new Raspberry Pi

  hosts: pis
  roles:
    - pi
  remote_user: pi
  sudo: yes

Supongo que el rol no es realmente importante porque ansible está fallando en el paso de conexión ssh.

RESULTADOS PREVISTOS

Espero que ansible se conecte a pi y ejecute el rol (lo hice con éxito al conectarme a través de una dirección IP a través de wifi)

RESULTADOS ACTUALES
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/getpass.py:83: GetPassWarning: Can not control echo on the terminal.
No config file found; using defaults
  passwd = fallback_getpass(prompt, stream)
Warning: Password input may be echoed.
SSH password: raspberry

[DEPRECATION WARNING]: Instead of sudo/sudo_user, use become/become_user and 
make sure become_method is 'sudo' (default). This feature will be removed in a 
future release. Deprecation warnings can be disabled by setting 
deprecation_warnings=False in ansible.cfg.
Loaded callback default of type stdout, v2.0
1 plays in ansible-pi/playbook.yml

PLAY [Ansible Playbook for configuring brand new Raspberry Pi] *****************

TASK [setup] *******************************************************************
<169.254.0.2> ESTABLISH CONNECTION FOR USER: pi on PORT 22 TO 169.254.0.2
CONNECTION: pid 2118 waiting for lock on 10
CONNECTION: pid 2118 acquired lock on 10
fatal: [169.254.0.2]: UNREACHABLE! => {"changed": false, "msg": "ERROR! (25, 'Inappropriate ioctl for device')", "unreachable": true}

PLAY RECAP *********************************************************************
169.254.0.2                : ok=0    changed=0    unreachable=1    failed=0   
affects_2.0 affects_2.1 affects_2.2 affects_2.3 affects_2.4 affects_2.5 bug pluginconnectiossh

Comentario más útil

Esto sucedió de repente cuando actualicé Ansible.

Para ejecutar con éxito tuve que:

ansible-playbook --limit grunndata playbook.yml -c paramiko -u deploy

Antes solo he corrido

ansible-playbook --limit grunndata playbook.yml

SSH normal con lo siguiente funciona sin problemas:

ssh deploy<strong i="13">@grunndata</strong>

Algo ha cambiado.

¿Qué información puedo proporcionar para ayudar a depurar esto?

Estoy ejecutando lo siguiente:

  • Ubuntu 16.04
  • Ansible 2.1.0.0 instalado a través de pip

Todos 93 comentarios

¡Hola!

Muchas gracias por su envío a Ansible. Sinceramente, significa mucho para nosotros.

Tenemos algunas preguntas que nos gustaría conocer antes de que podamos poner esta solicitud en cola. Si puede ayudar a responderlas, se lo agradeceríamos enormemente:

  • ¿Ha intentado desactivar la recopilación de datos para comprobar si hay errores más detallados en una tarea?
  • Con la recopilación de datos deshabilitada, ¿ha probado el módulo sin procesar?

Solo como un recordatorio rápido de las cosas, este es un proyecto muy ocupado. Tenemos más de 800 colaboradores y gestionamos la cola de forma eficaz
asignamos a las cosas una prioridad entre P1 (la más alta) y P5. ¡Nos gustaría agradecerle mucho por su tiempo!
Trabajaremos las cosas en orden de prioridad, así que solo quería que estuvieras al tanto de la cola y supieras que no nos hemos olvidado de ti.

Definitivamente veremos sus comentarios sobre este tema al leer este ticket, pero es posible que no podamos responder de inmediato. También es posible que desee unirse a una de nuestras dos listas de correo.
que son muy activos:

¡Gracias una vez más por esto y su interés en Ansible!

@mhfowler : pude evitar esto proporcionando ansible_password en mi inventario

ansible_password también me funcionó

[testServer]
192.168.33.10

[testServer:vars]
ansible_password=vagrant

Esto sucedió de repente cuando actualicé Ansible.

Para ejecutar con éxito tuve que:

ansible-playbook --limit grunndata playbook.yml -c paramiko -u deploy

Antes solo he corrido

ansible-playbook --limit grunndata playbook.yml

SSH normal con lo siguiente funciona sin problemas:

ssh deploy<strong i="13">@grunndata</strong>

Algo ha cambiado.

¿Qué información puedo proporcionar para ayudar a depurar esto?

Estoy ejecutando lo siguiente:

  • Ubuntu 16.04
  • Ansible 2.1.0.0 instalado a través de pip

+1

necesitaba agregar -c paramiko porque uno de los 5 hosts estaba fallando, y pude ingresar a todos ellos con éxito.

Para mí, tenía una entrada .ssh / config para que mi usuario coincidiera con el nombre de host remoto.

Host servername  
    User username

Podría SSH directamente al servidor con ssh servername

Sin embargo, con Ansible, necesitaba agregar el parámetro -u al comando de implementación:

ansible-playbook -vvvv -i poc book_deploy.yml --ask-vault-pass --ask-become-pass -u username

Después de eso, podría implementarse bien.

Un poco extraño que no usó el archivo .ssh / config como anteriormente, pero la solución funciona, gracias :)

¿Por qué esto? Estaba tan feliz haciendo ansible -m ping todo lo que necesito hacer -u usuario -c paramiko

@roolo También configuré 'ansible_password' y comenzó a funcionar para mí. ¿Para qué es esto? Puede configurarlo literalmente como desee y funcionará ahora.

El mismo problema con ansible 2.1.2.0 y la opción --ask-pass.
OS X 10.11.6

La solución de ohallors no ayudó.

Estoy lejos de mi computadora por algunas semanas. Pls me envía un mensaje sobre esto después
3 de noviembre si no respondo solo. Gracias

Mismo.

$ ansible --version

ansible 2.2.0 (devel 6666d13654) last updated 2016/09/22 10:43:16 (GMT -700)
  lib/ansible/modules/core: (detached HEAD 0f505378c3) last updated 2016/09/23 17:20:56 (GMT -700)
  lib/ansible/modules/extras: (detached HEAD 935a3ab2cb) last updated 2016/09/23 17:20:56 (GMT -700)

El uso de -c paramiko parece funcionar mejor, parece que -c smart está roto .

En caso de que ayude a alguien, resolví este problema en Ubuntu 16.04 reemplazando esta línea en mi archivo de hosts ...

web1 ansible_ssh_host=my_remote_user<strong i="6">@my_ip</strong>

con

web1 ansible_ssh_host=my_ip

y luego asegurándome de haber agregado

remote_user=my_remote_user

a mi ansible.cfg

Para mí fue simplemente porque había agregado "my_remote_user @" delante de mi dirección IP. Esto había funcionado antes de actualizar.

Tuve el mismo problema y hacer ping al host primero resolvió el problema de alguna manera.

ansible <host> -i <inventory-file> -m ping

UPD: Tengo que ejecutar el comando ping casi todas las veces antes de ejecutar el libro de jugadas. Como después de un par de minutos de inactividad, el libro de jugadas vuelve a fallar.

@ cue232s Le dice a Ansible qué contraseña usar para la conexión ssh.

http://docs.ansible.com/ansible/intro_inventory.html#list -of-behavioral-Inventory-parameters (parece que el parámetro ahora se llama _ansible_ssh_pass_)

Resolví un problema similar en Mac OS X con ansible 2.1.2.0 que puede ayudar. No estoy seguro de dónde más publicarlo. Podría enviar una SSH a la instancia, pero ejecutar mi libro de jugadas resultó en:

fatal: [ec2-1-2-3-4.us-west-2.compute.amazonaws.com]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh.", "unreachable": true}

Ninguna otra salida de error. Pero funcionó con -c paramiko adjunto.

Bajé a ansible 1.9.4 ( pip install ansible==1.9.4 ) y ahora, cuando lo ejecuto, aparece el error:

fatal: [ec2-1-2-3-4.us-west-2.compute.amazonaws.com] => SSH Error: unix_listener: "/Users/myname/.ansible/cp/ansible-ssh-ec2-1-2-3-4.us-west-2.compute.amazonaws.com-22-ubuntu.0o1S2DUmaWg7dLdF" too long for Unix domain socket

Así que actualicé de nuevo a 2.1.2.0 y agregué un archivo ansible.cfg al directorio de mi proyecto con este contenido:

[ssh_connection]
control_path=%(directory)s/%%h-%%r

Y la conexión funcionó.

Estoy experimentando el mismo problema que https://github.com/ansible/ansible/issues/15321#issuecomment -256346976

ansible-playbook no puede conectarse y no está creando el socket en ~/.ansible/cp . Si ejecuto ansible -m ping primero, se crea el socket y ansible-playbook correctamente si ejecuto en 60 segundos.

Curiosamente, si ejecuto ansible-playbook con la opción -vvv y luego copio el comando ssh exacto que se muestra y lo ejecuto, la conexión se realiza correctamente y ansible-playbook también lo hará.

Tengo el problema en ansible-2.1.2.0 instalado con Homebrew en macOS Sierra 10.12.1

La degradación a 2.1.1.0 elimina el problema para mí.

Tuve el mismo problema

  • ansible: 2.1.2.0
  • Fedora 24 como caja de administración
  • CentOS 7 como caja administrada

Lo resolví agregando la clave utilizada para la autenticación en ssh-agent. La clave que usé fue sin contraseña.

Tener el mismo problema. El intento estándar de OpenSSH falla pero paramiko funciona.

Ejecutando Ansible dentro de Vagrant / Virtualbox en Windows para aprovisionar VM remotas. Ambas máquinas que ejecutan Ubuntu 16.04. Ansible versión 2.1.2.0 El archivo de configuración de Ansible se encuentra en /ansible/ansible.cfg.

línea hosts:

raw1  ansible_host=xx.xx.xx.xx  ansible_port=22  ansible_user=root  ansible_ssh_pass=wer32dw

Esto falla:

ubuntu<strong i="12">@devbox</strong>:/ansible$ sudo ansible raw1 -vvvv -m ping
Using /ansible/ansible.cfg as config file
Loaded callback minimal of type stdout, v2.0
<xx.xx.xx.xx> ESTABLISH SSH CONNECTION FOR USER: root
<66.23.245.125> SSH: EXEC sshpass -d12 ssh -C -vvv -o ControlMaster=auto -o ControlPersist=60s -o Port=22 -o User=root -o ConnectTimeout=10 -o ControlPath=/home/ubuntu/.ansible/cp/ansible-ssh-%h-%p-%r 66.23.245.125 '/bin/sh -c '"'"'( umask 77 && mkdir -p "` echo $HOME/.ansible/tmp/ansible-tmp-1477987158.35-58855315932449 `" && echo ansible-tmp-1477987158.35-58855315932449="` echo $HOME/.ansible/tmp/ansible-tmp-1477987158.35-58855315932449 `" ) && sleep 0'"'"''
raw1 | UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh.",
    "unreachable": true
}

Esto funciona:

ubuntu<strong i="16">@tgpdevbox</strong>:/ansible$ sudo ansible raw1 -vvvv -m ping -c paramiko
Using /ansible/ansible.cfg as config file
Loaded callback minimal of type stdout, v2.0
<xx.xx.xx.xx> ESTABLISH CONNECTION FOR USER: root on PORT 22 TO xx.xx.xx.xx
<xx.xx.xx.xx> EXEC /bin/sh -c '( umask 77 && mkdir -p "` echo $HOME/.ansible/tmp/ansible-tmp-1477987431.74-236753198598806 `" && echo ansible-tmp-1477987431.74-236753198598806="` echo $HOME/.ansible/tmp/ansible-tmp-1477987431.74-236753198598806 `" ) && sleep 0'
<xx.xx.xx.xx> PUT /tmp/tmp7oXJF4 TO /root/.ansible/tmp/ansible-tmp-1477987431.74-236753198598806/ping
<xx.xx.xx.xx> EXEC /bin/sh -c 'chmod u+x /root/.ansible/tmp/ansible-tmp-1477987431.74-236753198598806/ /root/.ansible/tmp/ansible-tmp-1477987431.74-236753198598806/ping && sleep 0'
<xx.xx.xx.xx> EXEC /bin/sh -c 'LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 /usr/bin/python /root/.ansible/tmp/ansible-tmp-1477987431.74-236753198598806/ping; rm -rf "/root/.ansible/tmp/ansible-tmp-1477987431.74-236753198598806/" > /dev/null 2>&1 && sleep 0'
raw1 | SUCCESS => {
    "changed": false,
    "invocation": {
        "module_args": {
            "data": null
        },
        "module_name": "ping"
    },
    "ping": "pong"
}

## Solución: actualizado a Ansible 2.2.0.0 y ya no tengo que usar -c paramiko

¡Tuve este error, con el módulo cron , y la actualización a ansible 2.2.0.0 se solucionó para mí también!

puedo conectarme a mi host como root pero no puedo ejecutar mi ansible

[root<strong i="6">@workstation</strong> svc_deployer]# ansible puppet.home.io -m ping --become-user=root --ask-sudo-pass
SUDO password:
puppet.home.io | UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh.",
    "unreachable": true
}
[root<strong i="7">@workstation</strong> svc_deployer]# ssh puppet.home.io
[email protected]'s password:
Last login: Sun Nov 13 18:45:00 2016 from 192.168.56.160
[root<strong i="8">@puppet</strong> ~]#

intenté verboso

[root<strong i="12">@workstation</strong> svc_deployer]# sudo ansible puppet.home.io -m ping --become-user=root -c ssh -vvvv --become-method=sudo
Using /etc/ansible/ansible.cfg as config file
Loaded callback minimal of type stdout, v2.0
<puppet.home.io> ESTABLISH SSH CONNECTION FOR USER: None
<puppet.home.io> SSH: EXEC ssh -C -vvv -o ControlMaster=auto -o ControlPersist=60s -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o ControlPath=/root/.ansible/cp/ansible-ssh-%h-%p-%r puppet.home.io '/bin/sh -c '"'"'( umask 77 && mkdir -p "` echo $HOME/.ansible/tmp/ansible-tmp-1479092049.76-54149073209683 `" && echo ansible-tmp-1479092049.76-54149073209683="` echo $HOME/.ansible/tmp/ansible-tmp-1479092049.76-54149073209683 `" ) && sleep 0'"'"''
puppet.home.io | UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh.",
    "unreachable": true
}

encontré la solución, ejecuté el siguiente comando en mi host para arreglar el permiso de la carpeta de la clave ssh (Centos6.6)

[root<strong i="6">@puppet</strong> ~]# restorecon -R -v /root/.ssh
restorecon reset /root/.ssh context unconfined_u:object_r:admin_home_t:s0->unconfined_u:object_r:ssh_home_t:s0
restorecon reset /root/.ssh/authorized_keys context unconfined_u:object_r:admin_home_t:s0->unconfined_u:object_r:ssh_home_t:s0

y fue capaz de ejecutar la configuración

[root<strong i="10">@workstation</strong> ~]# ansible puppet -m setup
puppet.home.io | SUCCESS => {
    "ansible_facts": {
        "ansible_all_ipv4_addresses": [
            "192.168.56.170",
            "192.168.1.89"
        ],
        "ansible_all_ipv6_addresses": [
            "fe80::a00:27ff:fe6a:41b1",
            "2602:306:8b7f:37d0:a00:27ff:fea7:e797",
            "fe80::a00:27ff:fea7:e797"
        ],

probé un par de combinaciones de ansible_host nombres y descubrí que funciona con

foo.bar.com
XXX.XXX.XXX.XXX (ip addresses)

y que no funciona (sin especificar paramiko) con

foo-with-dashes.bar.com
foo.with.periods.AND.more.than.one.section.before.bar.com

Limitar los permisos de la clave ssh a 600 solucionó este problema.

Tener el mismo problema:
ansible 2.1.2.0
Ubuntu 14.04.5 x64

Error:

failed: [shshprod](item=shsh-api) => {"item": "shsh-api", "msg": "Failed to connect to the host via ssh.", "unreachable": true}

cuando intento hacer ansible-playbook -i Inventory.ini shsh.yml --key-file ssh / deploy
¿Es para permisos de clave ssh?

@ jimi-c ¿Por qué se ha vuelto a cerrar este problema?

Nuestro bot cerró automáticamente el problema debido a la falta de respuesta. Según varias de las respuestas anteriores, parece estar (al menos en algunos casos) relacionado con los permisos de las claves SSH (que siempre deberían ser 0600 para las claves privadas).

No parece ser un problema de permisos para mí, actualmente en ansible 2.1.2.0
Recupero el nombre DNS de la instancia ec2 que estoy intentando ansible. Vuelve con el formato: ec2 - # {dirección_ip} .ap-sureste-2.compute.amazonaws.com

Eso resulta en el error:

UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh.", "unreachable": true}

Sin embargo, si uso la dirección IP para el servidor, se ejecuta sin problemas ... Parece mucho más cercano al problema que @marcstreeter ha encontrado

bot_skip

Tengo experiencia en este caso, ejecutando ansible 2.0.2.0 con un host de destino que ejecuta CentOS.

En mi escenario, tengo hosts contienen detalles como ansible_host ansible_user y ansible_ssh_pass
Sin embargo, parece que el análisis de caracteres no parece admitir el "#" (es decir, el servidor 3 tiene una contraseña que contiene un "#" y esos 3 hosts han marcado el error).

Al ejecutar el libro de jugadas, me da un error:

PLAY [all] *********************************************************************

TASK [setup] *******************************************************************
<120.xxx.xxx.xxx> ESTABLISH CONNECTION FOR USER: root on PORT 22 TO 120.xxx.xxx.xxx
fatal: [sz-server]: UNREACHABLE! => {"changed": false, "msg": "Authentication failed.", "unreachable": true}

Lo extraño es que el error indica específicamente que la autenticación falló. pero hacer una sesión SSH, funciona.

Verificando el registro secure del servidor, muestra algo como:

<server> sshd[23642]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=<sz-server> user=root
<server> sshd[23642]: pam_succeed_if(sshd:auth): requirement "uid >= 1000" not met by user "root"
 <server> sshd[23642]: Failed password for root from <IP> port 61912 ssh2

Cambiar mi contraseña reemplazando "#" con un carácter especial diferente como "%" funciona.
Ahora, el libro de jugadas se ejecuta con éxito en todas las máquinas.

@ upbeta01 ese era un error antiguo, y pensé que lo habíamos solucionado hace un tiempo. Es posible que deba escapar del # para evitar que se considere el comienzo de un comentario

Gracias por info @ jimi-c, podría considerar actualizar mi ansible a la última versión estable. No estoy seguro de si 2.0.2.0 no han aplicado el parche para el error.

Estoy usando $ ansible --version 2.2.0.0, y el problema persiste ... con suerte encontré este hilo abierto ... tal vez podamos agregar una advertencia al usar Centos 7

Estoy usando ansible 2.2.0.0.

Este comando funciona porque no necesita permisos de sudo:

ansible -m command -a 'df -h' ca.o.prv

Pero este no:

ansible -s -m command -a 'fdisk -l' ca.o.prv
cas.o.prv | FAILED | rc=0 >>
MODULE FAILURE

Resuelto:
ansible all -s --ask-sudo-pass -m raw -a "fdisk -l"

@tyronzerafa y yo estamos viendo los mismos problemas que los anteriores. nuestro entorno es:

SO:
`` `$ cat / etc / redhat-release
Versión 6.8 de CentOS (final)

Ansible Version:
```$ ansible --version
ansible 2.2.0.0
  config file = /etc/ansible/ansible.cfg
  configured module search path = Default w/o overrides

Ping fallido:
`` `$ ansible tcfabrics -m ping
server3 | Inalcanzable! => {
"cambiado": falso,
"msg": "No se pudo conectar al host a través de ssh:",
"inalcanzable": verdadero
}
server1 | ÉXITO => {
"cambiado": falso,
"ping pong"
}
server2 | ÉXITO => {
"cambiado": falso,
"ping pong"
}

Successful ping:
```$ ansible tcfabrics -m ping -c paramiko
server3 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
server1 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
server2 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

los hosts son aleatorios y cualquier libro de jugadas o comando que activamos, usando paramiko funciona, sin embargo, usar el predeterminado (¿inteligente?) falla al azar (sin embargo, nunca resulta en un 100% de éxito).

Si este problema es diferente, no dude en hacérnoslo saber y abriremos un problema por separado.

ssh los inalcanzables, para ver qué está pasando.

Si no tiene un archivo de claves configurado para el servidor, use el indicador -k

ansible -i hosts servers -m ping -u root -k

Extraje el comando ssh completo ejecutado por ansible-playbook agregando "-vvvv" a su línea de comandos y lo ejecuté manualmente. Imprimió esto al final:

unix_listener: "/home/saurav/.ansible/cp/ansible-ssh-very-long-aws-ec2-hostname-deploy.XXYY" demasiado largo para el socket de dominio Unix

Reemplazar el nombre de host de EC2 con su IP en el archivo de hosts lo solucionó para mí.

Parece que ansible no está respetando ~/.ssh/config :

Host raspberrypi.local
StrictHostKeyChecking no

Entonces pude iniciar sesión a través del shell pero Ansible falló. Lo siguiente me lo arregló:

ssh-keygen -R raspberrypi.local

Finalmente conseguí que el mío funcionara, esto es con el usuario root, primera provisión, supongo. Gracias por todos los consejos, aunque esto es un poco extraño.

  • Anfitrión: Ubuntu 16.04.2 LTS
  • Servidor: Ubuntu 16.04.2 LTS
  • Versión de Ansible: Ansible 2.2.1.0
  • Paramiko con Python2.7 o Python3.5 funciona.

archivo: hosts

[test]
91.121.103.38 ansible_ssh_user=root

[test:vars]
ansible_password=MustBeTheRealPassword

mando

ansible-playbook -vvvv preciousbook.yml -c paramiko -u root --ask-become-pass

Me di cuenta de que el usuario de root puedo ejecutar sin el indicador -u root y sin configurar root<strong i="21">@ipaddr</strong> , rather just leave it the as the ipaddr` en los hosts.

ansible-playbook -vvvv php.yml -c paramiko --ask-become-pass - No lo he intentado como usuario no root o con claves SSH ya que no estoy usando Digital Ocean que lo hace conveniente cuando arranca una máquina.

@JREAM @PGUTH @roolo @ohallors @ringe @mhfowler @midolo @ upbeta01 (y otras personas que pueden reproducir esto).

¿Podría probar con la versión candidata a la versión 2.3 (http://releases.ansible.com/ansible/ansible-2.3.0.0-0.3.rc3.tar.gz)?

Y si aún falla, proporcione la configuración ansible.cfg, la salida -vvv y cualquier información que se pueda compartir sobre las configuraciones y versiones de ssh involucradas.

@alikins - Intenté probarlo. Recibo un error al ejecutar el comando ansible-playbook . Intento aislar la versión usando virtualenv . ¿Me he perdido algo?

┌─(ansible-2.3)[User][Eldies-MacBook-Pro][~/Private/work/infra/2.3/ansible-2.3.0.0/bin]
└─▪ ./ansible-playbook -l hz-monitor -vvvv
Traceback (most recent call last):
  File "./ansible-playbook", line 43, in <module>
    import ansible.constants as C
ImportError: No module named ansible.constants

Así es como se ve en la estructura de archivos.

┌─(ansible-2.3)[User][Eldies-MacBook-Pro][~/Private/work/infra/2.3/ansible-2.3.0.0/bin]
└─▪ ls
ansible            ansible-console    ansible-galaxy     ansible-pull       ansible.cfg        hosts
ansible-connection ansible-doc        ansible-playbook   ansible-vault      check_uptime.yml   roles

@ upbeta01 Genial, gracias por la prueba. Parece que el paquete de Python ansible no está en sys.path. (es decir, ~ / Private / work / infra / 2.3 / ansible-2.3.0.0 / lib / ansible debe estar en sys.path). No estoy seguro de cómo se configuró virtualenv, pero si es básicamente el tar.gz descomprimido, intente:

cd ~/Private/work/infra/2.3/ansible-2.3.0.0/
source hacking/env-setup

Eso agregará ~ / Private / work / infra / 2.3 / ansible-2.3.0.0 / lib / ansible a PYTHONPATH y establecerá ANSIBLE_HOME en ~ / Private / work / infra / 2.3 / ansible-2.3.0.0 que debería ponerlo en marcha.

Creo que una instalación pip del tarball en el virtualenv debería funcionar también, pero no lo he verificado.

Todavía tengo este problema, estoy dispuesto a probarlo si lo necesita.

Ubuntu 16.04 y ansible 2.0.0.2

xxxx<strong i="7">@xxxx</strong>:/etc/ansible# ansible-playbook provision.yml

PLAY ***************************************************************************

TASK [setup] *******************************************************************
fatal: [c999951727-cloudpro-689901068]: UNREACHABLE! => {"changed": false, "msg": "ERROR! Authentication failure.", "unreachable": true}

PLAY RECAP *********************************************************************
c999951727-cloudpro-689901068 : ok=0    changed=0    unreachable=1    failed=0

xxx<strong i="8">@xxxxx</strong>:/etc/ansible# ansible New -m ping
c999951727-cloudpro-689901068 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
root<strong i="9">@rundeck</strong>:/etc/ansible# ansible-playbook provision.yml

PLAY ***************************************************************************

TASK [setup] *******************************************************************
ok: [c999951727-cloudpro-689901068]

TASK [user : Create Ansible User] **********************************************
changed: [c999951727-cloudpro-689901068]

TASK [user : Add Ansible Authorized Key] ***************************************
changed: [c999951727-cloudpro-689901068]

TASK [user : Create Personal User] *********************************************
changed: [c999951727-cloudpro-689901068]

TASK [user : Add Personal Authorized Key] **************************************
changed: [c999951727-cloudpro-689901068]

PLAY RECAP *********************************************************************
c999951727-cloudpro-689901068 : ok=5    changed=4    unreachable=0    failed=0

Tengo el mismo problema

Asegúrese de tener python-simplejson ya que ni siquiera puede recopilar datos sin él. Agregar esto al comienzo de mis libros de jugadas ayuda.

  gather_facts: no
  pre_tasks:
    - name: 'install python2'
      raw: apt-get update; apt-get -y install python-simplejson
    - setup:
        filter=ansible_*
      tags: always

@shadycuz : para mí, esto se resolvió en Ubuntu 16.04 con esto agregado a ansible.cfg:

[ssh_connection] 
# for running on Ubuntu
control_path=%(directory)s/%%h-%%r

En una nota relacionada, esto lo resolvió cuando se ejecutaba en un host Mac:

[ssh_connection] 
# for running on OSX
control_path = %(directory)s/%%C

También tuve ese problema y descubrí que mi servidor sftp no se inició. reconfiguró el servidor sshd cambiando / etc / ssh / sshd_config y reinicie el servidor ssh. el problema se ha ido.

Ejecución de un host Mac, @ttrahan 's ansible.cfg solución no funcionó para mí. Tengo un libro de jugadas que se conecta a varias cajas, la mayoría de las cuales ejecutan Ubuntu 14.04 o 12.04. Todas las cajas de Ubuntu funcionan sin problemas. Sin embargo, las dos cajas que ejecutan CentOS no se conectan con el siguiente error:

fatal: [<a-centos-host>]: UNREACHABLE! => {"changed": false, "msg": "Failed to open session: [Errno 54] Connection reset by peer", "unreachable": true}

@alikins , no estoy seguro de si el env-setup que mencionas es var o si realmente pertenece a un archivo.

Esto es lo que veo dentro del directorio hacking

┌─[User][Eldies-MacBook-Pro][~/Private/work/infra/2.3/ansible-2.3.0.0]
└─▪ source hacking/
dump_playbook_attributes.py  module_formatter.py          templates/   

¿Debo volver a descargar el archivo tar, teniendo en cuenta que contiene nuevos archivos?

Hola, ¿alguien puede ayudarme? No puedo hacer ping al enrutador cisco desde mi VM (CentOS 7.)

[root<strong i="6">@centos7</strong> ansible]# ansible ios -m ping 
<IP_address> | UNREACHABLE! => {
    "changed": false,
    "msg": "Authentication failed.",
    "unreachable": true
}

Aquí está el fragmento del archivo ansible.cfg:

transport  = paramiko
host_key_checking = False
# SSH timeout
timeout = 20

archivo hosts:

[ios]
10.10.15.233 ansible_ssh_user=local ansible_ssh_pass=password

json [root<strong i="15">@centos7</strong> ansible]# ansible --version ansible 2.2.1.0 config file = /etc/ansible/ansible.cfg configured module search path = Default w/o overrides

Hola,

Tuve el mismo 'error inalcanzable' con ansible 2.3.0.0 ejecutándose en Ubuntu 16.04.
-C paramiko añadido

Ejemplo: $ ansible-playbook -i Inventory ./router/tasks/get-vlan.yml -c paramiko)

Pero luego recibí un mensaje de error completamente diferente: no hay métodos de autenticación disponibles,

Ese nuevo error se resolvió al agregar 'conexión: local' al YAML y continuó funcionando incluso después de eliminar -c paramiko, resolviendo así ambos problemas.

  • la referencia para corregir está aquí: [https://github.com/ansible/ansible/issues/16017]
$ ansible-playbook -i inventory ./router/tasks/get-vlan.yml
`---
- name: Check for VLAN 123 from Cisco IOS Routers
  hosts: routers
  connection: local

  vars_prompt:
      - name: "username"
        prompt: "Username"
        private: no
      - name: "password"
        prompt: "Password"

  tasks:
    - ios_command:
        username: "{{ username }}"
        password: "{{ password }}"`
        commands: "show ip int bri | inc vlan 123"

@ dave-morrow Gracias por su respuesta.
Después de leer muchos documentos, descubrí hace dos días que la solución está usando 'conexión = local'.
Pero me pregunto por qué la línea de comandos de IOS no califica como shell para ansible. ¿Por qué necesitamos ejecutar los comandos en los hosts ansible? ¿Alguna idea, por favor?

@ b2sweety Es una buena pregunta para la que no sé la respuesta.

Lo siento, pero Ansible es muy nuevo para mí, de hecho llevo jugando con él poco más de un día.
Sé que la CLI de Cisco (IOS) no se parece en nada a la CLI de UNIX (POSIX), así que quizás eso tenga algo que ver con eso.

Dejaré que otros mejor calificados respondan a esta pregunta.

Hola equipo de Ansible,
He configurado Ansible en máquinas Rhel 7x. Tomé ejemplos como 2 máquinas. 1 - Servidor de control y nodo 1. Copié las claves SSH y pude iniciar sesión sin contraseña entre sí con éxito.
al intentar verificar "ping: a través de ansible, obteniendo un error para la dirección IP del servidor de control local / localhost en el archivo Invertory.

  • Ping exitoso en el nodo remoto pero inalcanzable en Localhost
[ansible@ip-172-31-27-41 .ssh]$ ansible test -m ping
172.31.27.41 | UNREACHABLE! => {
    "changed": false, 
    "msg": "Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).\r\n", 
    "unreachable": true
}

Ese es el error, por favor proporcione una solución. Mi correo: "nlkalyan. [email protected] "

Lo que me solucionó fue deshabilitar paramiko estableciendo ansible_connection=ssh .

Error:

UNREACHABLE! => {
    "changed": false,
    "msg": "('Bad authentication type', [u'publickey']) (allowed_types=[u'publickey'])",
    "unreachable": true
}

Reparar:

# Hosts File
[host_name]
XX.XXX.XXX.XXX   ansible_user=username ansible_connection=ssh

ejecutar comando:

ansible-playbook -i inventory_file playbook.yml

Entorno del anfitrión:

  • ansible 2.2.1.0
  • OSX El Capitan 10.11.6

@Vcoleman , Gracias por la ayuda ..
Hice el paso que me diste, sigue siendo el mismo error ...
Comando ping

$ ansible test -m ping

El error que se muestra en el mío era algo diferente al tuyo .---->
"" msg ":" Error al conectarse al host a través de ssh: Permiso denegado (clave pública, gssapi-keyex, gssapi-with-mic) .rn ""
Cambié mi archivo de hosts como se muestra a continuación.

mi archivo de host entra ::

[test]
172.31.27.41 ansible_user=ansible  ansible_connection=ssh
#172.31.22.200
172.31.21.47

en el 172.31.27.41 anterior es mi servidor local (servidor de control)
otra vez tuve el mismo problema ..

@pavaniandkalyan ¿Está seguro de que el usuario que tiene la clave SSH correcta en RPi es el usuario ansible ?

Estoy seguro de que he copiado todas las claves del servidor de control a todos los nodos y viceversa como usuario ansible.
¿Es necesario instalar / actualizar / hacer ping en el servidor de control? Me refiero a que la intracción del servidor de control debe ser necesaria durante la automatización con Ansbile. ¿O solo empujar los nodos es suficiente?

No parece correcto que necesite agregar -c paramiko:

ansible -i inventory/ec2.py us-west-2 -u ec2-user -m ping -c paramiko
x.x.217.210 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}



ansible -i inventory/ec2.py us-west-2 -u ec2-user -m ping                       
x.x.217.210 | UNREACHABLE! => {
    "changed": false, 
    "msg": "SSH Error: data could not be sent to remote host \"x.x.217.210\". Make sure this host can be reached over ssh", 
    "unreachable": true
}

msg: SSH Error: data could not be sent to remote host "x.x.217.210". Make sure this host can be reached over ssh

Estaba teniendo el mismo problema:

$ ansible local -m ping
127.0.0.1 | UNREACHABLE! => {
    "changed": false, 
    "msg": "Failed to connect to the host via ssh: Permission denied (publickey,password).\r\n", 
    "unreachable": true
}

Resolvió el problema instalando sshpass usando el comando:

sudo apt-get install sshpass

Después de instalar sshpass, ejecuté este comando:

ansible local -m ping --ask-pass
SSH password: 
127.0.0.1 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

¡¡¡Espero que esto ayude!!!

utilice paramiko como solución.

ansible-playbook abc.yml -i development -c paramiko

o agregar a la configuración ansible

[defaults]
transport = paramiko

Tuve el mismo problema:

Mi resolución 👍 *
ansible -c local -i all_servers all_servers -m ping

-c local funcionó para mí, configuré transport = local y luego no necesité dar la opción -c en las ejecuciones. Creo que -c local respeta la configuración del archivo .ssh/config . si no se da, necesita definir todas las configuraciones en ansible.cfg archivo. esa es mi suposición.

La cita anterior que escribí ayer, pensando que el problema se resolvió. LOS AJUSTES ANTERIORES QUE MENCIONÉ NO SON LA RESPUESTA CORRECTA

Esto es lo que resolvió el problema

Por lo que veo. La forma en que ansible está funcionando es bastante correcta. Toma en consideración que puede enviar su archivo ansible.cfg con su código. Entonces, las versiones anteriores realmente funcionaban con sus archivos .ssh/config . Pero las nuevas versiones no lo hacen.

Entonces, las nuevas versiones de ansible le permiten configurar los ajustes de ssh en el bloque [ssh_connection]. donde puede poner todos los requisitos para ssh. Eso significa que no necesitaría el archivo .ssh / config si es el servidor de control y su archivo de inventario puede tener registros de IP o dns. Pero como la mayoría de nosotros estamos acostumbrados a que ansible honre, nuestro .ssh/config tuvo este problema. Para esto tienes que decirle explícitamente a Ansible la ubicación del ssh config file . Como abajo

ssh_args = -F /Users/vinitk/.ssh/config -o ControlMaster=auto -o ControlPersist=30m
 15 control_path = ~/.ssh/controlmasters/%%r@%%h:%%p

La configuración ControlMaster and ControlPersist y la Control_path correspondientes a la misma configuración que tengo en mi archivo .ssh/config . Esto también puede ser otra cosa si desea que ansible los cree en una ubicación diferente. Para facilitar el uso, puse la misma ruta para que Ansible y cualquier otra herramienta como Parallel-ssh puedan usar el mismo ControlMaster .

NOTA

el control_path = ~/.ssh/controlmasters/%%r@%%h:%%p tiene dos signos %% opuestos a uno solo.

Luego, la siguiente parte es que Ansible por defecto está configurado en smart en la forma en que transfiere archivos. debajo está el bloque.

# Control the mechanism for transferring files (new)
# If set, this will override the scp_if_ssh option
#   * sftp  = use sftp to transfer files
#   * scp   = use scp to transfer files
#   * piped = use 'dd' over SSH to transfer files
#   * smart = try sftp, scp, and piped, in that order [default]
 transfer_method = scp

Necesita tener sftp Subsystem en el archivo sshd_config en los servidores. En mi caso, un par de servidores no tenían esa configuración y sftp falló, lo que provocó que la conexión regresara como UNREACHABLE . Según la configuración de smart , dice que intentará sftp, then scp and then pipe en ese orden, pero no me funcionó la configuración de transfer_method = scp|piped .

Espero que ayude

Solo una actualización para aquellos que estén interesados.

Todas las soluciones aquí me han fallado. Lo único que funcionó fue la degradación a ansible v. 2.1.5.0-1, que está disponible en el repositorio. Entonces todo es suave.

Luché contra esto durante 2 horas y luego encontré "-c ssh" en el comando run-playbook. Trabajado como un encanto. Se soluciona algún problema que tienen las versiones antiguas de OpenSSH con Ansible.

Hola a todos ,
Cuando intento traer el clúster de cambio abierto, aparece el siguiente error. Ejecuto el siguiente comando.

sudo ansible-playbook /usr/share/ansible/openshift-ansible/playbooks/byo/config.yml
fatal: [g_all_hosts | default([])]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: ssh: Could not resolve hostname g_all_hosts | default([]): Name or service not known\r\n", "unreachable": true}

json
[rhnuser3 @ ip-172-31-10-250 ~] $ ansible -m ping a todos
ip-172-31-10-250.ca-central-1.compute.internal | Inalcanzable! => {
"cambiado": falso,
"msg": "No se pudo conectar al host a través de ssh: Error en la verificación de la clave del host.
"inalcanzable": verdadero

We have verified following steps.

Master communicating to the node

[ rhnuser3 @ ip-172-31-10-250 ~] $ ssh [email protected]
Último inicio de sesión: miércoles 16 de agosto 08:05:16 2017 del maestro
[ rhnuser3 @ node ~] $


Node Communicating to the master

[ rhnuser3 @ ip-172-31-9-57 ~] $ ssh [email protected]
Último inicio de sesión: miércoles 16 de agosto 07:56:06 2017 desde el nodo
[ rhnuser3 @ master ~] $

We have changed necessary changed necessary configuration file from master and node server.

vi /etc/ansible/ansible.cfg


inventario = / etc / ansible / hosts
sudo_user = rhnuser3


Removed comments from following lines.
We have updated /etc/hosts/file – it is look like

[ rhnuser3 @ ip-172-31-10-250 ~] $ cat / etc / hosts

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4

:: 1 localhost localhost.localdomain localhost6 localhost6.localdomain6

172.31.10.250 maestro
172.31.9.57 nodo

sudo vi / etc / ssh / sshd_config

Autenticación de contraseña sí

PermitEmptyPasswords no

Autenticación de contraseña no

sudo cat / var / log / secure


```log
Aug 16 08:28:09 localhost sshd[22792]: Disconnecting: Too many authentication failures for root [preauth]
Aug 16 08:28:09 localhost sshd[22792]: PAM 5 more authentication failures; logname= uid=0 euid=0 tty=ssh ruser= rhost=blk-222-40-174.eastlink.ca user=root
Aug 16 08:28:09 localhost sshd[22792]: PAM service(sshd) ignoring max retries; 6 > 3

Servidor maestro realicé los siguientes comandos

ssh-keygen -t rsa
cat /home/rhnuser3/.ssh/id_rsa.pub
sudo vi /home/rhnuser3/.ssh/authorized_keys
sudo chmod 600 .ssh/authorized_keys
sudo chown rhnuser3:rhnuser3 .ssh/authorized_keys
cat /home/rhnuser3/.ssh/id_rsa

Servidor de nodo realicé el siguiente comando.

cd /home/rhnuser3
mkdir .ssh
chmod 700 .ssh
chown rhnuser3:rhnuser3 .ssh
sudo vi /home/rhnuser3/.ssh/authorized_keys
sudo chmod 600 .ssh/authorized_keys
sudo chown rhnuser3:rhnuser3 .ssh/authorized_keys
sudo vi /home/rhnuser3/.ssh/id_rsa
sudo chmod 600 .ssh/id_rsa
sudo chown rhnuser3:rhnuser3 .ssh/id_rsa

Intente sugerir sobre estos.
@virtusademo

virtusademo comentó hace un momento

[rhnuser3<strong i="64">@master</strong> ~]$ ansible --version
ansible 2.3.1.0
config file = /etc/ansible/ansible.cfg
configured module search path = Default w/o overrides
python version = 2.7.5 (default, May 3 2017, 07:55:04) [GCC 4.8.5 20150623 (Red Hat 4.8.5-14)]
[rhnuser3<strong i="67">@master</strong> ~]$ cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.1 (Maipo)

Estoy usando ansible en 2.3.1.0. agregué mis hosts en / etc / ansible / hosts. si lo hago, aparece el error --list-hosts a continuación
¡ERROR! el campo 'hosts' es obligatorio pero no se configuró. En ansible.cfg, la ruta de inventario es la misma. ¿Alguien puede ayudarme en esto?

hola..evrey one soy un pionero de ansible, lo voy a usar para entrega continua.
Quiero saber cómo el inventario, el libro de jugadas y los módulos interactúan internamente.
si alguien sabe esto, por favor contácteme en

¿Cómo resolvemos esto al final del día?

editar : parece que el servicio SSH en mi máquina remota puede haber fallado. Traté de iniciar una nueva sesión ssh con PuTTY y cierra la conexión antes de la indicación de inicio de sesión.

edit2 : el servicio SSH en la máquina remota ya no funciona correctamente, aunque todavía no he recibido una respuesta sobre cuál es exactamente el error. Dado que sucedió directamente después de que se ejecutó este script de Ansible, lo dejo aquí como si un error de Ansible causara que sshd se bloqueara, aún puede estar relacionado con este problema. Algunos detalles para cualquiera que intente recrear: tanto las máquinas de destino como las de control son Intel xeons que ejecutan CentOS 7. La versión de control es centos-release-7-4.1708.e17.centos.x86_64 y el destino tiene una configuración de gráficos de iris.


Parece que tengo este problema de repente en ansible 2.4.1.0 . Todo estaba funcionando bien mientras depuraba un nuevo rol y, de repente, esto comenzó a suceder.

Estas fueron las tareas con formato incorrecto que fallaron justo antes de que dejara de conectarse:

 - name: Get media SDK install folder contents
    command: "ls /opt/a-specific-directory/"
    register: directories

  - name: verify expected directories in install folder
    fail:
    when: not ({{directories}}|search({{item}}))
    vars:
        nested_list:
          - - dir1
            - dir2
            - dir3
            - dir4
            - dir5
            - dir6
            - dir7
            - dir8
            - dir9
    with_items: "{{ nested_list }}"

Lanzaron este error:

TASK: verify expected directories in install folder
 [WARNING]: when statements should not include jinja2 templating delimiters such as {{ }} or {% %}. Found: not
({{directories}}|search({{item}}))

fatal: [10.105.15.118]: FAILED! => {"failed": true, "msg": "The conditional check 'not ({{directories}}|search({{item}}))' failed. The error was: template error while templating string: expected token ':', got 'string'. String: {% if not ({'stderr_lines': [], u'changed': True, u'end': u'2017-11-28 12:12:31.502092', 'failed': False, u'stdout': u'dir2\\ndir3\\ndir4\\ndir5\\ndir6\\ndir7\\ndir8\\ndir9', u'cmd': [u'ls', u'/opt/a-specific-directory/'], u'rc': 0, u'start': u'2017-11-28 12:12:31.500354', u'stderr': u'', u'delta': u'0:00:00.001738', 'stdout_lines': [u'dir2', u'dir3', u'dir4', u'dir5', u'dir6', u'dir7', u'dir8', u'dir9']}|search(dir1)) %} True {% else %} False {% endif %}\n\nThe error appears to have been in '/home/my-playbook-location/playbook.yml': line 6, column 5, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n  - name: Verify expected directories in media SDK install folder\n    ^ here\n"}

Copié el mensaje de error de ejecutar ansible-playbook -vvvv myplaybook.yml después y obtuve:

Failed to connect to the host via ssh: OpenSSH_7.4p1, OpenSSL 1.0.2k-fips  26 Jan 2017
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 58: Applying options for *
debug1: auto-mux: Trying existing master
debug1: Control socket "/home/MY-USER/.ansible/cp/01607ca611" does not exist
debug2: resolving "[MY-REMOTE-IP]" port 22
debug2: ssh_connect_direct: needpriv 0
debug1: Connecting to MY-REMOTE-IP [MY-REMOTE-IP] port 22.
debug2: fd 3 setting O_NONBLOCK
debug1: fd 3 clearing O_NONBLOCK
debug1: Connection established.
debug3: timeout: 10000 ms remain after connect
debug1: identity file /home/MY-USER/.ssh/id_rsa type 1
debug1: key_load_public: No such file or directory
debug1: identity file /home/MY-USER/.ssh/id_rsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/MY-USER/.ssh/id_dsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/MY-USER/.ssh/id_dsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/MY-USER/.ssh/id_ecdsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/MY-USER/.ssh/id_ecdsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/MY-USER/.ssh/id_ed25519 type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/MY-USER/.ssh/id_ed25519-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_7.4
debug1: Remote protocol version 2.0, remote software version OpenSSH_6.6.1
debug1: match: OpenSSH_6.6.1 pat OpenSSH_6.6.1* compat 0x04000000
debug2: fd 3 setting O_NONBLOCK
debug1: Authenticating to 10.105.15.118:22 as 'root'
debug3: hostkeys_foreach: reading file "/home/MY-USER/.ssh/known_hosts"
debug3: record_hostkey: found key type ECDSA in file /home/MY-USER/.ssh/known_hosts:1
debug3: load_hostkeys: loaded 1 keys from 10.105.15.118
debug3: order_hostkeyalgs: prefer hostkeyalgs: [email protected],[email protected],[email protected],ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521
debug3: send packet: type 20
debug1: SSH2_MSG_KEXINIT sent
Connection reset by MY-REMOTE-IP port 22

No estoy seguro de qué hacer con eso, ya que había estado funcionando hasta ahora.
Ambos archivos id_rsa en el controlador y las claves autorizadas en la máquina remota no han cambiado desde que agregué la clave pública allí hace una semana y los permisos siguen siendo 600.

editar : parece que el servicio SSH en mi máquina remota puede haber fallado. Traté de iniciar una nueva sesión ssh con PuTTY y cierra la conexión antes de la indicación de inicio de sesión.

Sí, incluso espero ese problema cada vez que empiezo a usar Ansible en una nueva Mac. Eso es triste.

Me encontré con esto, sin embargo, solo parece ocurrir en mi mac.

conexión: local en el libro de jugadas solucionó mi problema

Mismo error que enfrenta:
fatal: [1.2.3.4]: ¡inalcanzable! => {"cambiado": falso, "msg": "No se pudo conectar al host a través de ssh: Advertencia: Se agregó permanentemente '1.2.3.4' (ECDSA) a la lista de hosts conocidos.rnPermiso denegado (clave pública) .rn" , "inalcanzable": verdadero}

SSH funciona pero ansible arroja un error inalcanzable

@induraj parece el usuario con el que su ansible en ejecución no tiene acceso a la clave.
¿Podría también poner la salida de ansible --version.
también asegúrese de haber instalado ansible solo por un método (pip o brew)

Gracias por la respuesta rápida:
(ansble) ansible @ sharma : ~ $ pip freeze | grep ansible
ansible == 2.4.2.0

¿Estás ejecutando el virtualenv? ¿Tiene acceso a la clave?

sí, tienen acceso:
ll ~ / .ssh / raj_aws.pem
-rw ------- 1 ansible ansible 1692 13 de enero 23:12 .ssh / raj_aws.pem.
¿Se requiere algo?

@induraj No estoy completamente seguro, pero es posible que no obtenga los permisos correctos a través de virtualenv.

OKAY. incluso estoy intentando lo mismo, todavía tratando de resolverlo.

déjame compartir lo que tengo hasta ahora.

  • creado virtualenv
  • ansible instalado con dependencia.
  • capaz de crear una instancia EC2 con ansible.
  • pero enfrenta problemas de inicio de sesión en la máquina virtual EC2 con ansible.

¿Podría ayudarme a acceder a la máquina virtual EC2 a través de ansible para que pueda seguir adelante con mis pruebas con ansible?

He configurado en la máquina base sin que virtualenv esté funcionando. Puede haber algún problema de autenticación de usuario.

Si su ssh-agent tiene varias claves, use la variable ansible_ssh_private_key_file en la entrada de su host para especificar su clave privada en lugar de que ssh-agent pase la clave incorrecta y sea rechazada.

Información de lista

¡Hola!

Muchas gracias por su interés en Ansible. Sinceramente, significa mucho para nosotros.

Esta parece ser una pregunta de usuario, y nos gustaría dirigir este tipo de cosas a la lista de correo o al canal de IRC.

Si puede pasar por allí, se lo agradeceríamos. Esto nos permite mantener el rastreador de problemas para errores, solicitudes de extracción, RFE y similares.

Gracias una vez más y esperamos verte en la lista o en el IRC. ¡Gracias!

En mi caso, el problema principal es que el archivo de control no se creó y, como resultado, el comando proxy no tenía los permisos adecuados.

Comando revelado al agregar la opción -vvvvvvv a ansible cmd:

ssh -vvv -o ControlMaster=auto -o ControlPersist=30m -o ConnectionAttempts=100 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o Port=22 -o 'IdentityFile="secret.id_rsa"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=luser -o ConnectTimeout=10 -o 'ProxyCommand=ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -W %h:%p -q [email protected]' -o ControlPath=/Users/me/.ansible/cp/3b9a3c71ba 10.0.3.27 '/bin/sh -c '"'"'python && sleep 0'"'"''

Si creé manualmente una ruta a 10.0.3. * Y volví a ejecutar ese comando sin la opción -o 'ProxyCommand=ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -W %h:%p -q [email protected]' . Se creó el archivo de control, luego todo funcionó.

Jugué un poco con las opciones de ForwardAgent en mi host y en el host proxy sin éxito. Eventualmente, simplemente hice un despeje y ejecuté ese comando para cada uno de los hosts que fallaban y dejé que el truco desbloqueara mi trabajo.

Estaba usando una clave privada no estándar y no se encontraba. Fueron 600 permanentes. ssh-add <path-to-private-key> solucionó mi problema.

Agregar mi clave con ssh-copy-id al servidor remoto solucionó el problema.

agregar -o ControlMaster=auto -o ControlPersist=30m a ssh args solucionó el problema para mí.

  • versión ansible: 2.4.1.0
  • os: macos sierra
  • mandos a distancia: instancias ec2 (centos7, t2.micro)

Más:

Obteniendo el error "INALCANZABLE" en medio de tareas de rol Se detendría en la misma tarea. Pero se ejecutaría si aislara solo esa tarea (a través de etiquetas).

ansible -m ping myServer me dio UNREACHABLE! error.
ansible -c local -m ping myServer funcionó.

EDITAR: Para solucionar esto en mi libro de jugadas, tuve que poner:

- hosts: dev
  connection: local

Tuve el mismo problema con ansible 2.6.0
mis ssh_args en ansible.cfg

ssh_args = -o ForwardAgent=yes -o ControlMaster=auto -o ControlPersist=30m -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no

Pude SSH en los hosts manualmente
pero ejecutar ansible-playbook o ansible -m ping tuvo problemas
degradar ansible a 2.5.5 resolvió el problema para mí

Tengo el mismo problema, ubuntu 14.04 con ansible 2.6.2 (actualización desde ansible 1.9)

ansible -m ping myServer gave me UNREACHABLE! error.
ansible -c local -m ping myServer worked.

según @kararukeys
Bajé a 2.5.5, pero sigue siendo el mismo

2018-08-01 16:00:32 [mini<strong i="10">@hq</strong> ansiblecontrol]$ ansible hqpc222.abc.com -i inventory/kw.production -m ping -vvv
/usr/local/lib/python2.7/dist-packages/cryptography/hazmat/primitives/constant_time.py:26: CryptographyDeprecationWarning: Support for your Python version is deprecated. The next version of cryptography will remove support. Please upgrade to a 2.7.x release that supports hmac.compare_digest as soon as possible.
  utils.DeprecatedIn23,
ansible 2.5.5
  config file = /home/mini/D/ansiblecontrol/ansible.cfg
  configured module search path = [u'/home/mini/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/local/lib/python2.7/dist-packages/ansible
  executable location = /usr/local/bin/ansible
  python version = 2.7.6 (default, Oct 26 2016, 20:30:19) [GCC 4.8.4]
Using /home/mini/D/ansiblecontrol/ansible.cfg as config file
Parsed /home/mini/D/ansiblecontrol/inventory/kw.production inventory source with ini plugin
[pid 2014] 16:00:41.194783 D mitogen: mitogen.service.Pool(0x7f73f53147d0, size=16, th='MainThread'): initialized
[pid 2014] 16:00:41.195890 D ansible_mitogen.process: Service pool configured: size=16
META: ran handlers
[pid 2033] 16:00:41.233401 D mitogen: unix.connect(path='/tmp/mitogen_unix_uMVCQQ')
[pid 2033] 16:00:41.234083 D mitogen: unix.connect(): local ID is 1, remote is 0
[pid 2014] 16:00:41.235861 D mitogen: mitogen.ssh.Stream(u'default').connect()
[pid 2014] 16:00:41.304490 D mitogen: hybrid_tty_create_child() pid=2037 stdio=63, tty=17, cmd: ssh -o "LogLevel ERROR" -o "Compression yes" -o "ServerAliveInterval 15" -o "ServerAliveCountMax 3" -o "StrictHostKeyChecking no" -o "UserKnownHostsFile /dev/null" -o "GlobalKnownHostsFile /dev/null" -C -o ControlMaster=auto -o ControlPersist=60s hqpc222.abc.com /usr/bin/python -c "'import codecs,os,sys;_=codecs.decode;exec(_(_(\"eNqFkc1OwzAQhM/NU+S2tmqlTuiFSJFAPSAOCClC9AAVyo9DLRLbOG5NeXq2KVKTcuC2n3bWMxrnbJ3pPjLSCEIDy/yIZBMiNNp+EJoGM5zrnUkIZzHn9Mw5G5PFbXziqtW9IPkY7BjWY/AIaNgf0L4tHLp2YZaFUBfWSwVhoephKb5EtXNF2Yphvdj1dlFKtTAHt9UKMOfsQjbPhsO9sL3U6iW92gy2Qu2lRYbb/O6Zwyabnp00iC2ZLtgU50A66fS7UGknFRrcbD/7JOGR6Arn0DOqdBc5nyY8XlKgAT7rrXSCxAwe7p8eOeevCjBOpWtsnQar7I0ce6+1EQrbBlsCjawoahInS35NGXxLgy81Jjvr1gx8CcevaMyvwWqYT/VeqP1/6r8p40nKH0t5sts=\".encode(),\"base64\"),\"zip\"))'"
[pid 2014] 16:00:41.305373 D mitogen: mitogen.ssh.Stream(u'local.2037').connect(): child process stdin/stdout=63
[pid 2014] 16:00:51.245756 D mitogen: mitogen.ssh.Stream(u'local.2037'): child process still alive, sending SIGTERM
[pid 2033] 16:00:51.246902 D mitogen: mitogen.core.Stream(u'unix_listener.2014').on_disconnect()
[pid 2033] 16:00:51.247108 D mitogen: Waker(Broker(0x7f73f4ac2dd0) rfd=14, wfd=15).on_disconnect()
[pid 2014] 16:00:51.247242 D mitogen: mitogen.core.Stream(u'unix_client.2033').on_disconnect()
hqpc222.abc.com | UNREACHABLE! => {
    "changed": false, 
    "msg": "Connection timed out.", 
    "unreachable": true
}
[pid 2014] 16:00:51.288028 I mitogen: mitogen.service.Pool(0x7f73f53147d0, size=16, th='mitogen.service.Pool.7f73f53147d0.worker-12'): channel or latch closed, exitting: None
[pid 2014] 16:00:51.288404 D mitogen: Waker(Broker(0x7f73f530af50) rfd=9, wfd=11).on_disconnect()
[pid 2014] 16:00:51.288691 D mitogen: <mitogen.unix.Listener object at 0x7f73f5314450>.on_disconnect()
2018-08-01 16:00:51 [mini<strong i="11">@hq</strong> ansiblecontrol]$ 

alguna sugerencia ? por favor ~

TIPO DE PROBLEMA
  • Informe de error
VERSION ANSIBLE
ansible 2.0.0.2
  config file = 
  configured module search path = Default w/o overrides
CONFIGURACIÓN

Sin cambios

SO / MEDIO AMBIENTE

OS X El Capitan Versión 10.11.3

RESUMEN

Puedo conectarme a mi Rasberry Pi a través de ssh a través de un cable ethernet a través de "ssh [email protected] " pero la ejecución de Ansible con esta dirección IP como host falla.

He configurado con éxito esta Rasberry Pi con ansible a través de wifi (usando la dirección IP de wifi), pero ahora intento usar ansible a través de la conexión directa de ethernet, aparece el mensaje de error críptico:

`TASK [setup] *******************************************************************
fatal: [169.254.0.2]: UNREACHABLE! => {"changed": false, "msg": "ERROR! (25, 'Inappropriate ioctl for device')", "unreachable": true}`

Debido a que _puedo_ conectarme con éxito a este pi usando esa dirección IP a través de ssh desde la terminal, estoy planteando que esto es un error en Ansible.

PASOS PARA REPRODUCIR

Ejecuto este comando para ejecutar el rol

ansible-playbook ansible-pi/playbook.yml -i ansible-pi/hosts --ask-pass --sudo -c paramiko -vvvv

También lo intenté

ansible-playbook ansible-pi/playbook.yml -i ansible-pi/hosts --ask-pass --sudo -vvvv

que conducen al mismo error.

archivo hosts

[pis]
169.254.0.2

libro de jugadas


---

- name: Ansible Playbook for configuring brand new Raspberry Pi

  hosts: pis
  roles:
    - pi
  remote_user: pi
  sudo: yes

Supongo que el rol no es realmente importante porque ansible está fallando en el paso de conexión ssh.

RESULTADOS PREVISTOS

Espero que ansible se conecte a pi y ejecute el rol (lo hice con éxito al conectarme a través de una dirección IP a través de wifi)

RESULTADOS ACTUALES
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/getpass.py:83: GetPassWarning: Can not control echo on the terminal.
No config file found; using defaults
  passwd = fallback_getpass(prompt, stream)
Warning: Password input may be echoed.
SSH password: raspberry

[DEPRECATION WARNING]: Instead of sudo/sudo_user, use become/become_user and 
make sure become_method is 'sudo' (default). This feature will be removed in a 
future release. Deprecation warnings can be disabled by setting 
deprecation_warnings=False in ansible.cfg.
Loaded callback default of type stdout, v2.0
1 plays in ansible-pi/playbook.yml

PLAY [Ansible Playbook for configuring brand new Raspberry Pi] *****************

TASK [setup] *******************************************************************
<169.254.0.2> ESTABLISH CONNECTION FOR USER: pi on PORT 22 TO 169.254.0.2
CONNECTION: pid 2118 waiting for lock on 10
CONNECTION: pid 2118 acquired lock on 10
fatal: [169.254.0.2]: UNREACHABLE! => {"changed": false, "msg": "ERROR! (25, 'Inappropriate ioctl for device')", "unreachable": true}

PLAY RECAP *********************************************************************
169.254.0.2                : ok=0    changed=0    unreachable=1    failed=0   

En OpenSSH_7.9p1, OpenSSL 1.1.1b, ansible 2.7.8, cuando se enfrenta al error UNREACHABLE , con msg que contiene que la autenticación se realizó correctamente ( Authenticated to ) pero mencionando un error pipe ( debug3: mux_client_read_packet: read header failed: Broken pipe ), configurar -o ControlMaster=no en ssh_args funcionó para mí sin tener que usar paramiko o soltar ControlPersist .

¿Fue útil esta página
0 / 5 - 0 calificaciones