Ansible: SSH работает, но ansible выдает ошибку о недоступности

Созданный на 7 апр. 2016  ·  93Комментарии  ·  Источник: ansible/ansible

ТИП ПРОБЛЕМЫ

  • Сообщение об ошибке
ДОСТУПНАЯ ВЕРСИЯ
ansible 2.0.0.2
  config file = 
  configured module search path = Default w/o overrides
КОНФИГУРАЦИЯ

Без изменений

ОС / СРЕДА

OS X El Capitan версии 10.11.3

РЕЗЮМЕ

Я могу подключиться к своему Rasberry Pi через ssh через кабель Ethernet через «ssh [email protected] », но запустить Ansible с этим IP-адресом в качестве хоста не удается.

Я успешно настроил этот Rasberry Pi с возможностью доступа через Wi-Fi (с использованием IP-адреса Wi-Fi), но теперь, пытаясь использовать ansible через прямое соединение Ethernet, я получаю загадочное сообщение об ошибке:

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

Поскольку я _ могу_ успешно подключиться к этому пи, используя этот IP-адрес через ssh с терминала, я утверждаю, что это ошибка в Ansible.

ДЕЙСТВИЯ ПО ВОСПРОИЗВЕДЕНИЮ

Я запускаю эту команду, чтобы запустить роль

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

Я тоже пробовал

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

которые приводят к той же ошибке.

файл hosts

[pis]
169.254.0.2

учебник


---

- name: Ansible Playbook for configuring brand new Raspberry Pi

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

Я предполагаю, что роль на самом деле не важна, потому что ansible не работает на этапе подключения ssh.

ОЖИДАЕМЫЕ РЕЗУЛЬТАТЫ

Я ожидаю, что ansible подключится к pi и запустит роль (я успешно сделал это, подключившись по IP-адресу через Wi-Fi)

ФАКТИЧЕСКИЕ РЕЗУЛЬТАТЫ
/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

Самый полезный комментарий

Это случилось внезапно, когда я обновил Ansible.

Для успешного запуска мне пришлось:

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

Раньше я только бегал

ansible-playbook --limit grunndata playbook.yml

Нормальный SSH со следующим работает без проблем:

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

Что-то изменилось.

Какую информацию я могу предоставить, чтобы помочь отладить это?

Я использую следующее:

  • Ubuntu 16.04
  • Ansible 2.1.0.0 устанавливается через pip

Все 93 Комментарий

Привет!

Большое спасибо за отправку в Ansible. Это очень много значит для нас.

У нас есть несколько вопросов, о которых мы хотели бы узнать, прежде чем мы сможем поставить этот запрос в очередь. Если вы можете помочь ответить на них, мы будем очень признательны:

  • Вы пробовали отключить сбор фактов, чтобы вместо этого проверять наличие более подробных ошибок в задаче?
  • Вы тестировали необработанный модуль с отключенным сбором фактов?

Это действительно очень напряженный проект, чтобы напомнить о вещах. У нас более 800 участников, и мы эффективно управляем очередью
мы назначаем вещам приоритет между P1 (высший) и P5. Благодарим вас за уделенное время!
Мы будем работать в приоритетном порядке, поэтому просто хотели, чтобы вы знали об очереди и знали, что мы не забыли о вас!

Мы обязательно увидим ваши комментарии по этому вопросу при чтении этого тикета, но, возможно, не сможем ответить быстро. Вы также можете присоединиться к одному из двух наших списков рассылки
которые очень активны:

Еще раз спасибо за это и за проявленный интерес к Ansible!

@mhfowler : мне удалось обойти это, ansible_password в свой инвентарь

ansible_password у меня тоже сработало

[testServer]
192.168.33.10

[testServer:vars]
ansible_password=vagrant

Это случилось внезапно, когда я обновил Ansible.

Для успешного запуска мне пришлось:

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

Раньше я только бегал

ansible-playbook --limit grunndata playbook.yml

Нормальный SSH со следующим работает без проблем:

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

Что-то изменилось.

Какую информацию я могу предоставить, чтобы помочь отладить это?

Я использую следующее:

  • Ubuntu 16.04
  • Ansible 2.1.0.0 устанавливается через pip

+1

нужно было добавить -c paramiko, потому что один из 5 хостов вышел из строя, и я мог успешно использовать ssh на всех из них.

