SSH कनेक्शन के लिए डिफॉल्ट Ansible यूजरनेम / पासवर्ड कैसे सेट करें?


59

मैं Ansible का उपयोग कर रहा हूं और मेरी इन्वेंट्री / सभी में यह कॉन्फ़िगरेशन है:

[master]
192.168.1.10 ansible_connection=ssh ansible_ssh_user=vagrant ansible_ssh_pass=vagrant

[slave]
192.168.1.11 ansible_connection=ssh ansible_ssh_user=vagrant ansible_ssh_pass=vagrant
192.168.1.12 ansible_connection=ssh ansible_ssh_user=vagrant ansible_ssh_pass=vagrant

[app]
192.168.1.13 ansible_connection=ssh ansible_ssh_user=vagrant ansible_ssh_pass=vagrant

[all:children]
master
slave

मैं प्रत्येक नए उदाहरण के लिए सभी मापदंडों को दोहराना नहीं चाहता। मैं उन्हें सिर्फ एक जगह कैसे कॉन्फ़िगर कर सकता हूं? क्या इन मापदंडों के साथ कोई फ़ाइल है?


3
~/.ssh/config
सियजॉय

1
@ceejayoz आप थोड़ा समझा सकते हैं
रॉबर्ट

मैं एक Ansible व्यवस्थापक नहीं हूं, और डॉक्स इस विषय पर बादल छाए हुए हैं ( क्या यह "चर" या "पैरामीटर" है और इसमें कोई अंतर है? ) लेकिन ऐसा लगता है कि आप किसी तरह समूह स्तर पर चर को परिभाषित कर सकते हैं।
डेरफेक

जवाबों:


73

आप अपनी इन्वेंट्री फ़ाइल में निम्न अनुभाग जोड़ सकते हैं:

[all:vars]
ansible_connection=ssh
ansible_user=vagrant
ansible_ssh_pass=vagrant

नोट: इससे पहले Ansible 2.0 ansible_userथा ansible_ssh_user


2
Ansible 2.0 के ऊपर, यह होना चाहिए: [all:vars] ansible_connection=ssh ansible_port=22 ansible_user=admin
zx1986

2
@ zx1986 आपने कहां पढ़ा है?
०३०

2
@ 030 यहाँ: docs.ansible.com/ansible/…
zx1986

ध्यान दें कि पोर्ट 22 के लिए डिफ़ॉल्ट है ansible_port, इसलिए आपको अलग से स्पष्ट रूप से निर्दिष्ट करने की आवश्यकता नहीं है। रुचि अगर किसी को पता है कि एक समय में एक से अधिक समूहों के लिए चर कैसे लागू किया जाए (लेकिन 'सभी' नहीं), तो अल्पविराम अलगाव काम नहीं करता है।
विलियम टरेल

1
@WilliamTurrell थोड़ी देर से लेकिन .. आप समूहों का एक समूह बना सकते हैं: (बच्चों के संशोधक के साथ) और फिर बाद में (चर संशोधक के साथ) चर सेट करें।
लास हलबबर्ग हरबी ने

23

समूह चर

आप उन चर को सेट कर सकते हैं जो सभी होस्ट पर लागू होते हैं, जो कि एन्सिबल के बेस्ट प्रैक्टिस डॉक्यूमेंट में निर्दिष्ट प्लेबुक लेआउट का उपयोग करके और उन्हें परिभाषित करते हुए एक फाइल बनाते हैंgroup_vars/all

---
# file: group_vars/all
ansible_connection: ssh 
ansible_ssh_user: vagrant 
ansible_ssh_pass: vagrant

[संपादित करें] हालांकि आप जो करने की कोशिश कर रहे हैं उस पर मैं भ्रमित हूं। आपको सूची में Ansible उपयोगकर्ता या पासवर्ड को निर्दिष्ट करने की आवश्यकता नहीं होनी चाहिए। यदि आप Vagrant का उपयोग कर रहे हैं, तो आप निश्चित रूप से नहीं करते हैं, और यदि आप कमांड-लाइन से Ansible को कॉल कर रहे हैं, तो आप उपयोगकर्ता के साथ निर्दिष्ट कर सकते हैं --user=vagrantऔर इसके साथ पासवर्ड पूछ सकते हैं --ask-pass


1
मुझे केवल अपने बुनियादी ढांचे का एक बेहतर संगठन करने की आवश्यकता है। अगर हमेशा मैं योनि का उपयोग करूंगा: योनि मैं इसे किसी ऐसे स्थान पर कॉन्फ़िगरेशन में रखना चाहता हूं जहां डिफ़ॉल्ट रूप से अनडिबल लोड होता है, लेकिन मुझे नहीं पता कि कहां है। निष्पादित किए जाने वाले प्रत्येक कनेक्शन का उपयोग करना होगा।
रॉबर्ट

फ़ाइल का नाम होना चाहिए group_vars/all/main.ymlया बस group_vars/all?
Realtebo

यह स्थापित करने के बाद मेरे लिए काम किया sshpass-"you must install the sshpass program"
user9869932

