অ-রুট ব্যবহারকারী তৈরি করুন এবং জবাবদিহি করে রুট এসএসএইচ অক্ষম করুন


9

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

এটি একটি সমস্যা কারণ আমি এখন থেকে সেই প্লেবুকটি আর চালাতে পারি না যেহেতু রুট লগইন অক্ষম করা হয়েছে! আমি চাইব যে প্লেবুকটি আদর্শবান হয়ে উঠুক এবং হোস্টগুলি বুটস্ট্র্যাপ করার পরে যুক্ত এবং মুছে ফেলতে হবে না।


1
আপনি এখানে কিছু অনুপ্রেরণা পেতে পারেন ।
কনস্ট্যান্টিন সুভেরভ

উত্তর:


5

আমি এটি এইভাবে করতে পছন্দ করি:

- hosts: all
  remote_user: root
  gather_facts: no
  tasks:
    - name: Check ansible user
      command: ssh -q -o BatchMode=yes -o ConnectTimeout=3 ansible@{{ inventory_hostname }} "echo OK"
      delegate_to: 127.0.0.1
      changed_when: false
      failed_when: false
      register: check_ansible_user
    - block:
      - name: Create Ansible user
        user:
          name: ansible
          comment: "Ansible user"
          password: $6$u3GdHI6FzXL01U9q$LENkJYHcA/NbnXAoJ1jzj.n3a7X6W35rj2TU1kSx4cDtgOEV9S6UboZ4BQ414UDjVvpaQhTt8sXVtkPvOuNt.0
          shell: /bin/bash
      - name: Add authorized key
        authorized_key:
          user: ansible
          key: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"
          exclusive: yes
      - name: Allow sudo for ansible
        copy:
          content: ansible ALL=(ALL) ALL
          dest: /etc/sudoers.d/ansible
          mode: 0600
      when: check_ansible_user | failed

আমি আমার উত্তরযোগ্য ব্যবহারকারীর সাথে দূরবর্তী হোস্টের সাথে সংযোগ স্থাপনের চেষ্টা করি। যদি এটি অসম্ভব (প্রথম দৌড়ে), আমি রুট হিসাবে সংযুক্ত হয়েছি authorized_keysএবং এর ফাইল এবং sudoঅধিকারের সাথে উত্তরকারী ব্যবহারকারী তৈরি করি ।

পরবর্তী রানগুলিতে, জবাবদিহি ব্যবহারকারী হিসাবে সংযুক্ত হওয়া কাজ করে, সুতরাং কার্যগুলির ব্লক এড়ানো যায়।

রিমোট হোস্টটি একবার বুটস্ট্র্যাপ হয়ে গেলে আমি উত্তরসূচক ব্যবহারকারীর সাথে যেতে পারি এবং become:

- hosts: all
  remote_user: ansible
  become: yes
  roles:
    - ...

remote_userপ্রথম পর্বের পরে আপনি কী নিজের প্লেবুকটিতে ম্যানুয়ালি পরিবর্তন করছেন ? এটি আদর্শবান নয়। আমি আশা করি আমি কিছু মিস করছি
ডিফোর

1
তুমি কর, আমি নিজে কিছু পরিবর্তন করি না change দুটি কোডমাল দুটি পৃথক নাটকের প্রতিনিধিত্ব করে (সম্ভবত এটি তাদের কল হিসাবে কল্পনা করতে সহায়তা করে bootstrap.ymlএবং site.ymlযেখানে অন্য কোনও কিছুর আগে site.ymlঅন্তর্ভুক্ত রয়েছে bootstrap.yml)। যদি প্রথম কাজটি bootstrap.ymlব্যর্থ হয় তবে এই নাটকের অন্যান্য সমস্ত কাজ বাদ দেওয়া হয় এবং site.ymlশেষ হয়।
মাইকেল ট্রোজানেক

কোড স্নিপেট কপি-পেস্ট করা হয়েছে, তবে কার্যক্রমে অবরুদ্ধ হওয়া জবাবদিহি করা যায় না "skip_reason": "Conditional result was False"। সাথে নাটকটি চালানো -vvvএসএসএল কলের রিটার্ন দেখায়"msg": "non-zero return code", "rc": 255,
রাফা

