হোস্টগুলির মধ্যে ssh পাবলিক কী বিতরণ করুন


11

আমি জবাবযুক্ত কিছু মেশিন সেট আপ করছি এবং তাদের মধ্যে পাসওয়ার্ড কম সংযোগ সক্ষম করতে হবে। আমি একটি ডাটাবেস মাস্টার এবং বেশ কয়েকটি দাস পেয়েছি। প্রাথমিক প্রতিরূপের জন্য দাসদের মাস্টারে sুকিয়ে ডেটাবেসটির একটি অনুলিপি নেওয়া দরকার। আমি নিশ্চিত নই যে মাস্টার্স authorized_keysফাইলে সমস্ত ক্রীতদাসদের পাবলিক কীগুলি ডায়নামিকভাবে যুক্ত করার সর্বোত্তম উপায় ।

আমি দাসদের পাবলিক কীগুলি ভেরিয়েবল হিসাবে সরবরাহ করার বিষয়ে ইতিমধ্যে ভেবেছিলাম এবং তারপরে authorized_keyমডিউলটির মাধ্যমে সেগুলি যুক্ত করব । তবে তারপরে আমাকে অবশ্যই কীগুলির তালিকা বজায় রাখতে হবে। আমি এমন একটি পদ্ধতির সন্ধান করছি যেখানে আমি কেবলমাত্র অন্য একটি হোস্টকে দাস গ্রুপকে যুক্ত করব এবং বাকীগুলি স্বয়ংক্রিয়ভাবে কাজ করবে।

কোন ধারনা?

হালনাগাদ:

এখন পর্যন্ত আমি নিম্নলিখিত সিউডো কোড পেয়েছি:

# collect public keys from slave machines
- name: collect slave keys
  {% for host in groups['databases_slave'] %}
     shell: /bin/cat /var/lib/postgresql/.ssh/id_rsa.pub
     register: slave_keys #how to add to an array here?
  {% endfor %}

# Tasks for PostgreSQL master
- name: add slave public key
  sudo: yes
  authorized_key: user=postgres state=present key={{ item }}
  with_items: slave_keys

{% %}একমাত্র টেমপ্লেট ফাইলগুলিতে লুপটি সরাসরি প্লেবুকগুলিতে নয়। আমার প্লেবুকে এটি করার কোনও উপায়?

উত্তর:


5

আমি একটি সমাধান নিয়ে এসেছি যা আমার পক্ষে কাজ করে। আমি আমার মেশিনে পাবলিক / প্রাইভেট কী তৈরি করি যেখান থেকে উত্তরীয় চালিত হয় এবং প্রথম সংযোগে আমি কীগুলি স্থানে রেখেছি।

তারপরে আমি সমস্ত দাসদের কাছ থেকে নিম্নলিখিতগুলির সাথে মাস্টারের চাবিগুলি যুক্ত করব:

# Tasks for PostgreSQL master
- name: add slave public key
  sudo: yes
  authorized_key: user=postgres state=present key="{{ lookup('file', '../../../keys/' + item + '/id_rsa.pub') }}"
  with_items: groups.databases_slave

পুরো প্লেবুকটি পাওয়া যাবে github.com/soupdiver/ansible-cluster এ


5

আমি বিশ্বাস করি যে নিম্নলিখিত সমাধানটি আপনার ক্ষেত্রে কাজ করা উচিত। আমি এটি কেন্দ্রীয় ব্যাকআপ সার্ভার এবং একাধিক ব্যাকআপ ক্লায়েন্টগুলির সাথে একই জাতীয় দৃশ্যের জন্য ব্যবহার করছি।

সংস্থাগুলি গ্রহণকারী সার্ভারের সাথে আমার একটি ভূমিকা রয়েছে (যাক " db_replication_master " বলুন) have

    - role: db_replication_master
      db_slaves: ['someserver', 'someotherserver']
      db_slave_user: 'someuser' # in case you have different users
      db_master_user: 'someotheruser'
      extra_pubkeys: ['files/id_rsa.pub'] # other keys that need access to master