1
@realtebo फ़ाइल का नाम होना चाहिए group_vars/all
xloto

1
-के लिए पास पास "सभी" के लिए बहुत मज़ा नहीं है जब प्रत्येक मेजबान के पास एक अलग पासवर्ड है। हाँ, आपको sshpass की आवश्यकता है, और हाँ आपको शायद जाने जाने की जरूरत है अगर आप ~ \ _shsh \ config से पहले कभी नहीं जुड़े हैं तो जाने का रास्ता है।
mckenzm

5

मुझे लगता है कि पुल पर सभी सर्वरों पर ssh कुंजी इंस्टॉलेशन का उपयोग करना बेहतर है। आपको केवल प्रति नोड में ssh-copy-id चलाना चाहिए और अपनी ssh कुंजी का उपयोग करके लॉग इन करने की क्षमता के लिए हर जगह अपनी ssh कुंजी स्थापित करनी चाहिए। यह पासवर्ड को प्लेबुक / इन्वेंट्री में सेव न करने के लिए अधिक सुरक्षित होगा।

ऐसा करने के लिए आपको अपनी ssh कुंजी जोड़ी बनानी चाहिए और बाद में सभी सर्वरों के लिए ssh-copy-id चलाना चाहिए ।


1
यदि कोई आपकी कॉन्फ़िगरेशन फ़ाइल से पासवर्ड चुरा सकता है, तो वे संभवतः आपकी ssh कुंजियों में भी सक्षम होंगे। और इसका ओपी के सवाल का जवाब देने में कोई लेना देना नहीं है। यह प्रश्न विकल्प पर राय नहीं मांग रहा था।
मुह फगुन

@MuhFugen> मैं उन्हें केवल एक स्थान पर कैसे कॉन्फ़िगर कर सकता हूं? क्या इन मापदंडों के साथ कोई फ़ाइल है? यह एक सटीक वाक्यांश है जो राय के लिए दरवाजा छोड़ देता है और साथ ही प्रतिक्रिया सही दिशा की समझ देता है। चोरी विन्यास (जो कि कहीं पर git रेपो में रह सकता है) निजी कुंजी चोरी करने के समान नहीं है।
पोड्रोक

4

इन्वेंट्री होस्ट के नीचे जोड़ें।

उत्तर देने योग्य <2.0 के लिए:

[all:vars]
ansible_connection=ssh
ansible_ssh_user=vagrant 
ansible_ssh_pass=vagrant

के लिए Ansible> = 2.0 :

[all:vars]
ansible_connection=ssh # actually default mode smart is OK
ansible_user=vagrant
ansible_pass=vagrant # or ansible_ssh_pass=vagrant

लिंक में उल्लेख है ansible_ssh_pass, नहीं ansible_pass
मथायस वीलर

2

अस्वीकरण: मैंने केवल OSX पर यह परीक्षण किया है। विभिन्न डॉक्स के आधार पर, मुझे उम्मीद है कि यह अन्य प्लेटफार्मों पर काम करेगा।

"प्रोजेक्ट डायरेक्टरी" वैग्रांट प्रोजेक्ट के लिए बेस डायरेक्टरी को संदर्भित करता है - जिसमें निर्देशिका शामिल है Vagrantfile

वेजेंट द्वारा स्वतः-निर्मित इन्वेंट्री फ़ाइल स्वतः उत्पन्न:

Vagrant डिफ़ॉल्ट Ansible कनेक्शन var के साथ एक इन्वेंट्री फ़ाइल बनाता है । में इसके लिए देखो <project directory>/.vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory

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

इस इन्वेंट्री फ़ाइल में डिफ़ॉल्ट रूप से कॉन्फ़िगर करने योग्य कॉन्फ़िगर करें:

ansibleजब आप प्रोजेक्ट डायरेक्टरी (होस्ट पर) में हों तो कमांड द्वारा उपयोग की जाने वाली इस फाइल को डिफॉल्ट करने के लिए , ansible.cfgअपने प्रोजेक्ट डायरेक्टरी में इन कॉन्टेंट के साथ एक फाइल जोड़ें , जिससे जरूरत के अनुसार रास्ता बदल सके:

[defaults]
inventory = ./path/to/inventory

यह पुष्टि करने के लिए कि इस इन्वेंट्री फ़ाइल का उपयोग किया जा रहा है, इसे इस रूप में देखें कि डिफॉल्ट द्वारा ansible द्वारा रिपोर्ट की गई है:

(परियोजना निर्देशिका के भीतर से)

$ ansible | grep inventory ERROR! Missing target hosts -i INVENTORY, --inventory-file=INVENTORY specify inventory host path (default=./.vagrant/provis ioners/ansible/inventory/vagrant_ansible_inventory) or

अपने मेजबानों की पुष्टि करने के लिए:

$ ansible all --list-hosts hosts (2): master slave

इन होस्ट के साथ उपयोग करने योग्य:

प्रोजेक्ट डायरेक्टरी के भीतर, आपको तब ansibleहोस्ट के साथ सामान्य उपयोग करने में सक्षम होना चाहिए जिसे आपने परिभाषित किया था Vagrantfile

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

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