Nano Hash - криптовалюты, майнинг, программирование

Как определить проблему с криптографией при запуске Ansible playbbok?

Попытка запустить простую сборку фактов с использованием Ansible. Я могу без проблем подключиться через SSH, используя учетные данные пользователя, но по какой-то причине я не могу понять, что playbook не работает со следующим сообщением:

2017-10-07 22:57:44,248 ncclient.transport.ssh Unknown exception: cannot import name aead

ОС: Ubuntu (Ubuntu 16.04.3 LTS) Маршрутизатор назначения: Virtualbox JunOS Olive [12.1R1.9] Версия Ansible: 2.4.0.0

хосты:

[all:vars]
ansible_python_interpreter=/usr/bin/python
ansible_connection = local
[junos]
lab.r1

Плейбук:

---
- hosts: junos
  gather_facts: no

  tasks:
  - name: obtain login credentials
    include_vars: ../auth/secrets.yml

  - name: Checking NETCONF connectivity
    wait_for: host={{ inventory_hostname }} port=830 timeout=5

  - name: Gather Facts
    junos_facts:
      host: "{{ inventory_hostname }}"
      username: "{{ creds['username'] }}"
      password: "{{ creds['password'] }}"
    register: junos

  - name: version
    debug: msg="{{ junos.facts.version }}"

Вывод плейбука:

$ ansible-playbook -vvvv junos-get_facts.yml
ansible-playbook 2.4.0.0
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/usr/local/lib/python2.7/dist-packages/ansible/modules']
  ansible python module location = /usr/local/lib/python2.7/dist-packages/ansible
  executable location = /usr/local/bin/ansible-playbook
  python version = 2.7.12 (default, Nov 19 2016, 06:48:10) [GCC 5.4.0 20160609]
Using /etc/ansible/ansible.cfg as config file
setting up inventory plugins
Parsed /etc/ansible/hosts inventory source with ini plugin
Loading callback plugin default of type stdout, v2.0 from /usr/local/lib/python2.7/dist-packages/ansible/plugins/callback/__init__.pyc

PLAYBOOK: junos-get_facts.yml ******************************************************************************************************************
1 plays in junos-get_facts.yml

PLAY [junos] ***********************************************************************************************************************************
META: ran handlers

TASK [obtain login credentials] ****************************************************************************************************************
task path: /usr/local/share/ansible/junos/junos-get_facts.yml:6
Trying secret FileVaultSecret(filename='/usr/local/share/ansible/auth/vault/vault_pass.py') for vault_id=default
ok: [lab.r1] => {
    "ansible_facts": {
        "creds": {
            "password": "*******",
            "username": "ansible"
        }
    },
    "ansible_included_var_files": [
        "/usr/local/share/ansible/junos/../auth/secrets.yml"
    ],
    "changed": false,
    "failed": false
}

TASK [Checking NETCONF connectivity] ***********************************************************************************************************
task path: /usr/local/share/ansible/junos/junos-get_facts.yml:9
Using module file /usr/local/lib/python2.7/dist-packages/ansible/modules/utilities/logic/wait_for.py
<lab.r1> ESTABLISH LOCAL CONNECTION FOR USER: ansible
<lab.r1> EXEC /bin/sh -c '( umask 77 && mkdir -p "` echo $HOME/.ansible/tmp/ansible-tmp-1507431462.1-117888621897412 `" && echo ansible-tmp-1507431462.1-117888621897412="` echo $HOME/.ansible/tmp/ansible-tmp-1507431462.1-117888621897412 `" ) && sleep 0'
<lab.r1> PUT /tmp/tmpW193y0 TO /usr/local/share/ansible/.ansible/tmp/ansible-tmp-1507431462.1-117888621897412/wait_for.py
<lab.r1> EXEC /bin/sh -c 'chmod u+x /usr/local/share/ansible/.ansible/tmp/ansible-tmp-1507431462.1-117888621897412/ /usr/local/share/ansible/.ansible/tmp/ansible-tmp-1507431462.1-117888621897412/wait_for.py && sleep 0'
<lab.r1> EXEC /bin/sh -c '/usr/bin/python /usr/local/share/ansible/.ansible/tmp/ansible-tmp-1507431462.1-117888621897412/wait_for.py; rm -rf "/usr/local/share/ansible/.ansible/tmp/ansible-tmp-1507431462.1-117888621897412/" > /dev/null 2>&1 && sleep 0'
ok: [lab.r1] => {
    "changed": false,
    "elapsed": 0,
    "failed": false,
    "invocation": {
        "module_args": {
            "active_connection_states": [
                "ESTABLISHED",
                "FIN_WAIT1",
                "FIN_WAIT2",
                "SYN_RECV",
                "SYN_SENT",
                "TIME_WAIT"
            ],
            "connect_timeout": 5,
            "delay": 0,
            "exclude_hosts": null,
            "host": "lab.r1",
            "msg": null,
            "path": null,
            "port": 830,
            "search_regex": null,
            "sleep": 1,
            "state": "started",
            "timeout": 5
        }
    },
    "path": null,
    "port": 830,
    "search_regex": null,
    "state": "started"
}

TASK [Gather Facts] ****************************************************************************************************************************
task path: /usr/local/share/ansible/junos/junos-get_facts.yml:12
<lab.r1> using connection plugin netconf
<lab.r1> socket_path: None
fatal: [lab.r1]: FAILED! => {
    "changed": false,
    "failed": true,
    "msg": "unable to open shell. Please see: https://docs.ansible.com/ansible/network_debug_troubleshooting.html#unable-to-open-shell"
}
        to retry, use: --limit @/usr/local/share/ansible/junos/junos-get_facts.retry

