2014-09-02 4 views
29

मेरे पास 2 एप सर्वर हैं जो उनके सामने लोडबैंसर और मेरे सिस्टम में 1 डेटाबेस सर्वर हैं। मैं Ansible का उपयोग कर उन्हें प्रावधान कर रहा हूँ। ऐप सर्वर में Nginx + यात्री है और एक रेल ऐप के लिए चल रहा है। तैनाती के लिए capistrano का उपयोग करेंगे, लेकिन मुझे एसएसएच कुंजी के बारे में एक मुद्दा है। मेरा गिट रेपो किसी अन्य सर्वर में है और मुझे ऐप्स सर्वर पर एसएसएच सार्वजनिक कुंजी उत्पन्न करना है और उन्हें गिट सर्वर (अधिकृत_की फाइल में) में जोड़ना है। मैं उत्तरदायी प्लेबुक में यह कैसे कर सकता हूं?उत्तरदायी प्रति एसएस कुंजी एक मेजबान से दूसरे

पीएस: मेरे पास 2 से अधिक ऐप सर्वर हो सकते हैं।

enter image description here

+0

के लिए है? क्या यह एक गिटलैब उदाहरण है? क्या आपको केवल अधिकृत_की फाइल में कुंजियां जोड़नी होंगी? – leucos

+0

मुझे केवल अधिकृत_कीज फ़ाइल – beydogan

उत्तर

23

कैसे अपने सार्वजनिक कुंजी का प्रबंधन करने के बारे में जानकारी प्राप्त करने के लिए authorized_key module को एक नजर डालें।

सबसे सरल समाधान जो मैं सोच सकता हूं, आपके एप्लिकेशन के लिए एक ताजा कुंजी जोड़ी उत्पन्न करना होगा, जो आपके सभी ऐप उदाहरणों में साझा किया जाएगा। इसमें सुरक्षा प्रभाव हो सकते हैं (आप वास्तव में सभी मामलों के बीच कुंजी साझा कर रहे हैं!), लेकिन यह बहुत प्रावधान प्रक्रिया को सरल बना देगा।

आपको तैनाती प्रक्रिया के दौरान बाद में उपयोग करने के लिए प्रत्येक ऐप मशीन पर एक उपयोगकर्ता को तैनात करने की आवश्यकता होगी। प्रत्येक उपयोगकर्ता को authorized_keys पर तैनात करने पर आपको अपनी सार्वजनिक कुंजी (या जेनकींस एक) की आवश्यकता होगी।

स्केच प्लेबुक:

--- 
- name: ensure app/deploy public key is present on git server 
    hosts: gitserver 
    tasks: 
    - name: ensure app public key 
     authorized_key: 
     user: "{{ git_user }}" 
     key: app_keys/id_dsa.pub 
     state: present 

- name: provision app servers 
    hosts: appservers 
    tasks: 
    - name: ensure app/deploy user is present 
     user: 
     name: "{{ deploy_user }}" 
     state: present 

    - name: ensure you'll be able to deploy later on 
     authorized_key: 
     user: "{{ deploy_user }}" 
     key: "{{ path_to_your_public_key }}" 
     state: present 

    - name: ensure private key and public one are present 
     copy: 
     src: keys/myapp.private 
     dest: "/home/{{ deploy_user }}/.ssh/{{ item }}" 
     mode: 0600 
     with_items: 
     - app_keys/id_dsa.pub 
     - app_keys/id_dsa 
1

मैं एक तैनाती उपयोगकर्ता है कि आपके रेपोस के लिए उपयोग खींचने के लिए प्रतिबंधित है पैदा करेगा। आप या तो http या there are a few options to do it over ssh के माध्यम से इसे अनुमति दे सकते हैं।

यदि आपको उपयोगकर्ता को केवल अपने रेपो तक पहुंचने के लिए सीमित करने की परवाह नहीं है तो आप एक सामान्य एसएसएच उपयोगकर्ता बना सकते हैं। उपयोगकर्ता बनने के बाद आप गिट सर्वर पर अधिकृत कुंजी फ़ाइल में उपयोगकर्ता की सार्वजनिक कुंजी जोड़ने के लिए उत्तरदायी का उपयोग कर सकते हैं, आप authorized key module का उपयोग कर सकते हैं।

एक बार है कि सेटअप है आप दो विकल्प हैं:

  1. आप ताकि उपयोगकर्ता कि Ansible कार्य चलाने के लिए प्रयोग किया जाता है डेव सर्वर करने के लिए अपने सार्वजनिक कुंजी भेजता ssh उपयोग ssh कुंजी अग्रेषण का उपयोग करते हैं।

  2. अस्थायी रूप से कुंजी को स्थानांतरित करें और उपयोगकर्ता की सार्वजनिक कुंजी को तैनात करने के लिए ssh_optsgit module option का उपयोग करें।

18

यह मेरे लिए काम कर देता है, यह नोड्स पर सार्वजनिक SSH कुंजियों को एकत्र करता है और सभी नोड्स पर वितरित करता है। इस तरह वे एक-दूसरे के साथ संवाद कर सकते हैं।

- hosts: controllers 
    gather_facts: false 
    remote_user: root 
    tasks: 
    - name: fetch all public ssh keys 
     shell: cat ~/.ssh/id_rsa.pub 
     register: ssh_keys 
     tags: 
     - ssh 

    - name: check keys 
     debug: msg="{{ ssh_keys.stdout }}" 
     tags: 
     - ssh 

    - name: deploy keys on all servers 
     authorized_key: user=root key="{{ item[0] }}" 
     delegate_to: "{{ item[1] }}" 
     with_nested: 
     - "{{ ssh_keys.stdout }}" 
     - "{{groups['controllers']}}" 
     tags: 
     - ssh 

जानकारी: यह आप कैसे आप Git सर्वर पर कुंजी प्रबंधन पर विस्तार से बता सकता है उपयोगकर्ता root

+2

पर कुंजी जोड़नी है, मैंने इस विचार को अनुकूलित किया लेकिन 'local_action: ssh-agent -L' के साथ और इसके बारे में ब्लॉग किया: http://dannyman.toldme.com/2016/07/01/ansible-use -एसएसएच-एड-टू-सेट-अधिकृत_की/तो ** धन्यवाद !! ** – dannyman

+3

अच्छा, यह काम करता है, लेकिन मुझे समझ में नहीं आ रहा है कि आपने 'shell: user = root key ...' अधिकृत_की: उपयोगकर्ता = रूट कुंजी ... '।मैंने इस स्निपेट को आजमाया लेकिन इसे खोल के साथ काम नहीं कर सकता, अधिकृत_की आकर्षण की तरह काम करता है। – Thomas8

+0

@ थॉमस 8: मेरे द्वारा गलती की जांच, अच्छा स्पॉटिंग! –

संबंधित मुद्दे