2014-10-05 8 views
6

मैं दूरस्थ सर्वर से SSH कुंजियों को हटाने के लिए एक ansible स्क्रिप्ट लिखा है कई SSH कुंजियां जोड़ें:ansible का उपयोग कर

--- 
- name: "Add keys to the authorized_keys of the user ubuntu" 
    user: ubuntu 
    hosts: www 
    tasks: 
    - name: "Remove key #1" 
    authorized_key: user=ubuntu key="{{ item }}" state=absent 
    with_file: 
    - id_rsa_number_one.pub 
    - name: "Remove key #2" 
    authorized_key: user=ubuntu key="{{ item }}" state=absent 
    with_file: 
    - id_rsa_number_two.pub 
... 

रूप में एक अलग कार्य निरर्थक है, तो मैं with_fileglob उपयोग करने की कोशिश की है कि प्रत्येक फ़ाइल जोड़ना:

- name: "Remove all keys at once" 
    authorized_key: user=ubuntu key="{{ item }}" state=absent 
    with_fileglob: 
     - /Users/adamatan/ansible/id_rsa*.pub 

लेकिन यह इस तरह लाइनों के साथ विफल रहता है:

विफल रहा है: [www.example.com] => (आइटम =/उपयोगकर्ता/adamatan/ansible/id_rsa_one.pub) => {"विफल": सत्य, "आइटम": "/Users/adamatan/ansible/id_rsa_one.pub"} msg: अमान्य कुंजी निर्दिष्ट:/उपयोगकर्ताओं/adamatan/ansible/id_rsa_one.pub

एक ही कुंजी फ़ाइल सफलतापूर्वक एक अद्वितीय कार्य का उपयोग कर निकाल दिया जाता है, लेकिन विफल रहता है जब यह एक fileglob का एक हिस्सा है।

मैं उत्तरदायी का उपयोग करके एसएसएच कुंजी को जोड़ या हटा सकता हूं?

उत्तर

11

मेरा मानना ​​है कि आप केवल with_fileglob का उपयोग कर फ़ाइल नाम हो रही है, लेकिन with_file फ़ाइल के को पुन: प्राप्त सामग्री। और अधिकृत_की मॉड्यूल को वास्तविक कुंजी की आवश्यकता होती है।

तो आपको अभी भी with_fileglob का उपयोग करके लूप करना चाहिए, लेकिन फ़ाइल नाम को "कुंजी =" पैरामीटर में भेजने की बजाय, आपको file lookup plugin का उपयोग करना चाहिए)।

- name: "Remove all keys at once" 
    authorized_key: user=ubuntu key="{{ lookup('file', item) }}" state=absent 
    with_fileglob: 
     - /Users/adamatan/ansible/id_rsa*.pub 
+2

तो यह संशोधन प्रविष्टियों को थोक अद्यतन/हटाने के लिए बहुत अच्छा काम करता है। यहां मेरा मुद्दा है - मेरे पास ऐसे सर्वर से सर्वर पर कुंजी है जो अब यहां नहीं हैं। सक्रिय कुंजी की मेरी मास्टर सूची के साथ मैं अधिकृत_कीज फ़ाइल को कैसे शुद्ध और ओवरराइट कर सकता हूं? जब मैं इस स्क्रिप्ट को चलाता हूं तो यह मेरी सक्रिय कुंजी को हटा देता है (अगर अनुपस्थित है) या जोड़ता है (यदि मौजूद है) लेकिन यह उन कुंजी को कभी नहीं हटाता है जिनके लिए मेरी * .pub फ़ाइलों में नहीं है। – Valien

+1

@ एकाधिक विशेष कुंजी के लिए वैलियन, इस [पुल अनुरोध] में उदाहरण देखें (https://github.com/ansible/ansible-modules-core/pull/4167/files)। – sudoman

+1

आप कुछ होस्ट समूहों में सभी उपयोगकर्ताओं के लिए '~/.ssh /' भी बना सकते हैं और स्थिर 'अधिकृत_की' फ़ाइलों को कॉपी कर सकते हैं। उस स्थिति में आप फ़ाइल सामग्री पर पूर्ण नियंत्रण होगा। – sudoman