Для меня у меня была запись .ssh / config, чтобы мой пользователь соответствовал имени удаленного хоста.

Host servername  
    User username

Я мог напрямую подключиться к серверу по SSH с помощью ssh servername

Однако с Ansible мне нужно было добавить параметр -u к команде развертывания:

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

После этого можно было развернуть нормально.

Немного странно, что он не использовал файл .ssh / config, как раньше, но обходной путь работает, спасибо :)

Для этой проблемы запрошено закрытие @mhfowler, или время ожидания вашего ответа истекло.
нажмите здесь, чтобы получить помощь по ботам

Почему это? Я был так счастлив, выполнив ansible -m ping all now I need to do -u user -c paramiko

@roolo Я также установил ansible_password, и он начал работать у меня. Для чего это? Вы можете установить буквально все, что захотите, и теперь он будет работать.

Та же проблема с ansible 2.1.2.0 и параметром --ask-pass.
OS X 10.11.6

исправление ohallors не помогло.

Я отлучился от компьютера на несколько недель. Пожалуйста, напишите мне об этом после
3 ноября, если я не отвечу сам. Спасибо

Одна и та же.

$ 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)

Использование -c paramiko, похоже, работает лучше, похоже, -c smart не работает .

Если это кому-то поможет, я решил эту проблему в Ubuntu 16.04, заменив эту строку в моем файле hosts ...

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

с участием

web1 ansible_ssh_host=my_ip

а затем убедившись, что я добавил

remote_user=my_remote_user

в мой ansible.cfg

Для меня это было просто потому, что я добавил «my_remote_user @» перед своим IP-адресом. Это работало до того, как я обновился.

У меня была такая же проблема, и сначала пинг хоста каким-то образом решил проблему.

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

UPD: мне приходится запускать команду ping почти каждый раз перед выполнением playbook. Как после пары минут бездействия playbook снова выходит из строя.

@ cue232s Он сообщает Ansible, какой пароль использовать для ssh-соединения.

http://docs.ansible.com/ansible/intro_inventory.html#list -of-behavior-inventory-parameters (похоже, что параметр теперь называется _ansible_ssh_pass_)

Я решил аналогичную проблему в Mac OS X с помощью ansible 2.1.2.0, который может помочь. Не уверен, где еще разместить это. Я мог подключиться к экземпляру по ssh, но запуск моей playbook привел к:

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}

Никаких других сообщений об ошибках. Но это сработало с добавлением -c paramiko .

Я перешел на доступную версию 1.9.4 ( pip install ansible==1.9.4 ), и теперь, когда я запускаю ее, я получаю сообщение об ошибке:

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

Итак, я обновился до 2.1.2.0 и добавил файл ansible.cfg каталог моего проекта с таким содержимым:

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

И связь заработала.

У меня та же проблема, что и https://github.com/ansible/ansible/issues/15321#issuecomment -256346976

ansible-playbook не может подключиться и не создает сокет под ~/.ansible/cp . Если я сначала запустил ansible -m ping , сокет будет создан, и ansible-playbook будет успешным, если я буду работать в течение 60 секунд.

Интересно, что если я запустил ansible-playbook с параметром -vvv а затем скопирую точную показанную команду ssh и запустил ее, соединение будет успешным, и ansible-playbook также будет успешным.

У меня проблема с ansible-2.1.2.0, установленным с Homebrew на macOS Sierra 10.12.1

Переход на 2.1.1.0 устраняет проблему для меня.

У меня была такая же проблема

  • возможно: 2.1.2.0
  • Fedora 24 как ящик управления
  • CentOS 7 как управляемая система

Я решил это, добавив ключ, используемый для аутентификации, в ssh-agent. Ключ, который я использовал, был без пароля.

Имея ту же проблему. Стандартная попытка OpenSSH не удалась, но paramiko работает.

Запуск Ansible внутри Vagrant / Virtualbox в Windows для подготовки удаленных виртуальных машин. Обе машины работают под управлением Ubuntu 16.04. Конфигурационный файл Ansible версии 2.1.2.0 находится в /ansible/ansible.cfg.

строка hosts:

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

Это не удается:

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
}

Это работает:

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"
}

## Решение: обновлен до Ansible 2.2.0.0, и мне больше не нужно использовать -c paramiko

У меня была эта ошибка с модулем cron , и для меня исправлено обновление до ansible 2.2.0.0!

