Ansible के लिए sudo पासवर्ड निर्दिष्ट करें


224

मैं गैर-संवादात्मक तरीके से Ansible के लिए एक sudo पासवर्ड कैसे निर्दिष्ट करूं?

मैं इस तरह से Ansible playbook चला रहा हूँ:

$ ansible-playbook playbook.yml -i inventory.ini \
    --user=username --ask-sudo-pass

लेकिन मैं इसे इस तरह चलाना चाहता हूं:

$ ansible-playbook playbook.yml -i inventory.ini \
    --user=username` **--sudo-pass=12345**

क्या उधर रास्ता है? मैं अपनी परियोजना की तैनाती को अधिक से अधिक स्वचालित करना चाहता हूं।


4
इसे भी देखें: serverfault.com/questions/560106/…
utapyngo

जवाबों:


169

आप कमांड लाइन पर चर को पास कर सकते हैं --extra-vars "name=value"। Sudo पासवर्ड चर रहा है ansible_sudo_pass। तो आपका आदेश ऐसा लगेगा:

ansible-playbook playbook.yml -i inventory.ini --user=username \
                              --extra-vars "ansible_sudo_pass=yourPassword"

अपडेट 2017 : Ansible 2.2.1.0 अब var का उपयोग करता है ansible_become_pass। या तो काम करने लगता है।


7
सुरक्षा के दृष्टिकोण से सबसे अच्छा उत्तर, यदि आप निम्नलिखित जोड़ते हैं: history -cवाईएमएल के निष्पादन के बाद।
किल्टेक

12
@kiltek: या लाइन की शुरुआत में एक अतिरिक्त स्थान जोड़ें (बैश में) जो * नहीं * को लाइन लिखें .bash_history
ccpizza

44
कमांड लाइन पर पासवर्ड पास करने के लिए एक अच्छा अभ्यास नहीं है। प्रक्रिया की सूची में कोई भी व्यक्ति पासवर्ड देख सकेगा, जबकि कमांड निष्पादित हो रहा है ...
Pavel Chernikov

22
अभी भी, यह मत करो। --स्क-सुडो-पास
जेसन

2
@scrutari यह कुछ स्थितियों में पूरी तरह से मान्य है: जैसे: उपयोगकर्ता की सार्वजनिक ssh कुंजी को इंजेक्ट करने के लिए डिफ़ॉल्ट, विश्व-ज्ञात, प्रारंभिक पासवर्ड से बदलें ... नए सिरे से पुनः-सिस्टम की प्रारंभिक कॉन्फ़िगरेशन के बारे में सोचें।
सेरेडिग

236

डॉक्स प्लेटेक्स्ट में sudo पासवर्ड सेट करने के विरुद्ध और रनिंग के दौरान कमांड लाइन पर उपयोग करने की दृढ़ता से सलाह देते हैं--ask-sudo-passansible-playbook


2016 अपडेट:

अनुमानित 2.0 (100% नहीं जब) चिह्नित के --ask-sudo-passरूप में चिह्नित किया गया। डॉक्स अब --ask-become-passइसके बजाय उपयोग करने की सलाह देते हैं , जबकि sudoआपके साथ अपनी पूरी प्लेबुक के उपयोग की अदला-बदली भी करते हैं become


16
हां, मैं देख सकता हूं कि इसकी सिफारिश क्यों की गई है। हालांकि, जब हम तैनाती की प्रक्रिया के एक हिस्से के रूप में अन्सिबल का उपयोग करते हैं, तो इसे स्वचालित करने का बेहतर तरीका क्या है? तैनाती की प्रक्रिया के बीच में रुकना और उपयोगकर्ता को sudo पासवर्ड के इनपुट के लिए पूछना बहुत सुविधाजनक नहीं है।
स्लाव फोमिन II

9
नोट - मास्क-सुडो-पास को -K से मिटाया जा सकता है, हालाँकि, जहाँ तक मैं देख सकता हूँ, अलग-अलग पासवर्ड के साथ कई सर्वरों पर चलने वाली प्लेबुक को संभालने का कोई तरीका नहीं है (यह केवल आपसे एक बार पूछता है), इसलिए मुझे लगता है कि पासवर्ड रहित सुडो जाने का रास्ता है।
विलियम तुरेल

1
काम नहीं लगता है। लेकिन अगला सुझाव ("कुछ-मेजबान ansible_sudo_pass = 'foobar'") करता है
nadkav

--स्क-सूदो-पास को पहले 1.9 में चित्रित किया गया था
क्रिस बेट्टी

यदि आपके पास एक स्रोत लिंक के साथ उत्तर को अपडेट करना अच्छा लगता है।
deefour

106

संभवतः ऐसा करने का सबसे अच्छा तरीका है - यह मानते हुए कि आप स्कूटॉड द्वारा प्रदान किए गए NOPASSWD समाधान का उपयोग नहीं कर सकते हैं, एमिस्क वॉटकोविसी के समाधान का उपयोग अन्सिबल वॉल्ट के संयोजन में करना है ।

उदाहरण के लिए, आपके पास कुछ इस तरह से एक प्लेबुक हो सकती है:

- hosts: all

  vars_files:
    - secret

  tasks:
    - name: Do something as sudo
      service: name=nginx state=restarted
      sudo: yes

यहां हम एक फाइल को शामिल करते हैं, जिसे कहा जाता है secret हमारा sudo पासवर्ड होगा।

हम इस फ़ाइल का एन्क्रिप्टेड संस्करण बनाने के लिए ansible-वॉल्ट का उपयोग करेंगे:

ansible-vault create secret

यह आपसे पासवर्ड मांगेगा, फिर फ़ाइल को संपादित करने के लिए अपना डिफ़ॉल्ट संपादक खोलें। आप अपने डाल सकते हैंansible_sudo_pass यहाँ हैं।

उदाहरण के लिए: secret :

ansible_sudo_pass: mysudopassword

सहेजें और बाहर निकलें, अब आपके पास एक एन्क्रिप्टेड है secret फ़ाइल है, जिसे जब आप अपनी प्लेबुक चलाते हैं तो Ansible डिक्रिप्ट करने में सक्षम है। नोट: आप फ़ाइल को संपादित कर सकते हैंansible-vault edit secret (और उस पासवर्ड को दर्ज करें जिसे आपने फ़ाइल बनाते समय इस्तेमाल किया था)

पहेली का अंतिम टुकड़ा अन्सिबल प्रदान करना है --vault-password-fileजिसके साथ यह आपके डिक्रिप्ट करने के लिए उपयोग करेगाsecret फ़ाइल ।

नामक एक फ़ाइल बनाएँ vault.txtऔर उसमें वह पासवर्ड डालें जो आपने इस्तेमाल करते समय बनाया थाsecret फ़ाइल । पासवर्ड फ़ाइल में एक लाइन के रूप में संग्रहीत एक स्ट्रिंग होना चाहिए।

Ansible डॉक्स से:

.. सुनिश्चित करें कि फ़ाइल पर अनुमतियाँ ऐसी हों कि कोई अन्य आपकी कुंजी तक न पहुंच सके और आपकी कुंजी को स्रोत नियंत्रण में न जोड़े

अंत में: अब आप अपनी प्लेबुक को कुछ इस तरह से चला सकते हैं

ansible-playbook playbook.yml -u someuser -i hosts --sudo --vault-password-file=vault.txt 

ऊपर निम्नलिखित निर्देशिका लेआउट मान रहा है:

.
|_ playbook.yml
|_ secret
|_ hosts
|_ vault.txt

आप यहाँ पर Ansible Vault के बारे में अधिक पढ़ सकते हैं: https://docs.ansible.com/playbooks_vault.html


5
ध्यान दें: 1.9 के रूप में, ऐसा प्रतीत होता है कि आप अब ansible_sudo_pass (या ansible_become_pass) चर का उपयोग नहीं कर सकते हैं: "घातक: [...] => गुम हो गया पासवर्ड"
toastocoza

6
मैं उत्पादन में इस समाधान का उपयोग कर रहा हूं, जेनकिंस वॉल्ट पासवर्ड को एक अस्पष्ट वातावरण चर के रूप में संग्रहीत करता है, इसे एक अस्थायी फ़ाइल में रनटाइम पर लिखता है और कॉल करने के लिए आय प्राप्त करता है।
सिमोन सीतादिनी

6
या अधिक बस: ansible-vault create group_vars/all/ansible.ymlऔर ansible_sudo_pass: yourpasswordवहाँ जोड़ें । प्लेबुक या इन्वेंट्री को बदलने की आवश्यकता नहीं है
बोके वेरस्टीघ

1
कोशिश की, लेकिन मुझे यह त्रुटि मिली:fatal: [localhost]: FAILED! => {"changed": false, "failed": true, "module_stderr": "sudo: a password is required\n", "module_stdout": "", "msg": "MODULE FAILURE", "parsed": false}
जॉनीक्यू

8
यदि आप इसके ठीक बगल में सादे पाठ में तिजोरी के लिए पासवर्ड संग्रहीत करते हैं, तो तिजोरी क्या अच्छा है?
एरिक

44

कोड को देखते हुए ( runner/__init__.py), मुझे लगता है कि आप शायद इसे अपनी इन्वेंट्री फ़ाइल में सेट कर सकते हैं:

[whatever]
some-host ansible_sudo_pass='foobar'

लगता है कि ansible.cfgविन्यास फाइल में भी कुछ प्रावधान हैं, लेकिन अभी इसे लागू नहीं किया गया है ( constants.py)।


7
इसे सुरक्षित रूप से कॉन्फ़िगर करने का एक शानदार तरीका यह है कि इसे host_varsया group_varsनिर्देशिका में संग्रहीत किया जाए और फिर फाइल को एनसिबल-वॉल्ट
काइल

44

मुझे नहीं लगता कि ansible आपको झंडे में पासवर्ड निर्दिष्ट करने देगा जैसा आप करना चाहते हैं। हो सकता है कि इसे सेट किए गए कॉन्फ़िगरेशन में कहीं हो लेकिन इससे कुल मिलाकर कम सुरक्षित का उपयोग किया जाएगा और इसकी अनुशंसा नहीं की जाएगी।

एक चीज जो आप कर सकते हैं, वह है कि लक्ष्य मशीन पर एक उपयोगकर्ता बनाएं और उन्हें सभी कमांड या कमांड की प्रतिबंधित सूची के लिए पासवर्ड रहित sudo विशेषाधिकार प्रदान करें।

यदि आप sudo visudoनीचे की तरह एक पंक्ति चलाते हैं और दर्ज करते हैं, तो उपयोगकर्ता 'विशेषाधिकार प्राप्त' को पासवर्ड दर्ज नहीं करना चाहिए, जब वे कुछ के बारे में जानते हैं sudo service xxxx start:

%privilegedUser ALL= NOPASSWD: /usr/bin/service

7
@bschlueter तो आप बुरे अभ्यास का समर्थन कर रहे हैं?
स्टीफन

1
मुझे नहीं लगता कि यह एक अच्छा विचार है। का उपयोग करते हुए - मास्क-सुडो-पास मेरे लिए समझ में आता है।
kgpdeveloper

@ सिस्मोन सिटाडिनी मैं पूरी तरह से इस तथ्य से सहमत हूं कि वह उत्तर है जो मैं देने जा रहा था। यह एक सुरक्षा जोखिम है।
१।

यह एक सुरक्षा जोखिम से कम है यदि आप स्टेजिंग / ठेस के लिए तैनात करने के लिए पासवर्ड रहित sudo का उपयोग कर रहे हैं, लेकिन इन उत्तरों का उपयोग अपने स्थानीय लैपटॉप लॉगिन पासवर्ड को टाइप करने के लिए छोड़ना चाहते हैं, जब हर दिन हर 15 मिनट में आपके स्थानीयहोस्ट पर तैनात किया जाता है।
जोनाथन हार्टले

कैसे आप इस लाइन को Ansible का उपयोग करके जोड़ते हैं?
मथायस

21

Sudo पासवर्ड एक चर बुलाया के रूप में संग्रहीत किया जाता हैansible_sudo_pass । आप इस चर को कुछ तरीकों से सेट कर सकते हैं:

प्रति होस्ट, आपकी इन्वेंट्री होस्ट फ़ाइल ( inventory/<inventoryname>/hosts) में

[server]
10.0.0.0 ansible_sudo_pass=foobar

प्रति समूह, आपकी सूची समूहों में फ़ाइल ( inventory/<inventoryname>/groups)

[server:vars]
ansible_sudo_pass=foobar

प्रति समूह, समूह संस्करणों में ( group_vars/<groupname>/ansible.yml)

ansible_sudo_pass: "foobar"

प्रति समूह, एन्क्रिप्टेड ( ansible-vault create group_vars/<groupname>/ansible.yml)

ansible_sudo_pass: "foobar"

18

आप एक समूह या सभी सर्वरों के लिए एक ही बार में पासवर्ड सेट कर सकते हैं:

[all:vars]
ansible_sudo_pass=default_sudo_password_for_all_hosts

[group1:vars]
ansible_sudo_pass=default_sudo_password_for_group1

14

मैं इस एक पर अपने बालों को फाड़ रहा था, अब मुझे एक समाधान मिला, जो मुझे चाहिए:

1 होस्ट फ़ाइल प्रति sudo पासवर्ड युक्त

/ Etc / ansible / मेजबान:

[all:vars]
ansible_ssh_connection=ssh ansible_ssh_user=myuser ansible_ssh_private_key_file=~/.ssh/id_rsa

[some_service_group]
node-0
node-1

तब आप प्रत्येक होस्ट के लिए एक एन्क्रिप्टेड var-file बनाते हैं जैसे:

ansible-vault create /etc/ansible/host_vars/node-0

सामग्री के साथ

ansible_sudo_pass: "my_sudo_pass_for_host_node-0"

आप वॉल्ट पासवर्ड को कैसे व्यवस्थित करते हैं - (थ्रू-वॉल्ट-पास दर्ज करें) या cfg द्वारा आप पर निर्भर है

इसके आधार पर मुझे संदेह है कि आप पूरी होस्ट फ़ाइल को एन्क्रिप्ट कर सकते हैं ...


तिजोरी का उपयोग करने के लिए एन्क्रिप्ट करना मेरे लिए सबसे अधिक समझ में आता है, हालांकि मैं उनके साथ उपयोग करने के लिए संघर्ष करता था ansible-playback। मुझे -e @vault/filename.extअपने ansible-playbookकॉल के साथ वॉल्ट का उपयोग करने के लिए उपयोग करना था ।
एलेक्स

9

यह करने के लिए एक और अधिक सामान्य बुद्धि जिस तरह से अपने स्टोर करने के लिए है sudoके रूप में एक सुरक्षित तिजोरी में पासवर्ड LastPass या KeePass और फिर इसे करने के लिए पारित ansible-playbookका उपयोग कर -e@, लेकिन एक वास्तविक फ़ाइल में सामग्री हार्डकोड के बजाय, आप निर्माण का उपयोग कर सकते -e@<(...)एक में एक कमांड को चलाने के लिए उप-शेल, और इसके आउटपुट (STDOUT) को एक अनाम फ़ाइल डिस्क्रिप्टर पर पुनर्निर्देशित करता है, प्रभावी रूप से पासवर्ड को खिला रहा है -e@<(..)

उदाहरण

$ ansible-playbook -i /tmp/hosts pb.yml \
   -e@<(echo "ansible_sudo_pass: $(lpass show folder1/item1 --password)")

ऊपर कई बातें कर रहा है, चलो इसे तोड़ो।

  • ansible-playbook -i /tmp/hosts pb.yml - जाहिर है कि प्ले -बुक के माध्यम से प्लेबुक चला रहे हैं
  • $(lpass show folder1/item1 --password)"- LastPass CLI चलाता है lpassऔर उपयोग करने के लिए पासवर्ड पुनर्प्राप्त करता है
  • echo "ansible_sudo_pass: ...password..." - स्ट्रिंग 'ansible_sudo_pass:' लेता है और इसके द्वारा आपूर्ति किए गए पासवर्ड के साथ जोड़ता है lpass
  • -e@<(..)- उपरोक्त को एक साथ रखता है, और उपभोग करने के <(...)लिए फ़ाइल डिस्क्रिप्टर के रूप में उपधारा जोड़ता है ansible-playbook

और सुधार

यदि आप ऐसा नहीं करते हैं, तो हर बार आप बस इतना ही कह सकते हैं। पहले अपनी .bashrcतरह से एक उपनाम बनाएं :

$ cat ~/.bashrc
alias asp='echo "ansible_sudo_pass: $(lpass show folder1/item1 --password)"'

अब आप इस तरह से अपनी प्लेबुक चला सकते हैं:

$ ansible-playbook -i /tmp/hosts pb.yml -e@<(asp)

संदर्भ


1
एक उपधारा का उपयोग करना एक बहुत ही स्मार्ट विचार है! सोच रहे लोगों के लिए, यहाँ 1Password के CLI के साथ कैसा दिखता है:--extra-vars @<(echo ansible_become_pass: $(op get item <item name> | jq --raw-output '.details.sections[0].fields[] | select(.t=="password").v'))
Diti

1
मुझे यह पसंद है क्योंकि जब मैंने बैच इतिहास की जाँच की, तो पासवर्ड क्लियरटेक्स्ट में उजागर नहीं किया गया था। इसके बारे में यह भी सच है कि यदि सिस्टम ऑडिटिंग सक्षम है, तो कमांड को एक फाइल पढ़ने के रूप में लॉग इन किया जाता है, जैसे /dev/fd/63और इसलिए पासवर्ड टेम्प टेम्प फाइल डिस्क्रिप्टर में होने के कारण, इसका खुलासा नहीं किया जाता है।
JPvRiel

5

यदि आप सादा पाठ फ़ाइलों में पासवर्ड रखने में सहज हैं, तो एक और विकल्प - JSON फाइल को --extra-vars पैरामीटर के साथ उपयोग करना है (स्रोत नियंत्रण से फ़ाइल को बाहर करना सुनिश्चित करें):

ansible-playbook --extra-vars "@private_vars.json" playbook.yml 

अंसिबल ने 1.3 के बाद से इस विकल्प का समर्थन किया है


5

आप अपनी playbook के लिए sudo पासवर्ड को इस तरह से होस्ट्स फ़ाइल में लिख सकते हैं:

[host-group-name]
host-name:port ansible_sudo_pass='*your-sudo-password*'

5

यहाँ पर कुछ समय के लिए उत्तरोत्तर तिजोरी का सुझाव दिया गया है, लेकिन मैं अपनी प्लेबुक में संवेदनशील फ़ाइलों को एन्क्रिप्ट करने के लिए गिट-क्रिप्ट पसंद करता हूं। यदि आप अपने उपयोग योग्य प्लेबुक को रखने के लिए गिट का उपयोग कर रहे हैं, तो यह एक तस्वीर है। समस्या जो मुझे अटूट तिजोरी के साथ मिली है, वह यह है कि मैं अनिवार्य रूप से उस फ़ाइल की एन्क्रिप्टेड प्रतियां भर में आ रहा हूं, जिसके साथ मैं काम करना चाहता हूं और काम करने से पहले इसे डिक्रिप्ट करना होगा। git-cryptएक अच्छा कार्यप्रवाह IMO प्रदान करता है।

इसका उपयोग करके, आप अपने पासवर्ड को अपनी प्लेबुक में एक var में रख सकते हैं, और अपनी playbook को .gitattributesइस तरह एन्क्रिप्टेड फ़ाइल के रूप में चिह्नित कर सकते हैं :

 my_playbook.yml filter=git-crypt diff=git-crypt

आपकी प्लेबुक पारदर्शी रूप से जीथब पर एन्क्रिप्ट की जाएगी। तब आपको बस उस होस्ट पर अपनी एन्क्रिप्शन कुंजी स्थापित करने की आवश्यकता होती है जिसका उपयोग आप चलाने योग्य चलाने के लिए करते हैं, या उसके साथ सेट करने के लिए दस्तावेज़ पर दिए गए निर्देशों का पालन करें gpg

यहाँ gpgआपके ssh-agentआगे की SSH कुंजियों की तरह आगे की ओर एक अच्छा Q & A है: /superuser/161973/how-can-i-forward-a-gpg-key-via-ssh-agent


3

आप sshpassनीचे दिए अनुसार उपयोगिता का उपयोग कर सकते हैं ,

$ sshpass -p "your pass" ansible pattern -m module -a args \
   -i inventory --ask-sudo-pass

3

2.4.1.0 ansible का उपयोग करना और निम्नलिखित काम करेगा:

[all]
17.26.131.10
17.26.131.11
17.26.131.12
17.26.131.13
17.26.131.14

[all:vars]
ansible_connection=ssh
ansible_user=per
ansible_ssh_pass=per
ansible_sudo_pass=per

और बस इस सूची के साथ प्लेबुक चलाएं :

ansible-playbook -i inventory copyTest.yml

3

इसे स्वचालित करने के लिए मेरा हैक एक पर्यावरण चर का उपयोग करना और इसके माध्यम से एक्सेस करना था --extra-vars="ansible_become_pass='{{ lookup('env', 'ANSIBLE_BECOME_PASS') }}'"

एक env var निर्यात करें, लेकिन bash / शेल हिस्ट्री (स्पेस, या अन्य तरीकों से पूर्व-संकेत) से बचें। उदाहरण के लिए:

     export ANSIBLE_BECOME_PASS='<your password>'

अतिरिक्त ansible_become_passचर को ansible-playbookएग में पास करते समय env var को देखें :

ansible-playbook playbook.yml -i inventories/dev/hosts.yml -u user --extra-vars="ansible_become_pass='{{ lookup('env', 'ANSIBLE_BECOME_PASS') }}'"

अच्छा वैकल्पिक उत्तर:


2

आप ansible वॉल्ट का उपयोग कर सकते हैं जो आपके पासवर्ड को एन्क्रिप्टेड वॉल्ट में कोड करेगा। उसके बाद आप playbooks में चर का उपयोग कर सकते हैं।

Ansible वॉल्ट पर कुछ प्रलेखन:
http://docs.ansible.com/playbooks_vault.html

हम इसे प्रति पर्यावरण तिजोरी के रूप में उपयोग कर रहे हैं। तिजोरी को संपादित करने के लिए हमारे पास कमांड है:
ansible-vault edit inventories/production/group_vars/all/vault

यदि आप वॉल्ट वैरिएबल को कॉल करना चाहते हैं तो आपको मापदंडों के साथ ansible-playbook का उपयोग करना होगा:
ansible-playbook -s --vault-password-file=~/.ansible_vault.password

हां, हम सादे पाठ में स्थानीय निर्देशिका में वॉल्ट पासवर्ड जमा कर रहे हैं, लेकिन यह हर सिस्टम के लिए स्टोर रूट पासवर्ड की तरह अधिक खतरनाक नहीं है। रूट पासवर्ड वॉल्ट फ़ाइल के अंदर है या आप इसे अपने उपयोगकर्ता / समूह के लिए sudoers फ़ाइल की तरह रख सकते हैं।

मैं सर्वर पर sudoers फ़ाइल का उपयोग करने की सिफारिश कर रहा हूं। यहाँ समूह व्यवस्थापक के लिए उदाहरण है:
%admin ALL=(ALL) NOPASSWD:ALL



1

पांच साल बाद, मैं देख सकता हूं कि यह अभी भी एक बहुत ही प्रासंगिक विषय है। कुछ हद तक ल्यूकोस के उत्तर को प्रतिबिंबित करना, जो मुझे अपने मामले में सबसे अच्छा लगता है, केवल ansible टूल्स का उपयोग करके (बिना किसी केंद्रीकृत प्रमाणीकरण, टोकन या जो भी)। यह मानता है कि आपके पास सभी सर्वरों पर एक ही उपयोगकर्ता नाम और एक ही सार्वजनिक कुंजी है। यदि आप नहीं करते हैं, तो निश्चित रूप से आपको अधिक विशिष्ट होने की आवश्यकता होगी और मेजबानों के आगे संगत चर जोड़ें:

[all:vars]
ansible_ssh_user=ansible
ansible_ssh_private_key_file=home/user/.ssh/mykey
[group]
192.168.0.50 ansible_sudo_pass='{{ myserver_sudo }}'

ansible-vault create mypasswd.yml
ansible-vault edit mypasswd.yml

जोड़ें:

myserver_sudo: mysecretpassword

फिर:

ansible-playbook -i inv.ini my_role.yml --ask-vault --extra-vars '@passwd.yml'

कम से कम इस तरह से आपको अधिक चर लिखने की ज़रूरत नहीं है जो पासवर्ड को इंगित करते हैं।


1

@ Toast38coza द्वारा उपरोक्त समाधान ने मेरे लिए काम किया; बस उस सुडो : हाँ अब आंसिबल में पदावनत किया गया है। इसके बजाय बन और बन_ का उपयोग करें ।

tasks:
 - name: Restart apache service
   service: name=apache2 state=restarted
   become: yes
   become_user: root

0

हम बैश का उपयोग करने और अपनी आवश्यकताओं के अनुसार इसे अनुकूलित करने के लिए योग्य ब्लॉक में भी उपयोग कर सकते हैं

- name: Run expect to INSTALL TA
  shell: |
    set timeout 100
    spawn /bin/sh -i

    expect -re "$ "
    send "sudo yum remove -y xyz\n"

    expect "$ "
    send "sudo yum localinstall -y {{ rpm_remotehost_path_for_xyz }}\n"

    expect "~]$ "
    send "\n"

    exit 0
  args:
  executable: /usr/bin/expect

0

बहुत सरल है, और केवल चर फ़ाइल में जोड़ें:

उदाहरण:

$ vim group_vars/all

और ये जोड़ें:

Ansible_connection: ssh
Ansible_ssh_user: rafael
Ansible_ssh_pass: password123
Ansible_become_pass: password123

धन्यवाद, लेकिन मुझे लगता है कि आपको Ansible_become_pass के बजाय ansible_become_pass मतलब है।
कृष्णोम

0

सिर्फ एक परिशिष्ट, इसलिए कोई और उस झुंझलाहट से नहीं गुजरता जो मैंने हाल ही में किया था:

AFAIK, सबसे अच्छा समाधान toast38coza के ऊपर की सामान्य लाइनों के साथ एक है। यदि यह आपकी पासवर्ड फ़ाइलों और आपकी प्लेबुक को एक साथ वैधानिक रूप से जोड़ने के लिए समझ में आता है, तो उसके टेम्पलेट का पालन करें vars_files(या include_vars)। यदि आप उन्हें अलग रखना चाहते हैं, तो आप कमांड लाइन पर वॉल्ट सामग्री की आपूर्ति कर सकते हैं जैसे:

ansible-playbook --ask-vault-pass -e@<PATH_TO_VAULT_FILE> <PLAYBOOK_FILE>

रेट्रोस्पेक्ट में यह स्पष्ट है, लेकिन यहाँ गोचा हैं:

  1. वह खूनी @ संकेत। यदि आप इसे छोड़ देते हैं, तो पार्सिंग चुपचाप विफल हो जाएगी , और ansible-playbook आगे बढ़ेगी, क्योंकि आपने फ़ाइल को पहले स्थान पर निर्दिष्ट नहीं किया है।

  2. आपको तिजोरी की सामग्री को स्पष्ट रूप से आयात करना होगा, या तो एक कमांड-लाइन - टेक्स्ट-वर्जन / -ई के साथ या आपके यमन कोड के भीतर। --ask-vault-passझंडा (एक मूल्य है जो बाद में उपयोग नहीं किया जा सकता है या हो सकता है के लिए शीघ्र अलावा आप) अपने आप में कुछ भी नहीं है।

आप अपने "@" को शामिल कर सकते हैं और एक घंटा बचा सकते हैं।


-3

यह मेरे लिए काम किया ... NOPASSWD के साथ फ़ाइल /etc/sudoers.d/90-init-users फ़ाइल बनाई गई

echo "user ALL=(ALL)       NOPASSWD:ALL" > 90-init-users

जहां "उपयोगकर्ता" आपका उपयोगकर्ता नाम है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.