তারপরে আমরা db_replication_master ভূমিকাতে আসল কাজগুলি তৈরি করি :

    - name: create remote accounts ssh keys
      user:
        name: "{{ db_slave_user }}"
        generate_ssh_key: yes
      delegate_to: "{{ item }}"
      with_items: db_slaves

    - name: fetch pubkeys from remote users
      fetch:
        dest: "tmp/db_replication_role/{{ item }}.pub"
        src: "~{{db_slave_user}}/.ssh/id_rsa.pub"
        flat: yes
      delegate_to: "{{ item }}"
      with_items: db_slaves
      register: remote_pubkeys
      changed_when: false # we remove them in "remove temp local pubkey copies" below

    - name: add pubkeys to master server
      authorized_key:
        user: "{{ db_master_user }}"
        key: "{{ lookup('file', item) }}"
      with_flattened:
        - extra_pubkeys
        - "{{ remote_pubkeys.results | default({}) | map(attribute='dest') | list }}"

    - name: remove temp local pubkey copies
      local_action: file dest="tmp/db_replication_role" state=absent
      changed_when: false

সুতরাং আমরা মূলত:

  • গতিশীলভাবে সেই দাসদের উপর এসএস-কী তৈরি করা হয় যা এখনও তাদের কাছে নেই
  • তারপর আমরা ব্যবহার করছি delegate_to চালানোর জন্য আনা ক্রীতদাসদের উপর মডিউল এবং ansible চলমান, একটি পরিবর্তনশীল মধ্যে এই অপারেশন ফলাফল সংরক্ষণ হোস্টে তাদের SSH pubkeys আনা তাই আমরা সংগৃহীত ফাইল প্রকৃত তালিকায় প্রবেশ করতে পারবেন
  • এরপরে আমরা অনুমোদিত_কি মডিউল সহ মাস্টার নোডে আনুষঙ্গিকভাবে এসএসএস পাবকিজ (আরও যে কোনও অতিরিক্ত পাবকি সরবরাহ করা হয়) ধাক্কা দিয়ে এগিয়ে যাই (আমরা উপরের টাস্কের ভেরিয়েবল থেকে ফাইলপথগুলি খনন করতে দু'টি জিনজা 2 ফিল্টার ব্যবহার করি)
  • অবশেষে আমরা স্থানীয়ভাবে ক্যাশযুক্ত পবকি ফাইলগুলি জবাবদিহি করে চলমান হোস্টে সরিয়ে ফেলি

সমস্ত হোস্টে একই ব্যবহারকারী থাকার সীমাবদ্ধতা সম্ভবত প্রায় কাজ করা যেতে পারে, তবে আমি আপনার প্রশ্ন থেকে যা পাই তা সম্ভবত আপনার পক্ষে কোনও সমস্যা নয় (এটি আমার ব্যাকআপ দৃশ্যের জন্য কিছুটা প্রাসঙ্গিক)। আপনি অবশ্যই কী প্রকারটি (আরএসএ, ডিএসএ, এক্সডিএসএ ইত্যাদি) কনফিগারযোগ্য করে তুলতে পারেন।

আপডেট : ওফ, আমি মূলত আমার সমস্যার নির্দিষ্ট শব্দগুলির ব্যবহার করে লিখেছি , আপনার নয়! এখন আরও বোধ করা উচিত।


0

আমি একই সমস্যা পেয়েছি এবং আমি এটি এইভাবে সমাধান করেছি:

---
# Gather the SSH of all hosts and add them to every host in the inventory
# to allow passwordless SSH between them
- hosts: all
  tasks:
  - name: Generate SSH keys
    shell: ssh-keygen -q -t rsa -f /root/.ssh/id_rsa -N ''
    args:
      creates: /root/.ssh/id_rsa

  - name: Allow passwordless SSH between all hosts
    shell: /bin/cat /root/.ssh/id_rsa.pub
    register: ssh_keys

  - name: Allow passwordless SSH between all hosts
    lineinfile:
      dest: /root/.ssh/authorized_keys
      state: present
      line:  " {{ hostvars[item]['ssh_keys']['stdout'] }}"
    with_items: "{{ groups['all']}}"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.