Я могу подключиться к своему хосту как root, но не могу запустить свой доступный

[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> ~]#

я пробовал подробный

[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
}

нашел решение, выполнил следующую команду на моем хосте, чтобы исправить разрешение папки ключа 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

и смог запустить установку

[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"
        ],

попробовал пару комбинаций имен ansible_host и я обнаружил, что он работает с

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

и что это не работает (без указания paramiko) с

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

Ограничение разрешений ключа ssh до 600 устранило эту проблему.

Такая же проблема:
доступный 2.1.2.0
Ubuntu 14.04.5 x64

Ошибка:

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

когда я пытаюсь сделать ansible-playbook -i inventory.ini shsh.yml --key-file ssh / deploy
Это для разрешений ключа ssh?

@ jimi-c Почему эта проблема снова закрыта?

Вопрос был автоматически закрыт нашим ботом из-за отсутствия ответа. Судя по нескольким из приведенных выше ответов, это, по-видимому, (по крайней мере, в некоторых случаях) связано с разрешениями на ключи SSH (которые всегда должны быть 0600 для закрытых ключей).

Не похоже, что для меня проблема с разрешениями, в настоящее время на доступной версии 2.1.2.0
Я получаю DNS-имя для экземпляра ec2, который пытаюсь сделать доступным. Возвращается в виде: ec2 - # {ip_address} .ap-southeast-2.compute.amazonaws.com.

Это приводит к ошибке:

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

Однако, если я использую IP-адрес для сервера, он работает без проблем ... Так что, похоже, гораздо ближе к проблеме, с которой столкнулся

bot_skip

У меня есть опыт в этом случае, когда я запускал ansible 2.0.2.0 с целевым хостом под управлением CentOS.

В моем сценарии у меня есть hosts содержащие такие данные, как ansible_host ansible_user и ansible_ssh_pass
Однако похоже, что парсинг символов не поддерживает "#" (т.е. 3 сервера имеют пароль, содержащий "#", и эти 3 хоста отметили ошибку).

Запуск playbook дает мне ошибку:

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}

Странно то, что в ошибке указано, что аутентификация не удалась. но при выполнении сеанса SSH работает.

Проверка журнала сервера secure показывает что-то вроде:

<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

Смена пароля с заменой "#" другим специальным символом, например "%", работает.
Теперь playbook успешно работает на всех машинах.

@ upbeta01 , это старая ошибка, и я думал, что мы ее уже исправили. Вам может потребоваться экранировать символ #, чтобы он не считался началом комментария.

Спасибо за информацию @ jimi-c, я могу подумать об обновлении своего ansible до последней стабильной версии. Не уверен, что 2.0.2.0 не исправили ошибку.

Я использую $ ansible --version 2.2.0.0, и проблема остается ... надеюсь, что я нашел этот открытый поток ... возможно, мы можем добавить предупреждение при использовании Centos 7

Я использую ansible 2.2.0.0.

Эта команда работает, потому что не требуются разрешения sudo:

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

Но этого нет:

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

Решено:
ansible all -s --ask-sudo-pass -m raw -a "fdisk -l"

Я и

ОПЕРАЦИОННЫЕ СИСТЕМЫ:
`` `$ cat / etc / redhat-release
Релиз CentOS 6.8 (окончательный)

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

Неудачный пинг:
`` $ ansible tcfabrics -m пинг
server3 | Недостижимо! => {
"изменено": ложь,
"msg": "Не удалось подключиться к хосту через ssh:",
"unreachable": правда
}
server1 | УСПЕХ => {
"изменено": ложь,
"настольный теннис"
}
server2 | УСПЕХ => {
"изменено": ложь,
"настольный теннис"
}

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"
}

хосты выбираются случайным образом, и любой playbook или команда, которую мы запускаем с использованием paramiko, работают, однако при использовании значения по умолчанию (smart?) происходит случайный сбой (однако никогда не приводит к 100% успеху).

Если это другая проблема, дайте нам знать, и мы откроем отдельную проблему

ssh НЕДОСТУПНЫЕ, чтобы увидеть, что происходит.

Если у вас не настроен ключевой файл для сервера, используйте флаг -k

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

Я извлек полную команду ssh, выполняемую ansible-playbook, добавив «-vvvv» в ее командную строку, и запустил ее вручную. Он напечатал это в конце:

unix_listener: "/home/saurav/.ansible/cp/ansible-ssh-very-long-aws-ec2-hostname-deploy.XXYY" слишком длинный для сокета домена Unix

Замена имени хоста EC2 на его IP-адрес в файле hosts исправила это для меня.

Кажется, что ansible не уважает ~/.ssh/config :

Host raspberrypi.local
StrictHostKeyChecking no

Так что я мог войти через оболочку, но Ansible не удалось. Следующее исправило это для меня:

ssh-keygen -R raspberrypi.local

Наконец-то я получил свою работу, это с пользователем root, я полагаю, первое положение. Спасибо за все советы, хотя это немного странно.

  • Хост: Ubuntu 16.04.2 LTS
  • Сервер: Ubuntu 16.04.2 LTS
  • Версия Ansible: Ansible 2.2.1.0
  • Paramiko с Python2.7 или Python3.5 работает.

файл: hosts

[test]
91.121.103.38 ansible_ssh_user=root

[test:vars]
ansible_password=MustBeTheRealPassword

команда

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

Я заметил, что для пользователя root я могу работать без флага -u root и без установки root<strong i="21">@ipaddr</strong> , rather just leave it the as the ipaddr` в хостах.

