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
Привет!
Большое спасибо за отправку в 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>
Что-то изменилось.
Какую информацию я могу предоставить, чтобы помочь отладить это?
Я использую следующее:
+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 устраняет проблему для меня.
У меня была такая же проблема
Я решил это, добавив ключ, используемый для аутентификации, в 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, я полагаю, первое положение. Спасибо за все советы, хотя это немного странно.
файл: 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, тем самым разрешив обе проблемы.
$ 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
@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
172.31.10.250 мастер
172.31.9.57 узел
sudo vi / etc / ssh / sshd_config
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.
ХОРОШО. даже я пытаюсь то же самое, все еще пытаюсь понять это.
позвольте мне поделиться тем, что у меня есть до сих пор.
Не могли бы вы помочь мне получить доступ к виртуальной машине 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 устранило проблему для меня.
Больше:
Получение ошибки «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
.
Самый полезный комментарий
Это случилось внезапно, когда я обновил Ansible.
Для успешного запуска мне пришлось:
Раньше я только бегал
Нормальный SSH со следующим работает без проблем:
Что-то изменилось.
Какую информацию я могу предоставить, чтобы помочь отладить это?
Я использую следующее: