2016-01-28 2 views
0

Когда я использую постучать от клиента к серверу, анзибль Playbook не работает и не во время аутентификации SSH, даже если я использую SSH ключине knockd работает анзибль PlayBook через SSH

Когда я запускаю тот же сборник пьес вручную он работает но когда я пытаюсь использовать knockd, клиент может подключиться к серверу, работающему с knockd, но ssh не удается выполнить проверку подлинности. У меня есть проверка подлинности открытого ключа установки пароля SSH поэтому не знаю, почему я получаю этот вопрос

[email protected]:~$ sudo knockd -vD 
sudo: unable to resolve host ip-192-168-5-238 
config: new section: 'options' 
config: usesyslog 
config: new section: 'ansible' 
config: ansible: sequence: 9000:tcp,9999:tcp 
config: ansible: seq_timeout: 5 
config: ansible: start_command: ansible-playbook -i hosts default.yml -vvv 
ethernet interface detected 
Local IP: 192.168.5.238 
listening on eth0... 
2016-00-27 20:54:59: tcp: 192.168.5.150:33260 -> 192.168.5.238:9000 74 bytes 
192.168.5.150: ansible: Stage 1 
2016-00-27 20:54:59: tcp: 192.168.5.150:53055 -> 192.168.5.238:9999 74 bytes 
192.168.5.150: ansible: Stage 2 
192.168.5.150: ansible: OPEN SESAME 
ansible: running command: ansible-playbook -i hosts default.yml -vvv 
No config file found; using defaults 
[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. 
1 plays in default.yml 

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

TASK [setup] ******************************************************************* 
<192.168.5.150> ESTABLISH SSH CONNECTION FOR USER: ubuntu 
<192.168.5.150> SSH: EXEC ssh -C -q -o ControlMaster=auto -o ControlPersist=60s -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=ubuntu -o ConnectTimeout=10 -o ControlPath=/home/ubuntu/.ansible/cp/ansible-ssh-%h-%p-%r -tt 192.168.5.150 '(umask 22 && mkdir -p "$(echo $HOME/.ansible/tmp/ansible-tmp-1453928100.08-29024361375363)" && echo "$(echo $HOME/.ansible/tmp/ansible-tmp-1453928100.08-29024361375363)")' 
fatal: [192.168.5.150]: UNREACHABLE! => {"changed": false, "msg": "ERROR! SSH encountered an unknown error during the connection. We recommend you re-run the command using -vvvv, which will enable SSH debugging output to help diagnose the issue", "unreachable": true} 

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

ansible: command returned non-zero status code (3) 

Вот схема игры при запуске вручную

[email protected]:~$ ansible-playbook -i hosts default.yml 
[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. 

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

TASK [setup] ******************************************************************* 
ok: [192.168.5.150] 

TASK [ensure apache is at the latest version] ********************************** 
ok: [192.168.5.150] 

TASK [drop an arbitrary file just so we know something happened] *************** 
changed: [192.168.5.150] 

PLAY RECAP ********************************************************************* 
192.168.5.150    : ok=3 changed=1 unreachable=0 failed=0 

ответ

0

Knockd работает под root (вы начали его с помощью sudo), и когда вы вручную запускаете ansible-playbook, вы делаете это под пользователем ubuntu. Чтобы исправить это, Вы можете использовать Sudo, то есть:

sudo -H -u ansible /bin/bash -c "ansible-playbook -i hosts default.yml"

Это может быть улучшено:

  1. Не используйте статический файл инвентаризации, использовать динамический один, например:

- add_host: name={{ IP }} groups=knockers ansible_user=ubuntu ansible_become=yes ansible_ssh_private_key_file=key_file changed_when: False failed_when: IP is not defined or not (IP | ipaddr) tags: - always

  1. При работе ansible-playbook от knockd p адрес ip to playbook: sudo -H -u ansible /bin/bash -c "ansible-playbook -i hosts default.yml -e IP=%IP%"

Эта конструкция позволяет реализовать архитектуру ведущий-ведомый, используя Ansible (или режим pull другими словами).