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

рд╕рд╛рд░рд╛рдВрд╢

рдореИрдВ "ssh [email protected] " рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдИрдерд░рдиреЗрдЯ рдХреЗрдмрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ ssh рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдкрдиреЗ Rasberry Pi рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдПрдХ рд╣реЛрд╕реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ IP рдкрддреЗ рдХреЗ рд╕рд╛рде Ansible рдЪрд▓ рд░рд╣рд╛ рд╣реИред

рдореИрдВрдиреЗ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЗрд╕ рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рдХреЛ рд╡рд╛рдИрдлрд╝рд╛рдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ (рд╡рд╛рдИрдлрд╛рдИ рдЖрдИрдкреА рдкрддреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдм рдкреНрд░рддреНрдпрдХреНрд╖ рдИрдерд░рдиреЗрдЯ рдХрдиреЗрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдореБрдЭреЗ рдЧреБрдкреНрдд рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ansible рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ:

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

рдХреНрдпреЛрдВрдХрд┐ I _can_ рдЯрд░реНрдорд┐рдирд▓ рд╕реЗ ssh рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрд╕ IP рдкрддреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЗрд╕ pi рд╕реЗ рдХрдиреЗрдХреНрдЯ рд╣реЛрддрд╛ рд╣реИ, рдореИрдВ рдпрд╣ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ 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

рдЬрд┐рд╕рд╕реЗ рдПрдХ рд╣реА рддреНрд░реБрдЯрд┐ рд╣реЛред

рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╣реЛрд╕реНрдЯ рдХрд░рддрд╛ рд╣реИ

[pis]
169.254.0.2

рдкреНрд▓реЗрдмреБрдХ


---

- name: Ansible Playbook for configuring brand new Raspberry Pi

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рднреВрдорд┐рдХрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╣рддреНрд╡рд╣реАрди рд╣реИ рдХреНрдпреЛрдВрдХрд┐ ssh рдХрдиреЗрдХреНрд╢рди рдЪрд░рдг рдореЗрдВ ansible рд╡рд┐рдлрд▓ рд╣реЛ рд░рд╣рд╛ рд╣реИред

рдЕрдкреЗрдХреНрд╖рд┐рдд рдкрд░рд┐рдгрд╛рдо

рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдкреАрдЖрдИ рд╕реЗ рдЬреБрдбрд╝рдиреЗ рдФрд░ рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВ (рдореИрдВ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЖрдИрдкреА рдкрддреЗ рдкрд░ рд╡рд╛рдИрдлрд╛рдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдХреЗ рдРрд╕рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ)

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдгрд╛рдо
/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-playbook --limit grunndata playbook.yml -c paramiko -u deploy

рдкрд╣рд▓реЗ рдореИрдВ рдХреЗрд╡рд▓ рдЪрд▓рд╛ рд╣реИ

ansible-playbook --limit grunndata playbook.yml

рд╕рд╛рдорд╛рдиреНрдп рдПрд╕рдПрд╕рдПрдЪ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореБрджреНрджреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

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

рдХреБрдЫ рдмрджрд▓ рдЧрдпрд╛ рд╣реИред

рдореИрдВ рдЗрд╕реЗ рдбреАрдмрдЧ рдХрд░рдиреЗ рдореЗрдВ рдХреМрди рд╕реА рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?

рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реВрдВ:

  • рдЙрдмрдВрдЯреВ 16.04
  • рдкрд╛рдЗрдк рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрдиреЗ рдпреЛрдЧреНрдп 2.1.0.0

рд╕рднреА 93 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдирдорд╕реНрддреЗ!

рдЖрдкрдХреА рдорджрдж рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред рдпрд╣ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИред

рдЗрд╕ рдЕрдиреБрд░реЛрдз рдХреЛ рдХрддрд╛рд░рдмрджреНрдз рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреБрдЫ рдкреНрд░рд╢реНрди рд╣реИрдВ рдЬрд┐рдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдо рдЬрд╛рдирдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред рдпрджрд┐ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЗрд╕рдХреА рдмрд╣реБрдд рд╕рд░рд╛рд╣рдирд╛ рдХрд░реЗрдВрдЧреЗ:

  • рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдХрд┐рд╕реА рдХрд╛рд░реНрдп рд╕реЗ рдЕрдзрд┐рдХ рдХреНрд░рд┐рдпрд╛ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрдереНрдп рдПрдХрддреНрд░реАрдХрд░рдг рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИ?
  • рддрдереНрдп рдПрдХрддреНрд░ рдХрд░рдиреЗ рдореЗрдВ рдЕрдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде, рдХреНрдпрд╛ рдЖрдкрдиреЗ рдХрдЪреНрдЪреЗ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рд╣реИ?

рдмрд╕ рдЪреАрдЬреЛрдВ рдХреЗ рддреНрд╡рд░рд┐рдд рдЕрдиреБрд╕реНрдорд╛рд░рдХ рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡реНрдпрд╕реНрдд рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 800 рд╕реЗ рдЕрдзрд┐рдХ рдпреЛрдЧрджрд╛рдирдХрд░реНрддрд╛ рд╣реИрдВ рдФрд░ рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рдХрддрд╛рд░ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрдВ
рд╣рдо рдкреА 1 (рдЙрдЪреНрдЪрддрдо) рдФрд░ рдкреА 5 рдХреЗ рдмреАрдЪ рдЪреАрдЬреЛрдВ рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрддреЗ рд╣реИрдВред рд╣рдо рдЖрдкрдХреЗ рд╕рдордп рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж рджреЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ!
рд╣рдо рдЪреАрдЬреЛрдВ рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреНрд░рдо рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рдмрд╕ рдЖрдк рдХрддрд╛рд░ рд╕реЗ рдЕрд╡рдЧрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ рдФрд░ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдЖрдкрдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рднреВрд▓реЗ рд╣реИрдВ!

рдЗрд╕ рдЯрд┐рдХрдЯ рдХреЛ рдкрдврд╝рддреЗ рд╕рдордп рд╣рдо рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдЬрд░реВрд░ рджреЗрдЦреЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рддреБрд░рдВрдд рдЬрд╡рд╛рдм рдирд╣реАрдВ рджреЗ рдкрд╛рдПрдВрдЧреЗред рдЖрдк рд╣рдорд╛рд░реА рджреЛ рдореЗрд▓рд┐рдВрдЧ рд╕реВрдЪрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВ
рдЬреЛ рдмрд╣реБрдд рд╕рдХреНрд░рд┐рдп рд╣реИрдВ:

рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рдзрдиреНрдпрд╡рд╛рдж рдФрд░ рдЖрдкрдХреА рд░реБрдЪрд┐ Ansible рдореЗрдВ!

@ рдореЗрдлрд╝реНрд▓реЛрд╡рд░ : рдореИрдВ рдЕрдкрдиреА рдЗрдиреНрд╡реЗрдВрдЯреНрд░реА рдореЗрдВ ansible_password рдкреНрд░рджрд╛рди рдХрд░рдХреЗ рдЗрд╕реЗ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛

ansible_password рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рднреА рдХрд╛рдо рдХрд┐рдпрд╛

[testServer]
192.168.33.10

[testServer:vars]
ansible_password=vagrant

рдЬрдм рдореИрдВрдиреЗ рдЕрдВрд╕рд┐рдмрд▓ рдХреЛ рдЕрдкрдЧреНрд░реЗрдб рдХрд┐рдпрд╛ рддреЛ рдпрд╣ рдЕрдЪрд╛рдирдХ рдЦреБрд╢ рд╣реЛ рдЧрдпрд╛ред

рдореБрдЭреЗ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП:

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

рдкрд╣рд▓реЗ рдореИрдВ рдХреЗрд╡рд▓ рдЪрд▓рд╛ рд╣реИ

ansible-playbook --limit grunndata playbook.yml

рд╕рд╛рдорд╛рдиреНрдп рдПрд╕рдПрд╕рдПрдЪ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореБрджреНрджреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

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

рдХреБрдЫ рдмрджрд▓ рдЧрдпрд╛ рд╣реИред

рдореИрдВ рдЗрд╕реЗ рдбреАрдмрдЧ рдХрд░рдиреЗ рдореЗрдВ рдХреМрди рд╕реА рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?

рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реВрдВ:

  • рдЙрдмрдВрдЯреВ 16.04
  • рдкрд╛рдЗрдк рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрдиреЗ рдпреЛрдЧреНрдп 2.1.0.0

+1

5-рдореЗрдЬрдмрд╛рди рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдЕрд╕рдлрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП -рд╕реА рдкрд░рдорд┐рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЬрд░реВрд░рдд рдереА, рдФрд░ рдореИрдВ рдЙрди рд╕рднреА рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреВрд░рд╛ рдХрд░ рд╕рдХрддрд╛ рдерд╛ред

рдореЗрд░реЗ рд▓рд┐рдП, рдореЗрд░реЗ рдкрд╛рд╕ рджреВрд░рд╕реНрде рд╣реЛрд╕реНрдЯрдирд╛рдо рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП .ssh / config рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдереАред

Host servername  
    User username

рдореИрдВ ssh servername рд╕рд╛рде рд╕рд░реНрд╡рд░ рдкрд░ рд╕реАрдзреЗ SSH рдХрд░ рд╕рдХрддрд╛ рдерд╛

рд╣рд╛рд▓рд╛рдБрдХрд┐, Ansible рдХреЗ рд╕рд╛рде, рдореБрдЭреЗ -u рдХрдорд╛рдВрдб рдореЗрдВ

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

рдЙрд╕рдХреЗ рдмрд╛рдж, рдареАрдХ рдкрд░рд┐рдирд┐рдпреЛрдЬрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдереЛрдбрд╝рд╛ рдЕрдЬреАрдм рдпрд╣ рдкрд╣рд▓реЗ рдХреЗ рд░реВрдк рдореЗрдВ .ssh / config рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рд╕рдорд╛рдзрд╛рди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдзрдиреНрдпрд╡рд╛рдж :)

рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд▓рд┐рдП @mhowler рдмрдВрдж рдХрд░рдиреЗ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдпрд╛ рдЗрд╕реЗ рдЖрдкрдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдореЗрдВ рд╕рдордп рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рд╣реИред
рдмреЙрдЯ рдорджрдж рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ

рдпрд╣реА рдХрд╛рд░рдг рд╣реИ? рдореИрдВ рдмрд╣реБрдд рдЦреБрд╢ рдерд╛, рдЕрдм рдореБрдЭреЗ рдкрд┐рдВрдЧ рдХрд░рдирд╛ рд╣реИ-рдореБрдЭреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ -c paramiko рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ

@roolo рдореИрдВрдиреЗ 'ansible_password' рднреА рд╕реЗрдЯ рдХрд┐рдпрд╛ рдФрд░ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рд▓рдЧрд╛ред рд╡рд╣ рдХрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣реИ? рдЖрдк рдЗрд╕реЗ рд╕рдЪрдореБрдЪ рдореЗрдВ рдХреБрдЫ рднреА рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдЕрдм рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

Ansible 2.1.2.0 рдФрд░ --рд╕реНрдХ-рдкрд╛рд╕ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рдореБрджреНрджрд╛ред
OS X 10.11.6

ohallors рдлрд┐рдХреНрд╕ рдиреЗ рдорджрдж рдирд╣реАрдВ рдХреАред

рдореИрдВ рдХреБрдЫ рд╣рдлреНрддреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдХрдВрдкреНрдпреВрдЯрд░ рд╕реЗ рджреВрд░ рд╣реВрдВред Pls рдореБрдЭреЗ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдкрд┐рдВрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж
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 рд╕реНрдорд╛рд░реНрдЯ рдЯреВрдЯ рдЧрдпрд╛ рд╣реИ ред

рдпрджрд┐ рдпрд╣ рдХрд┐рд╕реА рдХреА рдорджрдж рдХрд░рддрд╛ рд╣реИ, рддреЛ рдореИрдВрдиреЗ рдЕрдкрдиреА рдореЗрдЬрдмрд╛рдиреЛрдВ рдХреА рдлрд╛рдЗрд▓ рдореЗрдВ рдЗрд╕ рд▓рд╛рдЗрди рдХреЛ рдмрджрд▓рдХрд░ Ubuntu 16.04 рдкрд░ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд░ рджрд┐рдпрд╛ ...

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 @" рдЬреЛрдбрд╝ рджрд┐рдпрд╛ рдерд╛ред рдореИрдВрдиреЗ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдпрд╣ рдХрд╛рдо рдХрд┐рдпрд╛ рдерд╛ред

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╣реА рдореБрджреНрджрд╛ рдерд╛ рдФрд░ рдкрд╣рд▓реЗ рдореЗрдЬрдмрд╛рди рдХреЛ рдкрд┐рдВрдЧ рдХрд░рдиреЗ рд╕реЗ рдХрд┐рд╕реА рддрд░рд╣ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИред

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

UPD: рдореБрдЭреЗ рдкреНрд▓реЗрдмреБрдХ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд▓рдЧрднрдЧ рд╣рд░ рдмрд╛рд░ рдкрд┐рдВрдЧ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдирд╛ рд╣реЛрдЧрд╛ред рдЬреИрд╕реЗ рдХрд┐ рдХреБрдЫ рдорд┐рдирдЯ рдХреА рдирд┐рд╖реНрдХреНрд░рд┐рдпрддрд╛ рдХреЗ рдмрд╛рдж рдкреНрд▓реЗрдмреБрдХ рдлрд┐рд░ рд╕реЗ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИред

@ cue232s рдпрд╣ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ Ansible ssh рдХрдиреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдХрд┐рд╕ рдкрд╛рд╕рд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

http://docs.ansible.com/ansible/intro_inventory.html#list -of- рд╡реНрдпрд╡рд╣рд╛рд░-рд╕реВрдЪреА-рдкреИрд░рд╛рдореАрдЯрд░ (рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреИрд░рд╛рдореАрдЯрд░ рдЕрдм _ansible_ssh_pass_ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ)

рдореИрдВрдиреЗ рдореИрдХ рдУрдПрд╕ рдПрдХреНрд╕ рдкрд░ рдПрдХ рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛ рдХреЛ 2.1.2.0 рдХреЗ рд╕рд╛рде рд╣рд▓ рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рдХрд┐ рдЗрд╕реЗ рдФрд░ рдХрд╣рд╛рдВ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПред рдореИрдВ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП ssh рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореЗрд░реА рдкреНрд▓реЗрдмреБрдХ рдЪрд▓рд╛рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк:

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 рд╕рд╛рде рдХрд╛рдо рдХрд┐рдпрд╛ред

