জবাবদিহি করে কীভাবে হোস্ট এসএসএইচ কী তৈরি করা যায়?


11

আমি জবাবদিহি (এবং ssh-keygen) মাধ্যমে মুষ্টিমেয় রিমোট সার্ভারগুলিতে ssh হোস্ট কীগুলি পুনরায় জেনারেট করার চেষ্টা করছি , তবে ফাইলগুলি প্রদর্শিত হবে বলে মনে হচ্ছে না। প্লেবুক ঠিক আছে, তবে রিমোটের ফাইলগুলি পরিবর্তন করা হয়নি।

আমাকে এই echo -eহ্যাকারিটির অবলম্বন করতে হবে যেহেতু এই দূরবর্তীগুলি উবুন্টু ১৪.০৪ চলছে এবং এর সঠিক সংস্করণ python-pexpectউপলব্ধ নেই (উত্তর অনুসারে)।

আমি কী মিস করছি? আমার প্লেবুক এবং আউটপুট নীচে রয়েছে:

প্লেবুক

---
- hosts: all
  become: true
  gather_facts: false

  tasks:
    - name: Generate /etc/ssh/ RSA host key
      command : echo -e 'y\n'|ssh-keygen -q -t rsa -f /etc/ssh/ssh_host_rsa_key -C "" -N ""
      register: output
    - debug: var=output.stdout_lines

    - name: Generate /etc/ssh/ DSA host key
      command : echo -e 'y\n'|ssh-keygen -q -t dsa -f /etc/ssh/ssh_host_dsa_key -C "" -N ""
      register: output
    - debug: var=output.stdout_lines

    - name: Generate /etc/ssh/ ECDSA host key
      command : echo -e 'y\n'|ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -C "" -N ""
      register: output
    - debug: var=output.stdout_lines

আউটপুট

$ ansible-playbook ./playbooks/ssh-hostkeys.yml -l myhost.mydom.com, 
SUDO password: 

PLAY [all] **********************************************************************************************

TASK [Generate /etc/ssh/ RSA host key] ******************************************************************
changed: [myhost.mydom.com]

TASK [debug] ********************************************************************************************
ok: [myhost.mydom.com] => {
    "output.stdout_lines": [
        "y", 
        "|ssh-keygen -q -t rsa -f /etc/ssh/ssh_host_rsa_key -C  -N "
    ]
}

TASK [Generate /etc/ssh/ DSA host key] ******************************************************************
changed: [myhost.mydom.com]

TASK [debug] ********************************************************************************************
ok: [myhost.mydom.com] => {
    "output.stdout_lines": [
        "y", 
        "|ssh-keygen -q -t dsa -f /etc/ssh/ssh_host_dsa_key -C  -N "
    ]
}

TASK [Generate /etc/ssh/ ECDSA host key] ****************************************************************
changed: [myhost.mydom.com]

TASK [debug] ********************************************************************************************
ok: [myhost.mydom.com] => {
    "output.stdout_lines": [
        "y", 
        "|ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -C  -N "
    ]
}

PLAY RECAP **********************************************************************************************
myhost.mydom.com : ok=6    changed=3    unreachable=0    failed=0  

উত্তর:


14

আমি যতদূর জানি যে কেবলমাত্র ssh-keygen এ আপনাকে 'y' পাইপ লাগাতে হবে তার কারণ হ'ল যদি আপনার কমান্ডটি কোনও বিদ্যমান ফাইলটি প্রতিস্থাপন করে। আমার মতে এটি একটি কনফিগারেশন পরিচালন সরঞ্জাম থেকে কিছু করার ভাল উপায় নয়।

আপনার কাজগুলিকে আদর্শহীন করতে আপনার সামঞ্জস্য করা উচিত। বিশেষত আপনি যদি creates: filenameআপনার কমান্ডটিতে যুক্ত করেন, তবে নতুন কীগুলি কেবল তখনই তৈরি হবে যখন সেগুলি ইতিমধ্যে উপস্থিত নেই, প্রতিবার আপনি যখন সেই প্লেবুক চালাবেন প্রতিস্থাপনের পরিবর্তে।

---
- hosts: all
  become: true
  gather_facts: false

  tasks:
  - name: Generate /etc/ssh/ RSA host key
    command : ssh-keygen -q -t rsa -f /etc/ssh/ssh_host_rsa_key -C "" -N ""
    args:
      creates: /etc/ssh/ssh_host_rsa_key

  - name: Generate /etc/ssh/ DSA host key
    command : ssh-keygen -q -t dsa -f /etc/ssh/ssh_host_dsa_key -C "" -N ""
    args:
      creates: /etc/ssh/ssh_host_dsa_key

  - name: Generate /etc/ssh/ ECDSA host key
    command : ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -C "" -N ""
    args:
      creates: /etc/ssh/ssh_host_ecdsa_key