ansible-playbook -vvvv php.yml -c paramiko --ask-become-pass - Я не пробовал работать как пользователь без полномочий root или с SSH-ключами, так как я не использую Digital Ocean, который делает это удобным при загрузке машины.

@JREAM @PGUTH @roolo @ohallors @ringe @mhfowler @midolo @ upbeta01 (и другие люди, которые могут это воспроизвести).

Не могли бы вы протестировать со сборкой кандидата на выпуск 2.3 (http://releases.ansible.com/ansible/ansible-2.3.0.0-0.3.rc3.tar.gz)?

И если по-прежнему не удается, предоставить конфигурацию ansible.cfg, вывод -vvv и любую общую информацию о конфигурациях и версиях ssh?

@alikins - пробовал тестировать. Я получаю сообщение об ошибке при выполнении команды ansible-playbook . Я пытаюсь изолировать выпуск, используя virtualenv . Я что-то пропустил?

┌─(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

Вот как это выглядит в файловой структуре.

┌─(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 Круто, спасибо за тестирование. Похоже, что доступный пакет python не находится в sys.path. (например, ~ / Private / work / infra / 2.3 / ansible-2.3.0.0 / lib / ansible должен находиться в sys.path). Не знаю, как был настроен virtualenv, но если это в основном распакованный tar.gz, попробуйте:

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

Это добавит ~ / Private / work / infra / 2.3 / ansible-2.3.0.0 / lib / ansible в PYTHONPATH и установит для ANSIBLE_HOME значение ~ / Private / work / infra / 2.3 / ansible-2.3.0.0, что должно запустить его.

Я считаю, что пакетная установка tarball в virtualenv также должна работать, но не проверял это.

У меня все еще есть эта проблема, я готов протестировать, если вам нужно.

Ubuntu 16.04 и доступный 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

У меня такая же проблема

Убедитесь, что у вас есть python-simplejson поскольку без него вы даже не сможете собрать факты. Добавление этого в начало моих сборников пьес помогает.

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

@shadycuz : для меня это решено в Ubuntu 16.04 с добавлением этого в ansible.cfg:

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

В связи с этим, это решило проблему при работе на хосте Mac:

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

У меня также была эта проблема, и я понял, что мой сервер sftp не запущен. перенастроил сервер sshd, изменив / etc / ssh / sshd_config, и перезапустил сервер ssh. проблема ушла.

При запуске с компьютера Mac обходной путь ansible.cfg @ttrahan у меня не работал. У меня есть playbook, который подключается к нескольким компьютерам, большинство из которых работают под управлением Ubuntu 14.04 или 12.04. Все коробки Ubuntu работают без проблем. Однако два компьютера, на которых работает CentOS, не могут подключиться из-за следующей ошибки:

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

@alikins , не уверен, что env-setup вы упомянули, является var или действительно относится к файлу.

Вот что я вижу внутри каталога 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/   

следует ли мне повторно загрузить tar-файл, заметив, что в нем есть новые файлы?

Привет, Кто-нибудь может мне помочь. Я не могу проверить связь с маршрутизатором cisco с моей виртуальной машины (CentOS 7.)

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

Вот фрагмент файла ansible.cfg:

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

файл 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

Привет,

У меня была такая же «недостижимая ошибка» с ansible 2.3.0.0, работающим в Ubuntu 16.04.
Добавлен -c paramiko

Пример: $ ansible-playbook -i inventory ./router/tasks/get-vlan.yml -c paramiko)

Но затем я получил совершенно другое сообщение об ошибке - методы аутентификации недоступны,

Эта новая ошибка разрешилась сама собой при добавлении «connection: local» в YAML и продолжала работать даже после удаления -c paramiko, тем самым разрешив обе проблемы.

  • ссылка на исправление находится здесь: [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 Спасибо за ответ.
Прочитав много документов, два дня назад я понял, что исправление использует 'connection = local'.
Но мне интересно, почему командная строка IOS не квалифицируется как оболочка для доступа. Зачем нам нужно запускать команды на доступных хостах. Есть мысли, пожалуйста?

@ b2sweety Это хороший вопрос, на который я не знаю ответа.

Извините, но Ansible для меня очень новинка, на самом деле я играл с ней чуть больше суток.
Я знаю, что интерфейс командной строки Cisco (IOS) не похож на интерфейс командной строки UNIX (POSIX), так что, возможно, это как-то связано с этим.

Я предоставлю возможность другим, более квалифицированным, ответить на этот вопрос.

Привет, команда Ansible,
Я настроил Ansible на машинах Rhel 7x. Я взял примеры как 2 машины. 1 - Сервер управления и узел 1. Я скопировал ключи SSH и смог успешно войти в систему без пароля.
при попытке проверить "ping: через ansible" появляется ошибка для IP-адреса Localhost / локального сервера управления в файле Invertory.

  • Пинг успешен на удаленном узле, но недоступен на локальном узле
[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
}

Это ошибка, пожалуйста, предоставьте мне решение. Моя почта - «nlkalyan. [email protected] »

Что исправило для меня, так это отключение paramiko, установив ansible_connection=ssh .

Ошибка:

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

Исправить:

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

Команда Run:

ansible-playbook -i inventory_file playbook.yml

Хост-среда:

  • доступный 2.2.1.0
  • OSX El Capitan 10.11.6

@Vcoleman , спасибо за помощь ..
Я сделал тот шаг, который вы указали, все та же ошибка ..
Пинг команда

$ ansible test -m ping

Ошибка, показанная на моем экране, несколько отличается от вашей .---->
"" msg ":" Не удалось подключиться к хосту через ssh: Permission denied (publickey, gssapi-keyex, gssapi-with-mic) .rn ""
Я изменил свой файл Hosts, как показано ниже.

мой файл хоста входит:

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

в приведенном выше 172.31.27.41 - мой локальный сервер (сервер управления)
снова у меня была такая же проблема ..

@pavaniandkalyan Вы уверены, что пользователь с правильным SSH-ключом на RPi - это пользователь ansible ?

Я уверен, что я скопировал все ключи с управляющего сервера на все узлы и, наоборот, как доступный пользователь.
Требуется ли установка / обновление / пинг на сервере управления? Я имею в виду, что во время автоматизации с помощью Ansbile необходимо вмешательство Control Server? или только узлы push достаточно?

Кажется неправильным, что мне нужно добавить -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

У меня была такая же проблема:

$ 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
}

Решил проблему установкой sshpass с помощью команды:

sudo apt-get install sshpass

После установки sshpass я выполнил эту команду:

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

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

используйте paramiko как обходной путь.

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

или добавить в доступную конфигурацию

[defaults]
transport = paramiko

У меня была такая же проблема:

Мое разрешение 👍 *
ansible -c local -i all_servers all_servers -m ping

-c local работал у меня, я установил transport = local и тогда мне не нужно было указывать параметр -c в прогонах. Я думаю, что -c local соблюдает настройки файла .ssh/config . если это не указано, вам нужно определить все настройки в файле ansible.cfg . это мое предположение.

Приведенная выше цитата, которую я написал вчера, думая, что проблема решена. ВЫШЕУКАЗАННЫЕ НАСТРОЙКИ - НЕ ПРАВИЛЬНЫЙ ОТВЕТ

Вот что решило проблему

Из того, что я вижу. Способ работы ansible совершенно правильный. При этом учитывается, что вы можете отправить свой файл ansible.cfg вместе со своим кодом. Таким образом, более ранние версии действительно работали с вашими файлами .ssh/config . Но в новых версиях нет.

Итак, новые версии ansible позволяют настраивать параметры ssh в блоке [ssh_connection]. где вы можете разместить все требования для ssh. Теперь это означает, что вам не понадобится файл .ssh / config, если его управляющий сервер и ваш файл инвентаризации могут иметь записи IP или dns. Но, как и большинство из нас, привыкших к ansible honor, у нашего .ssh/config была эта проблема. Для этого вы должны явно указать местоположение ssh config file . Как показано ниже

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

Параметры ControlMaster and ControlPersist и Control_path соответствуют тем же параметрам, что и в моем файле .ssh/config . Это также может быть что-то еще, если вы хотите, чтобы ansible создавал их в другом месте. Для простоты использования я поставил один и тот же путь, чтобы Ansible и любой другой инструмент, например Parallel-ssh могли использовать один и тот же ControlMaster .

ЗАМЕТКА

знак control_path = ~/.ssh/controlmasters/%%r@%%h:%%p имеет два знака %% вместо одного.

Затем следующая часть заключается в том, что Ansible по умолчанию установлен на smart в способе передачи файлов. ниже находится блок.

# 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

Вам необходимо иметь sftp Subsystem в файле sshd_config на серверах. В моем случае на нескольких серверах не было этой настройки, и sftp не удалось, что привело к возврату соединения как UNREACHABLE . В соответствии с настройками smart нем говорится, что он попробует sftp, then scp and then pipe в этом порядке, но у меня не работает установка transfer_method = scp|piped работает.

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

Просто обновление для тех, кому интересно.

Все решения здесь оказались для меня неудачными. Единственное, что сработало, - это откат до версии ansible v. 2.1.5.0-1, которая доступна в репо. Тогда все гладко.

Я боролся с этим в течение 2 часов, а затем нашел "-c ssh" для команды run-playbook. Работал как шарм. Это решает некоторые проблемы, которые есть в старых версиях OpenSSH с Ansible.

Привет всем ,
Когда я когда-либо пытался установить открытый сдвиг, я получал следующую ошибку. Я запускаю команду ниже.

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 пинговать все
ip-172-31-10-250.ca-central-1.compute.internal | Недостижимо! => {
"изменено": ложь,
"msg": "Не удалось подключиться к хосту через ssh: Ошибка проверки ключа хоста.rn",
"unreachable": правда

We have verified following steps.

Master communicating to the node

[ rhnuser3 @ ip-172-31-10-250 ~] $ ssh [email protected]
Последний вход: среда, 16 августа, 08:05:16 2017 от мастера
[ rhnuser3 @ node ~] $


Node Communicating to the master

[ rhnuser3 @ ip-172-31-9-57 ~] $ ssh [email protected]
Последний вход: среда, 16 августа, 07:56:06 2017 с узла
[ rhnuser3 @ master ~] $

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

vi /etc/ansible/ansible.cfg


инвентарь = / 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.localdomain localhost4 localhost4.localdomain4

:: 1 localhost localhost.localdomain localhost6 localhost6.localdomain6

172.31.10.250 мастер
172.31.9.57 узел

sudo vi / etc / ssh / sshd_config

ПарольАутентификация да

PermitEmptyPasswords нет

Пароль Аутентификация нет

sudo cat / var / журнал / безопасный


```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

Мастер-сервер я выполнил следующие команды

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

Узловой сервер я выполнил следующую команду.

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

Пожалуйста, попробуйте предложить по ним.
@virtusademo

virtusademo прокомментировал только что

[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)

Я использую ansible на 2.3.1.0. добавил мои хосты в / etc / ansible / hosts. если я это сделаю, появится ошибка --list-hosts ниже
ОШИБКА! поле «хосты» является обязательным, но не задано. Путь к инвентарю ansible.cfg такой же. Кто-нибудь может помочь в этом?

Привет..еврей один из новичков в ансибле, собираюсь использовать его для непрерывной доставки.
я хочу знать, как инвентарь, playbook, модули взаимодействуют внутри.
если кто-нибудь знает это, пожалуйста, напишите мне на

Как решить эту проблему в конце концов?

edit : похоже, что служба SSH на моем удаленном компьютере могла разбиться. Я попытался запустить новый сеанс ssh с помощью PuTTY, и он закрывает соединение до приглашения входа в систему.

edit2 : служба SSH на удаленном компьютере действительно больше не работает правильно, хотя я еще не получил ответа о том, в чем именно заключается ошибка. Поскольку это произошло сразу после запуска этого скрипта Ansible, я оставляю это здесь, как если бы ошибка Ansible вызвала сбой sshd, это все еще может быть связано с этой проблемой. Некоторые детали для тех, кто пытается воссоздать: и целевая, и управляющая машины - это Intel xeon, работающие под управлением CentOS 7. Контрольная версия - centos-release-7-4.1708.e17.centos.x86_64 с целевой установкой графики диафрагмы.


Кажется, у меня внезапно возникла эта проблема под ansible 2.4.1.0 . Все шло нормально, пока я отлаживал новую роль, а потом это внезапно начало происходить.

Это были деформированные задачи, которые не удалось выполнить непосредственно перед тем, как он перестал подключаться:

 - 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 }}"

Выкинули эту ошибку:

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"}

Я скопировал сообщение об ошибке после запуска ansible-playbook -vvvv myplaybook.yml и получил:

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

Не уверен, что с этим делать, так как это работало до сих пор.
И файлы id_rsa на контроллере, и authorized_keys на удаленной машине не изменились, так как я добавил туда открытый ключ неделю назад, а разрешения остались 600.

edit : похоже, что служба SSH на моем удаленном компьютере могла разбиться. Я попытался запустить новый сеанс ssh с помощью PuTTY, и он закрывает соединение до приглашения входа в систему.

Да, я даже ожидаю этой проблемы всякий раз, когда начинаю использовать Ansible на новом Mac. Это печально.

Просто столкнулся с этим, но, похоже, происходит только на моем Mac.

соединение: локальное в playbook устранило мою проблему

Та же ошибка:
фатальный: [1.2.3.4]: НЕДОСТУПНО! => {"changed": false, "msg": "Не удалось подключиться к хосту через ssh: Предупреждение: постоянно добавлено '1.2.3.4' (ECDSA) в список известных хостов. rnPermission denied (publickey) .rn" , "unreachable": true}

SSH работает, но недоступный выдает ошибку о недоступности

@induraj выглядит так, как будто пользователь, с которым у вас работает доступ, не имеет доступа к ключу.
не могли бы вы также поместить вывод ansible --version.
также убедитесь, что вы установили ansible только одним способом (pip или brew)

Спасибо за быстрый ответ:
(ansble) ansible @ sharma : ~ $ pip freeze | grep ansible
ansible == 2.4.2.0

вы работаете через virtualenv, есть ли у него доступ к ключу?

да у них есть доступ:
ll ~ / .ssh / raj_aws.pem
-rw ------- 1 ansible ansible 1692 13 января 23:12 .ssh / raj_aws.pem.
Что-нибудь требуется?

@induraj Я совершенно не уверен, но это могло быть не получение правильных разрешений через virtualenv.

ХОРОШО. даже я пытаюсь то же самое, все еще пытаюсь понять это.

позвольте мне поделиться тем, что у меня есть до сих пор.

  • создал virtualenv
  • установлен ansible с зависимостью.
  • возможность создать экземпляр EC2 с помощью ansible.
  • но столкнулся с проблемой входа в виртуальную машину EC2 с помощью ansible.

Не могли бы вы помочь мне получить доступ к виртуальной машине EC2 через ansible, чтобы я мог продолжить тестирование с помощью ansible.

Я настроил на базовой машине без virtualenv. Возможно, возникла проблема с аутентификацией пользователя.

Если у вашего ssh-агента несколько ключей, используйте переменную ansible_ssh_private_key_file в записи хостов, чтобы указать ваш закрытый ключ, вместо того, чтобы ssh-agent передавал неправильный ключ и был отклонен.

Информация о списке

Привет!

Большое спасибо за ваш интерес к Ansible. Это очень много значит для нас.

Похоже, это вопрос пользователя, и мы хотели бы направлять подобные вещи либо в список рассылки, либо на канал IRC.

Если вы можете зайти туда, мы будем признательны. Это позволяет нам отслеживать ошибки, извлекать запросы, RFE и т.п.

Еще раз спасибо, и мы с нетерпением ждем встречи с вами в списке IRC. Благодаря!

В моем случае основная проблема заключается в том, что управляющий файл не был создан, и в результате у прокси-команды не было соответствующих разрешений.

Команда раскрывается добавлением параметра -vvvvvvv в доступную команду:

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

Если бы я вручную создал маршрут до 10.0.3. * И повторно запустил эту команду без параметра -o 'ProxyCommand=ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -W %h:%p -q [email protected]' . Контрольный файл был создан, потом все заработало.

Я немного поработал с параметрами ForwardAgent на моем хосте и на прокси-хосте, но безрезультатно. В конце концов я просто набрал и выполнил эту команду для каждого отказавшего хоста и позволил взлому разблокировать мою работу.

Я использовал нестандартный закрытый ключ, и его не нашли. Было 600 завивок. ssh-add <path-to-private-key> исправил мою проблему.

Добавление моего ключа с ssh-copy-id на удаленный сервер устранило проблему.

добавление -o ControlMaster=auto -o ControlPersist=30m в аргументы ssh устранило проблему для меня.

  • доступная версия: 2.4.1.0
  • ОС: macos sierra
  • пульты: экземпляры ec2 (centos7, t2.micro)

Больше:

Получение ошибки «UNREACHABLE» посреди ролевых задач. Остановился бы на той же задаче. Но запустился бы, если бы я изолировал только эту задачу (с помощью тегов).

ansible -m ping myServer дал мне ошибку UNREACHABLE! .
ansible -c local -m ping myServer сработало.

РЕДАКТИРОВАТЬ: Чтобы исправить это в моей книге, мне пришлось поставить:

- hosts: dev
  connection: local

У меня была такая же проблема с ansible 2.6.0
мой ssh_args в ansible.cfg

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

Мне удалось подключиться к хостам по SSH вручную
но при запуске ansible-playbook или ansible -m ping возникли проблемы
понижение версии до 2.5.5 решило проблему для меня

У меня такая же проблема, ubuntu 14.04 с ansible 2.6.2 (обновление с ansible 1.9)

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

согласно @kararukeys
Я понижаюсь до 2.5.5, но все равно

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]$ 

какие-либо предложения ? пожалуйста ~

ТИП ПРОБЛЕМЫ
  • Сообщение об ошибке
ДОСТУПНАЯ ВЕРСИЯ
ansible 2.0.0.2
  config file = 
  configured module search path = Default w/o overrides
КОНФИГУРАЦИЯ

Без изменений

ОС / СРЕДА

OS X El Capitan версии 10.11.3

РЕЗЮМЕ

Я могу подключиться к своему Rasberry Pi через ssh через кабель Ethernet через «ssh [email protected] », но запустить Ansible с этим IP-адресом в качестве хоста не удается.

Я успешно настроил этот Rasberry Pi с возможностью доступа через Wi-Fi (с использованием IP-адреса Wi-Fi), но теперь, пытаясь использовать ansible через прямое соединение Ethernet, я получаю загадочное сообщение об ошибке:

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

Поскольку я _ могу_ успешно подключиться к этому пи, используя этот IP-адрес через ssh с терминала, я утверждаю, что это ошибка в Ansible.

ДЕЙСТВИЯ ПО ВОСПРОИЗВЕДЕНИЮ

Я запускаю эту команду, чтобы запустить роль

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

Я тоже пробовал

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

которые приводят к той же ошибке.

файл hosts

[pis]
169.254.0.2

учебник


---

- name: Ansible Playbook for configuring brand new Raspberry Pi

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

Я предполагаю, что роль на самом деле не важна, потому что ansible не работает на этапе подключения ssh.

ОЖИДАЕМЫЕ РЕЗУЛЬТАТЫ

Я ожидаю, что ansible подключится к pi и запустит роль (я успешно сделал это, подключившись по IP-адресу через Wi-Fi)

ФАКТИЧЕСКИЕ РЕЗУЛЬТАТЫ
/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   

В OpenSSH_7.9p1, OpenSSL 1.1.1b, ansible 2.7.8 при столкновении с ошибкой UNREACHABLE с msg содержащим эту аутентификацию ( Authenticated to ), но с упоминанием сломанной pipe ( debug3: mux_client_read_packet: read header failed: Broken pipe ), установка -o ControlMaster=no в ssh_args сработала для меня без использования paramiko или сброса ControlPersist .

Была ли эта страница полезной?
0 / 5 - 0 рейтинги