আমি whenশর্তটি পরিবর্তন করে স্থির করেছি :when: not "OK" in check_ansible_user.stdout
রাফা

2

আমি নিম্নলিখিত করতে হবে:

  • একটি ভূমিকা তৈরি করুন ('বেস'-এর মতো কিছু) যেখানে আপনি (অন্যান্য জিনিসগুলির মধ্যে), ব্যবহারের জন্য উত্তর দেওয়ার জন্য উপযুক্ত ব্যবহারকারী (এবং সুডোর নিয়ম) তৈরি করুন
  • পরিচালনা বা পরিচালনা করার জন্য, এসএসএইচের জন্য আপনার ভূমিকা তৈরি বা মানিয়ে নিন sshd_config(আমি আপনাকে সম্পূর্ণ ফাইলটি পরিচালনা করার পরামর্শ দিচ্ছি template, তবে এটি আপনার উপর নির্ভর করে), এবং রুট লগইনগুলি অক্ষম করুন
  • আপনার এসএসএইচ ভূমিকাটি বেস রোলের উপর নির্ভর করে, যেমন মেটা ব্যবহার করে।

প্রথম ভূমিকার জন্য (বেসটি এক), আমি এর মতো কিছু ব্যবহার করার প্রবণতা রাখি:

 name: base | local ansible user | create user
  user:
    name: "{{ local_ansible_user }}"
    group: "{{ local_ansible_group }}"
    home: "/home/{{ local_ansible_user }}"
    state: present
    generate_ssh_key: "{{ local_ansible_generate_key }}"
    ssh_key_bits: 4096
    ssh_key_type: rsa
  tags:
    - ansible
    - local_user

- name: base | local ansible user | provision authorised keys
  authorized_key:
    user: "{{ local_ansible_user }}"
    state: present
    key: "{{ item }}"
  with_items: "{{ local_ansible_authorised_keys }}"
  tags:
    - ansible
    - authorised_keys

এসএসএইচ কনফিগারেশনের জন্য, আমি ব্যবহার করব:

- name: openssh | server | create configuration
  template:
    src: sshd_config.j2
    dest: /etc/ssh/sshd_config
    owner: root
    group: root
    mode: "0640"
    validate: "/usr/sbin/sshd -tf %s"
  notify:
    - openssh | server | restart
  tags:
    - ssh
    - openssh

উত্তরীর ভূমিকা নির্ভরতা এখানে নথিভুক্ত করা হয়

এটি করার জন্য আপনি কেবল আপনার প্লেবুকের মধ্যে ক্রম ব্যবহার করতে পারেন।

গিথুবটিতে আমার কাছে কিছু উত্তরযোগ্য জিনিস রয়েছে (যা থেকে উপরের অংশটি নেওয়া হয়েছে), যদি আপনি এটি প্রসঙ্গে দেখতে চান


2

আপনার সাথে Linode আপনার সার্ভার তৈরি করেন linode মডিউল আপনি রেজিস্টার পারে return valueএর linodeটাস্ক এবং একটি শর্ত linode কাজটি outout পরীক্ষণ সঙ্গে বুটস্ট্র্যাপ কর্ম অন্তর্ভুক্ত। এটা আদর্শবান হওয়া উচিত। এরকম কিছু চেষ্টা করুন:

- linode:
    api_key: 'longStringFromLinodeApi'
    name: linode-test1
    plan: 1
    datacenter: 2
    distribution: 99
    password: 'superSecureRootPassword'
    private_ip: yes
    ssh_pub_key: 'ssh-rsa qwerty'
    swap: 768
    wait: yes
    wait_timeout: 600
    state: present
  register: linode_node

- include: bootstrap.yml
  when: linode_node.changed

bootstrap.yml ssh রুট লগইন অক্ষম করার জন্য প্রয়োজনীয় সমস্ত কাজ এবং এর সাথে যুক্ত করে।


-1

হতে পারে আপনি শুধু পরিবর্তন পারে ansible_ssh_userমধ্যে জায় পর হোস্ট স্থানে বুট-স্ট্র্যাপ আছে?

[targets]

other1.example.com ansible_connection=ssh ansible_ssh_user=root # new host
other2.example.com ansible_connection=ssh ansible_ssh_user=user # bootstrapped host
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.