যদি কোনও কারণে আপনি এই কীগুলি প্রতিস্থাপন করতে চেয়েছিলেন উদাহরণস্বরূপ যদি সেগুলি খুব বেশি বয়স্ক হয়ে থাকে বা এমন কিছু আপনি এগুলি অপসারণ করতে অন্য কোনও কাজ যুক্ত করতে পারেন। এখানে একটি সরান মুছে দিন

- file:
    state: absent:
    path: "{{item}}"
  loop:
  - /etc/ssh/ssh_host_rsa_key
  - /etc/ssh/ssh_host_dsa_key
  - /etc/ssh/ssh_host_ecdsa_key

যদি আপনি একটি নির্দিষ্ট সময়ের আগে উত্পন্ন ফাইলগুলি মুছতে চান, আপনি এই ফাইলগুলি সম্পর্কে বিশদ পুনরুদ্ধার করতে স্ট্যাটাস মডিউলটি ব্যবহার করতে পারেন এবং সেটআপের whenশর্তাদি নির্দিষ্টভাবে বা তারিখের কিছু হলে তারা নির্বাচিতভাবে তাদের অপসারণ করতে পারেন।


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

আপনি যদি সর্বদা এটি অপসারণ করতে চান, তবে আমি সম্ভবত file: state:absent ...এসআইএস-কীজেনের জন্য পাইপিং স্টাফের উপর দৃষ্টিভঙ্গি করব । যদিও সেখানে খুব একটা পার্থক্য নেই।
জোরডাচি

আহ, ঠিক আছে. যে আরও বোধগম্য। absentকয়েকদিন আগে আমি জানতাম না । কার্যকরভাবে এটি কীটি পুনরায় তৈরি করার আগে ফাইলটি মুছবে। এটি অনেক পরিষ্কার পদ্ধতি। ধন্যবাদ।
সার্ভার ফল্ট

6

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

আপনার যদি শেল দ্বারা প্রক্রিয়া করা কমান্ড লাইনটি প্রয়োজন হয় তবে তারshell পরিবর্তে ব্যবহার করুন command

এবং, ssh হোস্ট কীগুলি পুনরুত্থানের আরও ভাল উপায় হওয়া উচিত, তবে আমি এখনই একটি খুঁজে পাচ্ছি না ...


শেল বনাম কমান্ড টিপের জন্য ধন্যবাদ (এখন ভাল কাজ করে) আমি জানতাম না - এখনও জবাবদিহি করার জন্য বেশ নতুন
সার্ভার ফল্ট

সর্বশেষ বিবৃতিটি সম্পর্কে (কমপক্ষে CentOS / RHEL তে) আপনি যদি পুরানো কীগুলি সরিয়ে ফেলা করেন এবং ডেমোনের হোস্ট কীগুলি আপনার জন্য পুনরায় জেনারেট করা হয়। আপনার যাহাই হউক না কেন পরিষেবাটি পুনরায় চালু করতে হবে যাতে এটি অবশ্যই কিছুটা ভাল বলে মনে হয়।
অ্যারন কোপলি

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

কোনও উদ্বেগ নেই, কেবল ভেবেছিলাম আমি এটি উল্লেখ করব। (আপনি হয়ত জানেন, কিন্তু ওপি নাও পারে))
অ্যারন কপলি

@ অ্যারোন কোপালি - ঘটনাচক্রে, আমি এই কাজটি শেষ করেছি। echo ...বিট একটি দ্বিতীয় রান (আমি পরীক্ষা ছিল পরে কাজ করে নি /tmp/যা চাবি প্রায় প্রথমবার উপস্থিত করেনি)। আপনার উল্লেখ হিসাবে আমি প্রথমে হোস্ট কীগুলি সরানোর এবং নতুন উত্পন্ন করার জন্য রিসর্ট করেছি। যতক্ষণ না কীগুলি স্বয়ংক্রিয়ভাবে পুনরায় জেনারেট করা হয়েছে, এটি আপনার বিতরণের উপর নির্ভরশীল, তাই না? সমস্ত লিনাক্স ডিস্ট্রো সিস্টেমেড ব্যবহার করে না।
সার্ভার ফল্ট

2

এই কাজের জন্য বিশেষ মডিউলটি ব্যবহার করুন:

- name: Generate an OpenSSH keypair with the default values (4096 bits, rsa)
  openssh_keypair:
    path: /home/youruser/.ssh/id_rsa
    owner: youruser
    group: youruser

- name: Fix owner of the generated pub key
  file:
    path: /home/youruser/.ssh/id_rsa.pub
    owner: youruser
    group: youruser

এগুলি ssh হোস্ট কী নয়
কুমজ

1

দুঃখিত, তবে আমি কোনও কার্যে "ক্রিয়েস" ব্যবহার করতে পারি নি। আমি নিম্নলিখিত ত্রুটি পেয়েছি:

ERROR! 'creates' is not a valid attribute for a Task