рдореИрдВрдиреЗ рез.реп.рек рдХреЛ ( 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 рднреА рд╕рдлрд▓ рд╣реЛрдВрдЧреЗред

рдореИрдВ macs Sierra 10.12.1 рдкрд░ Homebrew рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдкрд┐рдд ansible-2.1.2.0 рдкрд░ рд╕рдорд╕реНрдпрд╛ рдЖ рд░рд╣рд╛ рд╣реИ

2.1.1.0 рдкрд░ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред

рдореЗрд░реА рднреА рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рдереА

  • ansible: 2.1.2.0
  • рдлреЗрдбреЛрд░рд╛ 24 рдкреНрд░рдмрдВрдзрди рдмреЙрдХреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ
  • CentOS 7 рдкреНрд░рдмрдВрдзрд┐рдд рдмреЙрдХреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ

рдореИрдВрдиреЗ ssh-Agent рдХреЗ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдХреБрдВрдЬреА рдЬреЛрдбрд╝рдХрд░ рдЗрд╕реЗ рд╣рд▓ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИред рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреА рдЧрдИ рдХреБрдВрдЬреА рдкрд╛рд╕рд╡рд░реНрдб рдХреЗ рдмрд┐рдирд╛ рдереАред

рдПрдХ рд╣реА рдореБрджреНрджрд╛ рд░рд╣рд╛ред рдорд╛рдирдХ рдУрдкрдирдПрд╕рдПрд╕рдПрдЪ рдкреНрд░рдпрд╛рд╕ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдкреИрд░рд╛рдорд┐рдХреЛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рджреВрд░рд╕реНрде VMs рдХрд╛ рдкреНрд░рд╛рд╡рдзрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Windows рдкрд░ Vagrant / Virtualbox рдХреЗ рдЕрдВрджрд░ Ansible рдЪрд▓ рд░рд╣рд╛ рд╣реИред рджреЛрдиреЛрдВ рдорд╢реАрдиреЗрдВ Ubuntu 16.04 рдЪрд▓рд╛ рд░рд╣реА рд╣реИрдВред Ansible рд╕рдВрд╕реНрдХрд░рдг 2.1.2.0 Ansible рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ /ansible/ansible.cfg рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИред

рдореЗрдЬрдмрд╛рди рд▓рд╛рдЗрди:

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 рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде, рдФрд░ рдореЗрд░реЗ рд▓рд┐рдП рднреА рдирд┐рд░реНрдзрд╛рд░рд┐рдд 2.2.0.0 рдХреЗ рдЕрдкрдЧреНрд░реЗрдб!

рдореИрдВ рдЕрдкрдиреЗ рд╣реЛрд╕реНрдЯ рдХреЛ рд░реВрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдХрдиреЗрдХреНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЕрдкрдиреЗ ansible рдХреЛ рдирд╣реАрдВ рдЪрд▓рд╛ рд╕рдХрддрд╛

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

рдореИрдВрдиреЗ рдХреНрд░рд┐рдпрд╛ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА

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

рдФрд░ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ (рдкреИрд░рд╛рдореАрдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдмрд┐рдирд╛) рдХреЗ рд╕рд╛рде

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

600 рддрдХ ssh рдХреБрдВрдЬреА рдЕрдиреБрдорддрд┐рдпрд╛рдБ рд╕реАрдорд┐рдд рдХрд░рдХреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ред

рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реЛрдиреЗ:
ansible 2.1.2.0
рдЙрдмрдВрдЯреВ 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 рд╕реВрдЪреА.ini shsh.yml --key-file ssh / рддреИрдирд╛рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ
рдпрд╣ ssh рдХреБрдВрдЬреА рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ?

@ jimi-c рдпрд╣ рдореБрджреНрджрд╛ рдлрд┐рд░ рд╕реЗ рдХреНрдпреЛрдВ рдмрдВрдж рд╣реЛ рдЧрдпрд╛ рд╣реИ?

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рдХрдореА рдХреЗ рдХрд╛рд░рдг рд╣рдорд╛рд░реЗ рдмреЙрдЯ рджреНрд╡рд╛рд░рд╛ рдореБрджреНрджрд╛ рдСрдЯреЛ-рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЙрдкрд░реЛрдХреНрдд рдХрдИ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдпрд╣ SSH рдХреБрдВрдЬреА рдкрд░ рдЕрдиреБрдорддрд┐рдпреЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд (рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХрдо рд╕реЗ рдХрдо) рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ (рдЬреЛ рдХрд┐ рдирд┐рдЬреА рдХреБрдВрдЬреА рдХреЗ рд▓рд┐рдП рд╣рдореЗрд╢рд╛ 0600 рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП)ред

рд╡рд░реНрддрдорд╛рди рдореЗрдВ 2.1.2.0 рдЕрдВрдХ рдкрд░ рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрдорддрд┐рдпрд╛рдБ рд╕рдорд╕реНрдпрд╛ рдкреНрд░рддреАрдд рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ
рдореИрдВ рдЙрд╕ рдПрдХреНрд╕реЗ 2 рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП DNS рдирд╛рдо рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реВрдВ, рдЬреЛ рдореИрдВ рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдлреЙрд░реНрдо рдореЗрдВ рд╡рд╛рдкрд╕ рдЖрддрд╛ рд╣реИ: ec2 - # {ip_address} .ap-southeast-2.compute.amodaws.com

рдЙрд╕ рдкрд░рд┐рдгрд╛рдо рдореЗрдВ рддреНрд░реБрдЯрд┐:

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

рд╣рд╛рд▓рд╛рдБрдХрд┐ рдЕрдЧрд░ рдореИрдВ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП IP рдкрддреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдпрд╣ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдЪрд▓рддрд╛ рд╣реИ ... рдЗрд╕рд▓рд┐рдП @marcstreeter рдХреЛ рдЙрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд╣реБрдд рдХрд░реАрдм рд▓рдЧрддрд╛ рд╣реИ

bot_skip

рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕ рдорд╛рдорд▓реЗ рдХрд╛ рдЕрдиреБрднрд╡ рд╣реИ, рдПрдХ рд▓рдХреНрд╖реНрдп рд╣реЛрд╕реНрдЯ рдЪрд▓рд╛рдиреЗ рд╡рд╛рд▓реЗ CentOS рдХреЗ рд╕рд╛рде 2.0.2.0 рдЪрд▓ рд░рд╣рд╛ рд╣реИред

рдореЗрд░реЗ рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ, рдореЗрд░реЗ рдкрд╛рд╕ hosts рдпреБрдХреНрдд рд╡рд┐рд╡рд░рдг рд╣реИрдВ рдЬреИрд╕реЗ ansible_host ansible_user рдФрд░ ansible_ssh_pass
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд░реНрдгреЛрдВ рдХрд╛ рдкрд╛рд░реНрд╕рд┐рдВрдЧ "#" рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ (рдЕрд░реНрдерд╛рдд 3 рд╕рд░реНрд╡рд░ рдореЗрдВ "#" рдкрд╛рд╕рд╡рд░реНрдб рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЙрди 3 рд╣реЛрд╕реНрдЯ рдиреЗ рддреНрд░реБрдЯрд┐ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдерд╛)ред

рдкреНрд▓реЗрдмреБрдХ рдЪрд▓рд╛рдиреЗ рд╕реЗ рдореБрдЭреЗ рдПрдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ:

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

рдореЗрд░реЗ рдкрд╛рд╕рд╡рд░реНрдб рдХреЛ рдмрджрд▓рдиреЗ рд╕реЗ "#" рдХреА рдЬрдЧрд╣ рдПрдХ рдЕрд▓рдЧ рд╡рд┐рд╢реЗрд╖ рдЪрд░рд┐рддреНрд░ рдЬреИрд╕реЗ "%" рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдЕрдм, рдкреНрд▓реЗрдмреБрдХ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕рднреА рдорд╢реАрди рдкрд░ рдЪрд▓рддреА рд╣реИред

@ upbeta01 рдЬреЛ рдХрд┐ рдПрдХ рдкреБрд░рд╛рдирд╛ рдмрдЧ рдерд╛, рдФрд░ рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рд╣рдордиреЗ рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ рд╣реА рдЗрд╕реЗ рдареАрдХ рдХрд░ рд▓рд┐рдпрд╛ рдерд╛ред рдХрд┐рд╕реА рдЯрд┐рдкреНрдкрдгреА рдХреА рд╢реБрд░реБрдЖрдд рдорд╛рдиреЗ рдЬрд╛рдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ # рднрд╛рдЧрдирд╛ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИ

@ Jimi-c рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдореИрдВ рдЕрдкрдиреЗ рдирд╡реАрдирддрдо рд╕реЗ рд╕реНрдерд┐рд░ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдЕрдЧрд░ 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 рд╕рднреА -s --ask-sudo-pass -m raw -a "fdisk -l"

@tyronzerafa рдФрд░ рдЦреБрдж рдКрдкрд░ рдХреЗ рд╕рдорд╛рди рдореБрджреНрджреЛрдВ рдХреЛ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВред рд╣рдорд╛рд░рд╛ рдкрд░реНрдпрд╛рд╡рд░рдг рд╣реИ:

OS:
`` `$ рдмрд┐рд▓реНрд▓реА / рдЖрджрд┐ / рд░рд┐рд╣рд╛рдЯ-рд░рд┐рд▓реАрдЬрд╝
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

рдЕрд╕рдлрд▓ рдкрд┐рдВрдЧ:
`` $ рдЕрдирд╕рд┐рдлрд╝рд┐рдХ tcfriv -m рдкрд┐рдВрдЧ
server3 | рдЕрдиреБрдкрдпреЛрдЧреА! => {
"рдкрд░рд┐рд╡рд░реНрддрд┐рдд": рдЕрд╕рддреНрдп,
"рд╕рдВрджреЗрд╢": "ssh рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛрд╕реНрдЯ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓:",
"рдЕрдЧрдореНрдп": рд╕рдЪ
}
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"
}

рдореЗрдЬрдмрд╛рдиреЛрдВ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдФрд░ рдХрд┐рд╕реА рднреА рдкреНрд▓реЗрдмреБрдХ рдпрд╛ рдХрдорд╛рдВрдб рдкрд░ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдЯреНрд░рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ, рдкреИрд░рд╛рдореАрдХреЛ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ (рд╕реНрдорд╛рд░реНрдЯ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдкрд░ рд╡рд┐рдлрд▓ рд╣реЛрддрд╛ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ 100% рд╕рдлрд▓рддрд╛ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдХрднреА рдирд╣реАрдВ)ред

рдпрджрд┐ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдЕрд▓рдЧ рд╣реИ рддреЛ рд╣рдореЗрдВ рдмрддрд╛рдПрдВ рдФрд░ рд╣рдо рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджрд╛ рдЦреЛрд▓реЗрдВрдЧреЗ

UNREACHABLE рд╡рд╛рд▓реЛрдВ рдХреЛ рджреЗрдЦреЗрдВ, рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдЪрд▓ рд░рд╣рд╛ рд╣реИред

рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕рд░реНрд╡рд░ рдХреЗ -k рдлреНрд▓реИрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдХреАрдлрд╝рд╛рдЗрд▓ рд╕реЗрдЯ рдирд╣реАрдВ рд╣реИ

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

рдореИрдВрдиреЗ ansible-playbook рджреНрд╡рд╛рд░рд╛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдкреВрд░реНрдг ssh рдХрдорд╛рдВрдб рдХреЛ "-vvv" рдХреЛ рдЗрд╕рдХреЗ рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рдореЗрдВ рдЬреЛрдбрд╝ рджрд┐рдпрд╛, рдФрд░ рдЗрд╕реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЪрд▓рд╛рдпрд╛ред рдЗрд╕рдиреЗ рдЗрд╕реЗ рдЕрдВрдд рдореЗрдВ рдЫрд╛рдкрд╛:

unix_listener: "/home/saurav/.ansible/cp/ansible-ssh-very-long-aws-ec2-hostname-deploy.XXYY" рдпреВрдирд┐рдХреНрд╕ рдбреЛрдореЗрди рд╕реЙрдХреЗрдЯ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд▓рдВрдмрд╛ рд╣реИ

рдореЗрдЬрдмрд╛рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЕрдкрдиреЗ рдЖрдИрдкреА рдХреЗ рд╕рд╛рде EC2 рд╣реЛрд╕реНрдЯрдирд╛рдо рдХреЛ рдмрджрд▓рдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рдЗрд╕реЗ рддрдп рдХрд┐рдпрд╛ред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ ansible ~/.ssh/config рд╕рдореНрдорд╛рди рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ:

Host raspberrypi.local
StrictHostKeyChecking no

рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╢реЗрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реЙрдЧ рдЗрди рдХрд░ рд╕рдХрддрд╛ рдерд╛ рд▓реЗрдХрд┐рди рдПрдВрд╕рд┐рдмрд▓ рд╡рд┐рдлрд▓ рд░рд╣рд╛ред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рддрдп:

ssh-keygen -R raspberrypi.local

рдореБрдЭреЗ рдЖрдЦрд┐рд░рдХрд╛рд░ рдореЗрд░рд╛ рдХрд╛рдо рдорд┐рд▓ рдЧрдпрд╛, рдпрд╣ рд░реВрдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде рд╣реИ, рдкрд╣рд▓рд╛ рдкреНрд░рд╛рд╡рдзрд╛рди рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИред рд╕рднреА рдпреБрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рднрд▓реЗ рд╣реА рдпрд╣ рдереЛрдбрд╝рд╛ рдЕрдЬреАрдм рд╣реЛред

  • рд╣реЛрд╕реНрдЯ: рдЙрдмрдВрдЯреВ 16.04.2 рдПрд▓рдЯреАрдПрд╕
  • рд╕рд░реНрд╡рд░: Ubuntu 16.04.2 LTS
  • Ansible рд╕рдВрд╕реНрдХрд░рдг: 2.2.1.0 Ansible
  • Python2.7 рдпрд╛ Python3.5 рдХреЗ рд╕рд╛рде Paramiko рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдлрд╝рд╛рдЗрд▓: рд╣реЛрд╕реНрдЯ

[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 - рдореИрдВрдиреЗ рдЧреИрд░-рд░реВрдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╛ SSH рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рдпрд╛рд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдбрд┐рдЬрд┐рдЯрд▓ рдорд╣рд╛рд╕рд╛рдЧрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдЖрдкрдХреЛ рдорд╢реАрди рдХреЛ рдмреВрдЯ рдХрд░рдиреЗ рдкрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рддрд╛ рд╣реИред

@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 config, -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 рдХреВрд▓, рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ asible рдЕрдЬрдЧрд░ рдкреИрдХреЗрдЬ sys.path рдкрд░ рдирд╣реАрдВ рд╣реИред (рдЕрд░реНрдерд╛рдд, ~ / рдирд┐рдЬреА / рдХрд╛рдо / 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

рдпрд╣ PYTHONPATH рдореЗрдВ ~ / рдирд┐рдЬреА / рдХрд╛рдо / infra / 2.3 / ansible-2.3.0.0 / lib / ansible рдЬреЛрдбрд╝ рджреЗрдЧрд╛ рдФрд░ ~ / рдирд┐рдЬреА / рдХрд╛рдо / infra / 2.3 / ansible-2.3.0.0 рдХреЛ ANSIBLE_HOME рд╕реЗрдЯ рдХрд░реЗрдЧрд╛ рдЬреЛ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ virtualenv рдореЗрдВ рдЯрд╛рд░рдмреЙрд▓ рдХрд╛ рдПрдХ рдкрд╛рдЗрдк рдЗрдВрд╕реНрдЯрд╛рд▓ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдирд╣реАрдВ рд╣реБрдЖ рд╣реИред

рдореЗрд░реЗ рдкрд╛рд╕ рдЕрднреА рднреА рдпрд╣ рдореБрджреНрджрд╛ рд╣реИ, рдЕрдЧрд░ рдЖрдкрдХреЛ рдЬрд╝рд░реВрд░рдд рд╣реИ рддреЛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИред

рдЙрдмреБрдиреНрдЯреБ 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

рд╕рдВрдмрдВрдзрд┐рдд рдиреЛрдЯ рдкрд░, рдореИрдХ рд╣реЛрд╕реНрдЯ рдкрд░ рдЪрд▓рдиреЗ рдкрд░ рдЗрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛:

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

рдореБрдЭреЗ рднреА рд╡рд╣ рд╕рдорд╕реНрдпрд╛ рдереА рдФрд░ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдореЗрд░рд╛ sftp рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдирд╣реАрдВ рд╣реБрдЖ рдерд╛ред / etc / ssh / sshd_config рдХреЛ рдмрджрд▓рдХрд░ sshd рд╕рд░реНрд╡рд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ рдФрд░ ssh рд╕рд░реНрд╡рд░ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░реЗрдВред рд╕рдорд╕реНрдпрд╛ рдЪрд▓реА рдЧрдИ рд╣реИред

рдореИрдХ рд╣реЛрд╕реНрдЯ рд╕реЗ рдЪрд▓рдиреЗ рдкрд░, @ttrahan рдХрд╛ ansible.cfg рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рд░рдЧрд░ рдирд╣реАрдВ рд░рд╣рд╛ред рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдкреНрд▓реЗрдмреБрдХ рд╣реИ рдЬреЛ рдХрдИ рдмреЙрдХреНрд╕ рд╕реЗ рдЬреБрдбрд╝ рд░рд╣рд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ Ubuntu 14.04 рдпрд╛ 12.04 рдЪрд▓ рд░рд╣реЗ рд╣реИрдВред рдЙрдмрдВрдЯреВ рдХреЗ рд╕рднреА рдмреЙрдХреНрд╕ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред 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/   

рдХреНрдпрд╛ рдореБрдЭреЗ рдЯрд╛рд░ рдлрд╛рдЗрд▓ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдЗрд╕рдореЗрдВ рдирдИ рдлрд╛рдЗрд▓реЗрдВ рдорд┐рд▓реА рд╣реИрдВ?

рд╣рд╛рдп, рдХреНрдпрд╛ рдХреЛрдИ рдореЗрд░реА рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ? рдореИрдВ рдЕрдкрдиреЗ VM (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

рд╣реЛрд╕реНрдЯ рдлрд╝рд╛рдЗрд▓:

[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

рдирдорд╕реНрддреЗ,

рдЙрдмрдВрдЯреВ 16.04 рдореЗрдВ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ 2.3.0.0 рдХреЗ рд╕рд╛рде рдореЗрд░реА рд╡рд╣реА 'рдЕрдЧрдореНрдп рддреНрд░реБрдЯрд┐' рдереАред
рд▓рд╛рдЧреВ -рд╕реА paramiko

рдЙрджрд╛рд╣рд░рдг: $ ansible-playbook -i рдЗрдиреНрд╡реЗрдВрдЯрд░реАред

рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдлрд┐рд░ рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдорд┐рд▓рд╛ - рдХреЛрдИ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рддрд░реАрдХреЗ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИрдВ,

рдЙрд╕ рдирдИ рддреНрд░реБрдЯрд┐ рдХреЛ рд╕реНрд╡рдпрдВ рдХреЛ рд╣рд▓ рдХрд░рддреЗ рд╕рдордп 'рдХрдиреЗрдХреНрд╢рди: рд▓реЛрдХрд▓' рдХреЛ YAML рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рджреЛрдиреЛрдВ рдореБрджреНрджреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рднреА, рдХрд╛рдо рдХреЛ рдЬрд╛рд░реА рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред

  • рддрдп рдХрд░рдиреЗ рдХрд╛ рд╕рдВрджрд░реНрдн рдпрд╣рд╛рдВ рд╣реИ: [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 рдЖрдкрдХреЗ рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред
рдмрд╣реБрдд рд╕рд╛рд░реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рджреЛ рджрд┐рди рдкрд╣рд▓реЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдпрд╣ рдлрд┐рдХреНрд╕ 'рдХрдиреЗрдХреНрд╢рди = рд╕реНрдерд╛рдиреАрдп' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИред
рд▓реЗрдХрд┐рди, рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ IOS рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╢реЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдпреЛрдЧреНрдп рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИред рд╣рдореЗрдВ рдХрдорд╛рдВрдбрд░ рдореЗрдЬрдмрд╛рдиреЛрдВ рдкрд░ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИред рдХрд┐рд╕реА рднреА рд╡рд┐рдЪрд╛рд░, рдХреГрдкрдпрд╛?

@ b2sweety рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рд╡рд╛рд▓ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдЬрд╡рд╛рдм рдирд╣реАрдВ рдкрддрд╛ рд╣реИред

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд▓рд┐рдП Ansible рдмрд╣реБрдд рдирдпрд╛ рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореИрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдПрдХ рджрд┐рди рдХреЗ рд▓рд┐рдП рдЦреЗрд▓ рд░рд╣рд╛ рд╣реВрдВред
рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рд╕рд┐рд╕реНрдХреЛ (IOS) CLI UNIX (POSIX) CLI рдЬреИрд╕рд╛ рдХреБрдЫ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╢рд╛рдпрдж рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдореИрдВ рдЗрд╕ рд╕рд╡рд╛рд▓ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рджреВрд╕рд░реЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджреВрдБрдЧрд╛ред

рд╣реЗрд▓реЛ рдЕрдиреНрд╕рд┐рдмрд▓ рдЯреАрдо,
рдореИрдВрдиреЗ Rhel 7x рдорд╢реАрдиреЛрдВ рдкрд░ Ansible рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рд╣реИред рдореИрдВрдиреЗ 2 рдорд╢реАрди рдХреЗ рд░реВрдк рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рд▓рд┐рдпрд╛ред 1 - рдирд┐рдпрдВрддреНрд░рдг рд╕рд░реНрд╡рд░ рдФрд░ рдиреЛрдб 1.I рдиреЗ SSH рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдИ рдФрд░ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдкрд╛рд╕рд╡рд░реНрдб рдХреЛ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рд▓реЙрдЧрд┐рди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдоред
рдЬрдмрдХрд┐ "рдкрд┐рдВрдЧ: рдЪреЗрдХ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ, рдЗрдирд╕рд┐рдЯреЛрд░реА рдлрд╝рд╛рдЗрд▓ рдкрд░ рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ / рд▓реЛрдХрд▓ рдХрдВрдЯреНрд░реЛрд▓ рд╕рд░реНрд╡рд░ рдЖрдИрдкреА рдПрдбреНрд░реЗрд╕ рдХреЗ рд▓рд┐рдП рддреНрд░реБрдЯрд┐ рд╣реЛ рд░рд╣реА рд╣реИред

  • рд░рд┐рдореЛрдЯ рдиреЛрдб рдкрд░ рдкрд┐рдВрдЧ рд╕реБрдЪреЗрд╕ рд▓реЗрдХрд┐рди рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ рдкрд░ рдЕрди-рд░реАрдЪреЗрдмрд▓
[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] "

рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ 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

рдЪрд▓рд╛рдиреЗ рдХреЗ рдЖрджреЗрд╢:

ansible-playbook -i inventory_file playbook.yml

рдореЗрдЬрдмрд╛рди рдкрд░реНрдпрд╛рд╡рд░рдг:

  • ansible 2.2.1.0
  • OSX El Capitan 10.11.6

@Vcoleman , рдорджрдж рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж ..
рдореИрдВрдиреЗ рдЖрдкрдХреЛ рджрд┐рдпрд╛ рдХрджрдо, рдлрд┐рд░ рднреА рд╡рд╣реА рддреНрд░реБрдЯрд┐ редред
рдкрд┐рдВрдЧ рдХреЙрдореИрдВрдб

$ ansible test -m ping

рдЦрджрд╛рди рдкрд░ рджрд┐рдЦрд╛рдИ рдЧрдИ рддреНрд░реБрдЯрд┐ рдХреБрдЫ рдереА рдЬреЛ рдЖрдкрдХреА рддреБрд▓рдирд╛ рдореЗрдВ рднрд┐рдиреНрди рд╣реИ ред---->
"" рд╕рдВрджреЗрд╢ ":" ssh рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛрд╕реНрдЯ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓: рдЕрдиреБрдорддрд┐ рдЕрд╕реНрд╡реАрдХреГрдд (publickey, gssapi-keyex, gssapi-with-mic) .rn ""
рдореИрдВрдиреЗ рдЕрдкрдиреА рд╣реЛрд╕реНрдЯреНрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдиреАрдЪреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИред

рдореЗрд░реЗ рдореЗрдЬрдмрд╛рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддреА рд╣реИ ::

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

рдЙрдкрд░реЛрдХреНрдд 172.31.27.41 рдореЗрд░рд╛ рд╕реНрдерд╛рдиреАрдп рд╕рд░реНрд╡рд░ (рдирд┐рдпрдВрддреНрд░рдг рд╕рд░реНрд╡рд░) рд╣реИ
рдлрд┐рд░ рд╕реЗ рдореИрдВ рдПрдХ рд╣реА рдореБрджреНрджрд╛ рдерд╛ ..

@pavaniandkalyan рдХреНрдпрд╛ рдЖрдк рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реИрдВ рдХрд┐ RPI рдкрд░ рд╕рд╣реА SSH рдХреБрдВрдЬреА рд░рдЦрдиреЗ рд╡рд╛рд▓рд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ ansible ?

рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐, рдореИрдВрдиреЗ рдХрдВрдЯреНрд░реЛрд▓ рд╕рд░реНрд╡рд░ рд╕реЗ рд╕рднреА рдиреЛрдбреНрд╕ рдХреЗ рд▓рд┐рдП рд╕рднреА рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдИ рд╣реИ рдФрд░ рдПрдХ рдирд┐рд╕реНрд╕рдВрджреЗрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╢реНрд▓реЛрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИред
рдХреНрдпрд╛ рдирд┐рдпрдВрддреНрд░рдг рд╕рд░реНрд╡рд░ рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд / рдЕрдкрдбреЗрдЯ / рдкрд┐рдВрдЧ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ? рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ Ansbile рдХреЗ рд╕рд╛рде рд╕реНрд╡рдЪрд╛рд▓рди рдХреЗ рджреМрд░рд╛рди рдХрдВрдЯреНрд░реЛрд▓ рд╕рд░реНрд╡рд░ рдЗрдВрдЯреНрд░реИрдХреНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП? рдпрд╛ рдХреЗрд╡рд▓ рдиреЛрдбреНрд╕ рдкреБрд╢ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ?

рдпрд╣ рд╕рд╣реА рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ -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

рдпрд╛ ansible config рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ

[defaults]
transport = paramiko

рдореЗрд░реА рднреА рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рдереА:

рдореЗрд░рд╛ рд╕рдВрдХрд▓реНрдк resolution *
ansible -c local -i all_servers all_servers -m ping

-c рд╕реНрдерд╛рдиреАрдп рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛, рдореИрдВрдиреЗ transport = local рд╕реЗрдЯ рдХрд┐рдпрд╛ рдФрд░ рдлрд┐рд░ рдореБрдЭреЗ рд░рдиреЛрдВ рдореЗрдВ -c рд╡рд┐рдХрд▓реНрдк рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдкрдбрд╝реАред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ -c local .ssh/config рдлрд╝рд╛рдЗрд▓ рдХрд╛ рд╕рдореНрдорд╛рди рдХрд░рддрд╛ рд╣реИред рдЕрдЧрд░ рд╡рд╣ рдирд╣реАрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рддреЛ рдЖрдкрдХреЛ ansible.cfg рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рднреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореЗрд░рд╛ рдЕрдиреБрдорд╛рди рд╣реИред

рдЙрдкрд░реЛрдХреНрдд рдЙрджреНрдзрд░рдг рдЬреЛ рдореИрдВрдиреЗ рдХрд▓ рд▓рд┐рдЦрд╛ рдерд╛, рдпрд╣ рд╕реЛрдЪрдХрд░ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИ рд╣реИред рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдЪреБрдиреЗ рдЧрдП рдЕрднрд┐рдкреНрд░рд╛рдп рд╕рд╣реА рдирд╣реАрдВ рд╣реИрдВ

Heres рдХреНрдпрд╛ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИ

рдореИрдВ рдЬреЛ рджреЗрдЦрддрд╛ рд╣реВрдВ рдЙрд╕рд╕реЗред рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдХрд╛рдлреА рд╕рд╣реА рд╣реИред рдпрд╣ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рдХреЛрдб рдХреЗ рд╕рд╛рде рдЕрдкрдиреА ansible.cfg рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╢рд┐рдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рддреЛ рдкрд╣рд▓реЗ рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдкрдХреЗ .ssh/config рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд┐рдпрд╛ рдерд╛ред рд▓реЗрдХрд┐рди рдирдП рд╕рдВрд╕реНрдХрд░рдг рдирд╣реАрдВ рд╣реИред

рддреЛ ansible рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдЖрдкрдХреЛ ssh рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ [ssh_connection] рдмреНрд▓реЙрдХ рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рджреЗрддреЗ рд╣реИрдВред рдЬрд╣рд╛рдВ рдЖрдк ssh рдХреЗ рд▓рд┐рдП рд╕рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдм рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЕрдЧрд░ рдЖрдкрдХреЗ рдирд┐рдпрдВрддреНрд░рдг рд╕рд░реНрд╡рд░ рдФрд░ рдЖрдкрдХреА рдЗрдиреНрд╡реЗрдВрдЯреНрд░реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ IP рдпрд╛ рдбреАрдПрдирдПрд╕ рд░рд┐рдХреЙрд░реНрдб рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ .ssh / config рдлрд╛рдЗрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред рд▓реЗрдХрд┐рди рд╣рдо рдореЗрдВ рд╕реЗ рдЬреНрдпрд╛рджрд╛рддрд░ рдХреА рддрд░рд╣ рд╣рдорд╛рд░реЗ .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 рдФрд░ Parallel-ssh рдЬреИрд╕реЗ рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрд╕реА ControlMaster рдХрд░ рд╕рдХреЗрдВред

рдзреНрдпрд╛рди рджреЗрдВ

control_path = ~/.ssh/controlmasters/%%r@%%h:%%p рдореЗрдВ рджреЛ %% рд╕рдВрдХреЗрдд рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдХрд┐рд╕реА рдПрдХ рдХреЗ рд▓рд┐рдП рдЕрдкреАрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдлрд┐рд░ рдЕрдЧрд▓рд╛ рднрд╛рдЧ рдпрд╣ рд╣реИ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЕрдиреНрд╕рд┐рдмрд▓ рдХреЛ 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" рдкрд╛рдпрд╛ред рдПрдХ рдЬрд╛рджреВ рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд┐рдпрд╛ред рдпрд╣ рдХреБрдЫ рдореБрджреНрджреЛрдВ рдХреЗ рдЖрд╕рдкрд╛рд╕ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдкреБрд░рд╛рдиреЗ рдУрдкрдирдПрд╕рдПрд╕рдПрдЪ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рд╣реИрдВред

рдирдорд╕реНрддреЗ ,
рдЬрдм рднреА рдореИрдВ рдУрдкрди рд╢рд┐рдлреНрдЯ рдХреНрд▓рд╕реНрдЯрд░ рд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдореБрдЭреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддреНрд░реБрдЯрд┐ рдорд┐рд▓реАред рдореИрдВ рдиреАрдЪреЗ рдХрдорд╛рдВрдб рдЪрд▓рд╛рддрд╛ рд╣реВрдВред

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 | рдЕрдиреБрдкрдпреЛрдЧреА! => {
"рдкрд░рд┐рд╡рд░реНрддрд┐рдд": рдЕрд╕рддреНрдп,
"рд╕рдВрджреЗрд╢": "ssh рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛрд╕реНрдЯ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓: рд╣реЛрд╕реНрдЯ рдХреБрдВрдЬреА рд╕рддреНрдпрд╛рдкрди рд╡рд┐рдлрд▓ рд░рд╣рд╛ рд╣реИред",
"рдЕрдЧрдореНрдп": рд╕рдЪ

We have verified following steps.

Master communicating to the node

[ rhnuser3 @ ip-172-31-10-250 ~] $ ssh [email protected]
рдЕрдВрддрд┐рдо рд▓реЙрдЧрд┐рди: рдорд╛рд╕реНрдЯрд░ рд╕реЗ рдмреБрдз рдЕрдЧрд╕реНрдд 16 08:05:16
[ rhnuser3 @ рдиреЛрдб ~] $


Node Communicating to the master

[ rhnuser3 @ ip-172-31-9-57 ~] $ ssh [email protected]
рдЕрдВрддрд┐рдо рд▓реЙрдЧрд┐рди: рдиреЛрдб рдЕрдЧрд╕реНрдд 16 рд╕реЗ 07:56:06 2017 рдиреЛрдб
[ rhnuser3 @ рдорд╛рд╕реНрдЯрд░ ~] $

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

vi /etc/ansible/ansible.cfg


рдЗрдиреНрд╡реЗрдВрдЯреНрд░реА = / etc / ansible / рд╣реЛрд╕реНрдЯ
рд╕реБрдбреЛ_рд╕рд░ = rhnuser3


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

[ rhnuser3 @ ip-172-31-10-250 ~] $ рдмрд┐рд▓реНрд▓реА / рдЖрджрд┐ / рдореЗрдЬрдмрд╛рди

127.0.0.1 рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ.рд▓реЛрдХрд▓реЛрдореЗрди рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ 4 рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ4.рд▓реЛрдХрд▓реЛрдорд┐рдбреИрди 4

:: 1 рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯрд▓ред рд▓реЛрдХреЗрдбреЛрдореИрди рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ 6 рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ 6редрд▓реЛрдХрд▓реЛрдореЗрди 6

172.31.10.250 рдорд╛рд╕реНрдЯрд░
172.31.9.57 рдиреЛрдб

рд╕реБрдбреЛ vi / etc / ssh / sshd_config

PasswordAuthentication рд╣рд╛рдБ

PermitEmptyPasswords no

PasswordAuthentication рд╕рдВ

sudo cat / var / log / safe


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

рдЧреБрдгрд╕реВрддреНрд░ рдиреЗ рдЕрднреА рдЯрд┐рдкреНрдкрдгреА рдХреА рд╣реИ

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

рдореИрдВ 2.3.1.0 рдкрд░ ansible рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред / etc / ansible / рд╣реЛрд╕реНрдЯ рдореЗрдВ рдореЗрд░реЗ рд╣реЛрд╕реНрдЯ рдЬреЛрдбрд╝реЗред рдЕрдЧрд░ рдореИрдВ рдХрд░рддрд╛ рд╣реВрдБ, - рддреНрд░реБрдЯрд┐ рдЖрдиреЗ рд╕реЗ рдиреАрдЪреЗ-рд╣реЛрд╕реНрдЯ рдХрд░рддрд╛ рд╣реИ
рддреНрд░реБрдЯрд┐! рдлрд╝реАрд▓реНрдб 'рд╣реЛрд╕реНрдЯ' рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред Ansible.cfg рдЗрдиреНрд╡реЗрдВрдЯреНрд░реА рдкрде рдореЗрдВ рд╕рдорд╛рди рд╣реИред рдХреНрдпрд╛ рдХреЛрдИ рдЗрд╕рдореЗ рдореЗрд░реА рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ?

hi..рдХрд┐рд╕реА рднреА рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдпреЛрдЧреНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рднрд┐рдЦрд╛рд░реА рд╣реИ, рдореИрдВ рдЗрд╕реЗ рдирд┐рд░рдВрддрд░ рд╡рд┐рддрд░рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред
рдореИрдВ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЗрдиреНрд╡реЗрдВрдЯреНрд░реА, рдкреНрд▓реЗрдмреБрдХ, рдореЙрдбреНрдпреВрд▓ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдХреИрд╕реЗ рдмрд╛рддрдЪреАрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рдкрддрд╛ рд╣реИ рддреЛ рдХреГрдкрдпрд╛ рдореБрдЭреЗ [email protected] рдкрд░

рд╣рдо рджрд┐рди рдХреЗ рдЕрдВрдд рдореЗрдВ рдЗрд╕реЗ рдХреИрд╕реЗ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВ?

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ : рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реА рд░рд┐рдореЛрдЯ рдорд╢реАрди рдкрд░ SSH рд╕реЗрд╡рд╛ рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рд╣реЛ рдЧрдИ рд╣реИред рдореИрдВрдиреЗ PuTTY рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ ssh рд╕рддреНрд░ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдпрд╣ рд▓реЙрдЧрд┐рди рдкреНрд░реЙрдореНрдкреНрдЯ рд╕реЗ рдкрд╣рд▓реЗ рдХрдиреЗрдХреНрд╢рди рдХреЛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИред

edit2 : рджреВрд░рд╕реНрде рдорд╢реАрди рдкрд░ SSH рд╕реЗрд╡рд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдм рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣реА рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдХреЛрдИ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдирд╣реАрдВ рджреА рд╣реИ рдХрд┐ рддреНрд░реБрдЯрд┐ рдХреНрдпрд╛ рд╣реИред рдЪреВрдБрдХрд┐ рдпрд╣ рд╕реАрдзреЗ рддреМрд░ рдкрд░ рддрдм рд╣реБрдЖ рдерд╛ рдЬрдм рдЗрд╕ Ansible рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЪрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдореИрдВ рдЗрд╕реЗ рдпрд╣рд╛рдБ рдЫреЛрдбрд╝ рд░рд╣рд╛ рд╣реВрдБ рдЬреИрд╕реЗ рдХрд┐ рдПрдХ Ansible рддреНрд░реБрдЯрд┐ рдХреЗ рдХрд╛рд░рдг рдХреНрд░реИрд╢ рд╣реЛрдиреЗ рдХрд╛ sshd рд╣реЛрддрд╛ рд╣реИ, рдпрд╣ рдЕрднреА рднреА рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╡рд┐рд╡рд░рдг: рд▓рдХреНрд╖реНрдп рдФрд░ рдирд┐рдпрдВрддреНрд░рдг рдорд╢реАрди рджреЛрдиреЛрдВ рдЗрдВрдЯреЗрд▓ xeons рд╣реИрдВ рдЬреЛ CentOS 7 рдкрд░ рдЪрд▓ рд░рд╣реЗ рд╣реИрдВред рдирд┐рдпрдВрддреНрд░рдг рд╕рдВрд╕реНрдХрд░рдг рд╕реЗрдВрдЯреЛ-рд░рд┐рд▓реАрдЬрд╝-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 рдлрд╛рдЗрд▓реЗрдВ, рдФрд░ рд░рд┐рдореЛрдЯ рдорд╢реАрди рдкрд░ рдЕрдзрд┐рдХреГрдд_рдХреАрдк рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдПрдХ рд╕рдкреНрддрд╛рд╣ рдкрд╣рд▓реЗ рд╡рд╣рд╛рдВ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА рдЬреЛрдбрд╝реА рдереА рдФрд░ рдЕрдиреБрдорддрд┐рдпрд╛рдБ 600 рд░рд╣ рдЧрдИ рд╣реИрдВред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ : рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реА рд░рд┐рдореЛрдЯ рдорд╢реАрди рдкрд░ SSH рд╕реЗрд╡рд╛ рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рд╣реЛ рдЧрдИ рд╣реИред рдореИрдВрдиреЗ PuTTY рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ ssh рд╕рддреНрд░ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдпрд╣ рд▓реЙрдЧрд┐рди рдкреНрд░реЙрдореНрдкреНрдЯ рд╕реЗ рдкрд╣рд▓реЗ рдХрдиреЗрдХреНрд╢рди рдХреЛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИред

рд╣рд╛рдБ, рдореИрдВ рдЙрд╕ рд╕рдорд╕реНрдпрд╛ рдХреА рднреА рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реВрдВ рдЬрдм рднреА рдореИрдВ рдПрдХ рдирдП рдореИрдХ рдкрд░ Ansible рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реВрдВред рдпрд╣ рджреБрдЦ рдХреА рдмрд╛рдд рд╣реИред

рдмрд╕ рдЗрд╕ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛, рдХреЗрд╡рд▓ рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореЗрд░реЗ рдореИрдХ рдкрд░ рд╣реЛрдиреЗ рд▓рдЧрддрд╛ рд╣реИред

рдХрдиреЗрдХреНрд╢рди: рд╕реНрдерд╛рдиреАрдп рдкреНрд▓реЗрдмреБрдХ рдореЗрдВ рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рддрдп рдХреА рдЧрдИ

рдЙрд╕реА рддреНрд░реБрдЯрд┐ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИ:
рдШрд╛рддрдХ: [рез.реи.рей.рек]: рдЕрдиреБрдкрдпреЛрдЧреА! => {"рдкрд░рд┐рд╡рд░реНрддрд┐рдд": рдЕрд╕рддреНрдп, "рд╕рдВрджреЗрд╢": "ssh рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛрд╕реНрдЯ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓: рдЪреЗрддрд╛рд╡рдиреА: рд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ '1.2.3.4' (ECDSA) рдХреЛ рдЬреНрдЮрд╛рдд hosts.rnPermission рдХреА рд╕реВрдЪреА рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ (pubicickey) .rn" , "рдЕрдЧрдореНрдп": рд╕рддреНрдп}

SSH рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди ansible рддреНрд░реБрдЯрд┐ рд░рд╣рд┐рдд рддреНрд░реБрдЯрд┐ рдХреЛ рдлреЗрдВрдХрддрд╛ рд╣реИ

@induraj рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдЪрд▓рдиреЗ рдпреЛрдЧреНрдп рдХреБрдВрдЬреА рдХреЗ рд▓рд┐рдП рдкрд╣реБрдБрдЪ рдирд╣реАрдВ рд╣реИред
рдХреНрдпрд╛ рдЖрдк ansible --version рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рднреА рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред
рдпрд╣ рднреА рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдиреЗ рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рдзрд┐ (рдкрд╛рдЗрдк рдпрд╛ рдХрд╛рдврд╝рд╛) рджреНрд╡рд╛рд░рд╛ рд╣реА рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ

рддреБрд░рдВрдд рдЬрд╡рд╛рдм рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж:
(ansble) ansible @ sharma : ~ $ рдкрд╛рдЗрдк рдлреНрд░реАрдЬ | grep ansible
ansible == 2.4.2.0

рдХреНрдпрд╛ рдЖрдк virtualenv рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓ рд░рд╣реЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдХреБрдВрдЬреА рддрдХ рдкрд╣реБрдВрдЪ рд╣реИ?

рд╣рд╛рдБ рдЙрдирдХреА рдкрд╣реБрдБрдЪ рд╣реИ:
ll ~ / .ssh / raj_aws.pem
-rw ------- 1 ansible ansible 1692 Jan 13 23:12 .shsh / raj_aws.pem
рдХреНрдпрд╛ рдХреБрдЫ рдЖрд╡рд╢реНрдпрдХ рд╣реИ?

@induraj рдореБрдЭреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ virtualenv рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рд╣реА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИред

рдареАрдХред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдореИрдВ рд╡рд╣реА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдлрд┐рд░ рднреА рдЗрд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдЕрдм рддрдХ рдореЗрд░реЗ рдкрд╛рд╕ рдЬреЛ рдХреБрдЫ рд╣реИ, рдЙрд╕реЗ рдореБрдЭреЗ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рджреЛред

  • рдмрдирд╛рдпрд╛ virtualenv
  • рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдпреЛрдЧреНрдпред
  • ansible рдХреЗ рд╕рд╛рде EC2 рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдоред
  • рд▓реЗрдХрд┐рди рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдЬреВрдЭ рд░рд╣реЗ EC2 VM рдореЗрдВ рд▓реЙрдЧрд┐рди рдХрд░рдиреЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред

рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдореБрдЭреЗ EC2 VM рддрдХ рдкрд╣реБрдБрдЪ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдореИрдВ рдЕрдкрдиреЗ рдкрд░реАрдХреНрд╖рдг рдХреЛ ansible рд╕реЗ рдЖрдЧреЗ рдмрдврд╝рд╛ рд╕рдХреВрдБред

рдореИрдВрдиреЗ рдЖрдзрд╛рд░ рдорд╢реАрди рдкрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рд╣реИ рдмрд┐рдирд╛ virtualenv рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╕рдорд╕реНрдпрд╛ рд╣реЛред

рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ ssh- рдПрдЬреЗрдВрдЯ рдХреА рдХрдИ рдХреБрдВрдЬрд┐рдпрд╛рдБ рд╣реИрдВ, рддреЛ рдЕрдкрдиреЗ рдирд┐рдЬреА рдХреБрдВрдЬреА рдХреЛ ssh-agent рдХреЗ рдмрдЬрд╛рдп рдЧрд▓рдд рдХреБрдВрдЬреА рд╕реЗ рдЧреБрдЬрд░рдиреЗ рдФрд░ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЕрдкрдиреЗ рд╣реЛрд╕реНрдЯ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдореЗрдВ ansible_ssh_pStreet_key_file рд╡реИрд░рд┐рдПрдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рд╕реВрдЪреА рдХреА рдЬрд╛рдирдХрд╛рд░реА

рдирдорд╕реНрддреЗ!

Ansible рдореЗрдВ рдЖрдкрдХреА рд░реБрдЪрд┐ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред рдпрд╣ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИред

рдпрд╣ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рд╢реНрди рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рд╣рдо рдореЗрд▓рд┐рдВрдЧ рд╕реВрдЪреА рдпрд╛ рдЖрдИрдЖрд░рд╕реА рдЪреИрдирд▓ рдкрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдЪреАрдЬреЛрдВ рдХреЛ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдпрджрд┐ рдЖрдк рд╡рд╣рд╛рдБ рд░реБрдХ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЗрд╕рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░реЗрдВрдЧреЗред рдпрд╣ рд╣рдореЗрдВ рдмрдЧреНрд╕, рдкреБрд▓ рдЕрдиреБрд░реЛрдзреЛрдВ, RFE рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдореБрджреНрджреЗ рдкрд░ рдирдЬрд╝рд░ рд░рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рдзрдиреНрдпрд╡рд╛рдж рдФрд░ рд╣рдо рдЖрдкрдХреЛ рд╕реВрдЪреА рдпрд╛ рдЖрдИрдЖрд░рд╕реА рдкрд░ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕реБрдХ рд╣реИрдВред рдзрдиреНрдпрд╡рд╛рдж!

рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдореБрдЦреНрдп рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдирд┐рдпрдВрддреНрд░рдг рдлрд╝рд╛рдЗрд▓ рдирд╣реАрдВ рдмрдирд╛рдИ рдЧрдИ рдереА рдФрд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдкреНрд░реЙрдХреНрд╕реА рдХрдорд╛рдВрдб рдХреЗ рдкрд╛рд╕ рдЙрдЪрд┐рдд рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рдереАред

Ansible cmd рдореЗрдВ -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]' рд╡рд┐рдХрд▓реНрдк рдХреЗ рдмрд┐рдирд╛ рдХрдорд╛рдВрдб рдХрд░рддрд╛ рд╣реИред рдирд┐рдпрдВрддреНрд░рдг рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдИ рдЧрдИ рдереА, рдлрд┐рд░ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд┐рдпрд╛ред

рдореИрдВ рдЕрдкрдиреЗ рд╣реЛрд╕реНрдЯ рдкрд░ рдФрд░ рдлреЙрд░рд╡рд░реНрдб рдкреНрд░реЛрдирдЧреЗрдВрдЯ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд╕рд╛рде рдмрд┐рдЯ рд╣реЛрд╕реНрдЯ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдереЛрдбрд╝рд╛ рдмрд╣реБрдд рдлрд╛рдпрджрд╛ рдирд╣реАрдВ рд╣реБрдЖред рдЖрдЦрд┐рд░рдХрд╛рд░ рдореИрдВрдиреЗ рдмрд╕ рдореЗрдВ рднрд╛рдЧ рд▓рд┐рдпрд╛ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдЕрд╕рдлрд▓ рдореЗрдЬрдмрд╛рди рдХреЗ рд▓рд┐рдП рдЙрд╕ рдЖрджреЗрд╢ рдХреЛ рдЪрд▓рд╛рдпрд╛ рдФрд░ рд╣реИрдХ рдХреЛ рдореЗрд░реЗ рдХрд╛рдо рдХреЛ рдЕрдирдмреНрд▓реЙрдХ рдХрд░ рджрд┐рдпрд╛ред

рдореИрдВ рдПрдХ рдЧреИрд░-рдорд╛рдирдХ рдирд┐рдЬреА рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛ рдФрд░ рдпрд╣ рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣рд╛ рдерд╛ред рдпрд╣ 600 рдкрд░рдорд┐рдЯ рдерд╛ред ssh-add <path-to-private-key> рдореЗрд░рд╛ рдореБрджреНрджрд╛ рддрдп рдХрд┐рдпрд╛ред

рджреВрд░рд╕реНрде рд╕рд░реНрд╡рд░ рдкрд░ ssh-copy-id рдХреЗ рд╕рд╛рде рдореЗрд░реА рдХреБрдВрдЬреА рдХреЛ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рд╕рдорд╕реНрдпрд╛ рдареАрдХ рд╣реЛ рдЧрдИред

ssh args рдореЗрдВ -o ControlMaster=auto -o ControlPersist=30m рдЬреЛрдбрд╝рдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рдореБрджреНрджрд╛ рддрдп рд╣реЛ рдЧрдпрд╛ред

  • ansible рд╕рдВрд╕реНрдХрд░рдг: 2.4.1.0
  • рдУрдПрд╕: рдореИрдХреЛрд╕ рд╕рд┐рдПрд░рд╛
  • рдЙрдкрд╛рдп: ec2 рдЙрджрд╛рд╣рд░рдг (рд╕реЗрдВрдЯреЛ 7, t2.micro)

рдЕрдзрд┐рдХ:

рднреВрдорд┐рдХрд╛ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмреАрдЪ рдореЗрдВ "UNREACHABLE" рддреНрд░реБрдЯрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ред рдПрдХ рд╣реА рдХрд╛рд░реНрдп рдкрд░ рд░реЛрдХ рд▓рдЧреЗрдЧреАред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореИрдВ рдХреЗрд╡рд▓ рдЙрд╕ рдХрд╛рд░реНрдп (рдЯреИрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) рдХреЛ рдЕрд▓рдЧ рдХрд░ рджреЗрддрд╛ рддреЛ рдЪрд▓ рдЬрд╛рддрд╛ред

ansible -m ping myServer рдиреЗ рдореБрдЭреЗ UNREACHABLE! рддреНрд░реБрдЯрд┐ рджреАред
ansible -c local -m ping myServer рдХрд╛рдо рдХрд┐рдпрд╛ред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдореЗрд░реА рдкреНрд▓реЗрдмреБрдХ рдореЗрдВ рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдпрд╣ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

- hosts: dev
  connection: local

рдореБрдЭреЗ ansible 2.6.0 рд╕рд╛рде рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛
ansible.cfg рдореЗрдВ рдореЗрд░реЗ ssh_args

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 рдХреЗ рд▓рд┐рдП ansible рдХреЛ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рд╕реЗ рдореЗрд░реЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИ

рдореБрдЭреЗ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ, ubuntu 14.04 ansible 2.6.2 рдХреЗ рд╕рд╛рде (рдирд╡реАрдиреАрдХрд░рдг 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

рд╕рд╛рд░рд╛рдВрд╢

рдореИрдВ "ssh [email protected] " рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдИрдерд░рдиреЗрдЯ рдХреЗрдмрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ ssh рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдкрдиреЗ Rasberry Pi рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдПрдХ рд╣реЛрд╕реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ IP рдкрддреЗ рдХреЗ рд╕рд╛рде Ansible рдЪрд▓ рд░рд╣рд╛ рд╣реИред

рдореИрдВрдиреЗ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЗрд╕ рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рдХреЛ рд╡рд╛рдИрдлрд╝рд╛рдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ (рд╡рд╛рдИрдлрд╛рдИ рдЖрдИрдкреА рдкрддреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдм рдкреНрд░рддреНрдпрдХреНрд╖ рдИрдерд░рдиреЗрдЯ рдХрдиреЗрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдореБрдЭреЗ рдЧреБрдкреНрдд рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ansible рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ:

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

рдХреНрдпреЛрдВрдХрд┐ I _can_ рдЯрд░реНрдорд┐рдирд▓ рд╕реЗ ssh рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрд╕ IP рдкрддреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЗрд╕ pi рд╕реЗ рдХрдиреЗрдХреНрдЯ рд╣реЛрддрд╛ рд╣реИ, рдореИрдВ рдпрд╣ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ 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

рдЬрд┐рд╕рд╕реЗ рдПрдХ рд╣реА рддреНрд░реБрдЯрд┐ рд╣реЛред

рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╣реЛрд╕реНрдЯ рдХрд░рддрд╛ рд╣реИ

[pis]
169.254.0.2

рдкреНрд▓реЗрдмреБрдХ


---

- name: Ansible Playbook for configuring brand new Raspberry Pi

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рднреВрдорд┐рдХрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╣рддреНрд╡рд╣реАрди рд╣реИ рдХреНрдпреЛрдВрдХрд┐ ssh рдХрдиреЗрдХреНрд╢рди рдЪрд░рдг рдореЗрдВ ansible рд╡рд┐рдлрд▓ рд╣реЛ рд░рд╣рд╛ рд╣реИред

рдЕрдкреЗрдХреНрд╖рд┐рдд рдкрд░рд┐рдгрд╛рдо

рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдкреАрдЖрдИ рд╕реЗ рдЬреБрдбрд╝рдиреЗ рдФрд░ рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВ (рдореИрдВ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЖрдИрдкреА рдкрддреЗ рдкрд░ рд╡рд╛рдИрдлрд╛рдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдХреЗ рдРрд╕рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ)

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдгрд╛рдо
/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 ), рд▓реЗрдХрд┐рди рдПрдХ рдЯреВрдЯ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддреЗ рд╣реБрдП рдкрд╛рдЗрдк ( debug3: mux_client_read_packet: read header failed: Broken pipe ), -o ControlMaster=no ssh_args -o ControlMaster=no рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ рдмрд┐рдирд╛ рдкреИрд░рд╛рдорд┐рдХреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╛ ControlPersist рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдПред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

yatesr picture yatesr  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

rokka-n picture rokka-n  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

hryamzik picture hryamzik  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

iven picture iven  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

RaymiiOrg picture RaymiiOrg  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