PLAY RECAP *************************************************************************************************************************************
lab.r1                     : ok=2    changed=0    unreachable=0    failed=1

Подробный вывод журнала показывает следующее:

2017-10-07 23:19:51,177 p=2906 u=ansible |  TASK [Gather Facts] ****************************************************************************************************************************
2017-10-07 23:19:51,180 p=2906 u=ansible |  task path: /usr/local/share/ansible/junos/junos-get_facts.yml:12
2017-10-07 23:19:52,739 p=2937 u=ansible |  creating new control socket for host lab.r1:830 as user ansible
2017-10-07 23:19:52,740 p=2937 u=ansible |  control socket path is /usr/local/share/ansible/.ansible/pc/b52ae79c72
2017-10-07 23:19:52,740 p=2937 u=ansible |  current working directory is /usr/local/share/ansible/junos
2017-10-07 23:19:52,741 p=2937 u=ansible |  using connection plugin netconf
2017-10-07 23:19:52,937 p=2937 u=ansible |  network_os is set to junos
2017-10-07 23:19:52,951 p=2937 u=ansible |  ssh connection done, stating ncclient
2017-10-07 23:19:52,982 p=2937 u=ansible |  failed to create control socket for host lab.r1
2017-10-07 23:19:52,985 p=2937 u=ansible |  Traceback (most recent call last):
  File "/usr/local/bin/ansible-connection", line 316, in main
    server = Server(socket_path, pc)
  File "/usr/local/bin/ansible-connection", line 112, in __init__
    self.connection._connect()
  File "/usr/local/lib/python2.7/dist-packages/ansible/plugins/connection/netconf.py", line 158, in _connect
    ssh_config=ssh_config
  File "/usr/local/lib/python2.7/dist-packages/ncclient/manager.py", line 154, in connect
    return connect_ssh(*args, **kwds)
  File "/usr/local/lib/python2.7/dist-packages/ncclient/manager.py", line 116, in connect_ssh
    session.load_known_hosts()
  File "/usr/local/lib/python2.7/dist-packages/ncclient/transport/ssh.py", line 299, in load_known_hosts
    self._host_keys.load(filename)
  File "/usr/local/lib/python2.7/dist-packages/paramiko/hostkeys.py", line 97, in load
    e = HostKeyEntry.from_line(line, lineno)
  File "/usr/local/lib/python2.7/dist-packages/paramiko/hostkeys.py", line 358, in from_line
    key = ECDSAKey(data=decodebytes(key), validate_point=False)
  File "/usr/local/lib/python2.7/dist-packages/paramiko/ecdsakey.py", line 156, in __init__
    self.verifying_key = numbers.public_key(backend=default_backend())
  File "/usr/local/lib/python2.7/dist-packages/cryptography/hazmat/backends/__init__.py", line 15, in default_backend
    from cryptography.hazmat.backends.openssl.backend import backend
  File "/usr/local/lib/python2.7/dist-packages/cryptography/hazmat/backends/openssl/__init__.py", line 7, in <module>
    from cryptography.hazmat.backends.openssl.backend import backend
  File "/usr/local/lib/python2.7/dist-packages/cryptography/hazmat/backends/openssl/backend.py", line 23, in <module>
    from cryptography.hazmat.backends.openssl import aead
ImportError: cannot import name aead

2017-10-07 23:20:02,775 p=2906 u=ansible |  fatal: [lab.r1]: FAILED! => {
    "changed": false,
    "failed": true,
    "msg": "unable to open shell. Please see: https://docs.ansible.com/ansible/network_debug_troubleshooting.html#unable-to-open-shell"
}

Любая помощь приветствуется.


  • Какая версия pycrypto у вас установлена? 08.10.2017
  • Спасибо за ваш отзыв! Название: pycrypto Версия: 2.6.1 08.10.2017
  • aead импортируется серверной частью, но также не может быть найден. Похоже, он пытается импортировать две разные версии cryptography. pycrypto здесь не имеет значения (это несвязанный пакет). Сначала я бы предложил обновить cryptography, но, поскольку этот aead был добавлен в 2.0, вам может потребоваться убедиться, что у вас не установлена ​​​​криптография как через pip, так и через диспетчер пакетов вашего дистрибутива. 12.10.2017
  • @ Пол Керер Вот и все. Проблема заключалась в конфликте между pcrypto (pip) и cryptography (pip) (apt). 13.10.2017

Ответы:


1

Ответ был:

Отвечает "Пол Керер"
aead импортируется бэкендом, но также не может быть найден. Похоже, он пытается импортировать две разные версии cryptography. pycrypto здесь не имеет значения (это несвязанный пакет). Сначала я бы предложил обновить cryptography, но, поскольку этот aead был добавлен в 2.0, вам может потребоваться убедиться, что у вас не установлен cryptography как через pip, так и через менеджер пакетов дистрибутива.

Как только я удалил pycrypto и cryptography через pip, playbook заработал, как и ожидалось:

TASK [version] *************************************************************************************************************************************************
task path: /usr/local/share/ansible/junos/junos-get_facts.yml:25
ok: [lab.r1] => {
    "msg": "olive"
}
META: ran handlers
META: ran handlers

PLAY RECAP *****************************************************************************************************************************************************
lab.r1                     : ok=5    changed=0    unreachable=0    failed=0
12.10.2017
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..