ফলস্বরূপ, আমি নিম্নলিখিত কাজগুলি ব্যবহার করি:

- name: remove existing ssh_host keys
  file: path={{ item }} state=absent
  with_items:
    - "/etc/ssh/ssh_host_rsa_key"
    - "/etc/ssh/ssh_host_dsa_key"
    - "/etc/ssh/ssh_host_ecdsa_key"

- name: Generate /etc/ssh/ RSA host key
  command : ssh-keygen -q -t rsa -f /etc/ssh/ssh_host_rsa_key -C "" -N ""

- name: Generate /etc/ssh/ DSA host key
  command : ssh-keygen -q -t dsa -f /etc/ssh/ssh_host_dsa_key -C "" -N ""

- name: Generate /etc/ssh/ ECDSA host key
  command : ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -C "" -N ""

2
উত্তরযোগ্য একটি বর্তমান সংস্করণ ব্যবহার করুন।
মাইকেল হ্যাম্পটন 18

আপনি ঠিক বলেছেন, আমার উত্তরীয় সংস্করণটি কিছুটা পুরানো: ২.০.০.২.২ (উবুন্টুতে ১ 16.০৪)। আমাকে বদলাতে হবে!
ম্যাক্সিআরগ্লিস

1

@ জোরেডাচের সঠিক উত্তর রয়েছে তবে এটি উত্তরীয়দের সাম্প্রতিক সংস্করণগুলির জন্য (@ ম্যাক্সিরিগ্লিজ দ্বারা চিহ্নিত) ব্যর্থ হয়েছে। পরিবর্তে নিম্নলিখিত কোড ব্যবহার করুন:

---
- hosts: all
  become: true
  gather_facts: false

  tasks:
  - name: Generate /etc/ssh/ RSA host key
    command : ssh-keygen -q -t rsa -f /etc/ssh/ssh_host_rsa_key -C "" -N ""
    args:
      creates: /etc/ssh/ssh_host_rsa_key

1

আরেকটি বিকল্প হ'ল ব্যবহারকারীর মডিউল ব্যবহার করা । এর ইতিবাচক দিকটি হ'ল আপনি একটি আদর্শবান কাজ পাবেন। লোকালহোস্টে কীভাবে ssh কী উত্পন্ন করা যায় তার একটি উদাহরণ এখানে দেওয়া হয়েছে:

- name: Generate ssh keys
  local_action:
    module: "user"
    name: "{{ lookup('env','USER') }}"
    generate_ssh_key: true
    ssh_key_type: "{{ item.0 }}"
    ssh_key_bits: "{{ item.1 }}"
    ssh_key_file: "{{ playbook_dir }}/{{ item.0 }}_{{ item.1 }}_key"
  with_together:
  - [ 'rsa', 'dsa' ]
  - [ 2048, 1024 ]
  loop_control:
    label: "{{ item.0 }}_{{ item.1 }}_key"

- name: Copy generated ssh keys to remote machine
  copy:
    src: "{{ playbook_dir }}/{{ item.0 }}_{{ item.1 }}_key"
    dest: "/etc/ssh/ssh_host_{{ item.0 }}_key{{ item.1 }}"
  with_nested:
  - [ 'rsa', 'dsa' ]
  - [ '', '.pub' ]
  notify:
  - Restart sshd
  loop_control:
    label: "/etc/ssh/ssh_host_{{ item.0 }}_key{{ item.1 }}"

1
এটি কি ব্যবহারকারী কীগুলির জন্য নয়, হোস্ট কী নয়?
ম্যাডহ্যাটার

আপনি এটি হোস্ট কীগুলির জন্যও ব্যবহার করতে পারেন কারণ এটি আসলে একই জিনিস। আপনি যদি বল প্রয়োগের মোডে
সেলইনাক্স

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

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

আমি এখনও নিশ্চিত নই যে এটি হ্যাক ছাড়া অন্য কিছু (অন্তত নয় কারণ এটি একজন ব্যবহারকারীকে হোস্টের ব্যক্তিগত কপির একটি অনুলিপি দিয়ে ফেলেছে!) তবে কমপক্ষে এটি এমন কিছু যা এখন জিজ্ঞাসা করা প্রশ্নটির উত্তর দেবে, তাই আমি আমার সরিয়ে ফেলেছি downvote।
ম্যাডহ্যাটার

0

আপনার জবাবদিহি হোস্টে সংরক্ষণ না করে একই সময়ে কীগুলি তৈরি এবং স্থাপন করতে ওপেনশ_কিপায়ার এবং অনুমোদিত_কি মডিউলটি ব্যবহার করুন।

- openssh_keypair:
    group: root
    owner: root
    path: /some/path/in/your/server
    register: ssh_key

- name: Store public key into origin
  delegate_to: central_server_name
  authorized_key:
     key: "{{ssh_key.public_key}}"
     comment: "{{ansible_hostname}}"
     user: any_user_on_central
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.