ปรับใช้คีย์ ssh จากมาสเตอร์ไปยังมิเนียนผ่านทางเสาเกลือ


11

ฉันมีสองปุ่ม ssh ที่ฉันพยายามปรับใช้กับหนึ่งในลูกน้องของฉัน แต่ฉันไม่สามารถนำไปใช้งานได้ มันผิดพลาด นี่คือinit.slsเสาหลัก:

/xxx/yyy/zzz/id_rsa:
  file.managed:
    - source: salt://private/id_rsa

/xxx/yyy/zz/id_rsa.pub:
  file.managed:
    - source: salt://private/id_rsa.pub

นี่คือinit.slsสถานะของฉัน:

ssh:
  file.managed:
    - name: {{ pillar['private'] }}

ฉันต้องทำอะไรผิด (ชัด) แต่ฉันไม่แน่ใจ ข้อเสนอแนะใด ๆ


ฉันต้องการความช่วยเหลือ แต่ฉันไม่สามารถตอบข้อมูลที่ให้ไว้ได้ ส่วนหนึ่งของเหตุผลคือการจัดรูปแบบ yaml แก้ไขคำถามของคุณ แต่ปล่อยให้ลิงก์ว่างด้านบนและด้านล่างแต่ละบล็อคโค้ดจากนั้นเยื้องแต่ละบรรทัดในโค้ดบล็อกโดยอย่างน้อย 4 ช่องว่าง ประการที่สองคุณประสบความสำเร็จในการทำสิ่งนี้โดยปราศจากเสาหลักในสมการหรือไม่? ฉันไม่เคยเห็นข้อมูลเสาตั้งพวกเขาในแบบที่คุณมี
Dan Garthwaite

คุณพบคำตอบสำหรับคำถามของคุณหรือไม่
Dan Garthwaite

ใช่ฉันเชื่อว่าฉันได้
secure212

คำตอบ:


13

ระบบเสาเกลือไม่มีไฟล์ init.sls ทั้งรัฐและเสามีไฟล์ top.sls สถานะที่เป็นไดเรกทอรีย่อยอาจมีไฟล์ init.sls

ขั้นตอนที่ 1: กำหนดผู้ใช้ของคุณใน /srv/pillar/users.sls

users:

  - name: fred
    fullname: Fred Flintstone
    email: fflintstone@slaterockandgravel.com
    uid: 4001
    gid: 4001
    shell: /bin/bash
    groups:
      - bowling
    shadow: $6$Sasdf/Ss$asdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfsadfasdfsadfsadfsdf
    authkey: ssh-dss AAAAasdfasdfsadfsadfsadfsadfasdfasdfsdafsdafaasdfasdfasdfasdfasdfsadfsadfsadfsadfasdfasdfsdafsdafaasdfasdfasdfasdfasdfsadfsadfsadfsadfasdfasdfsdafsdafaasdfasdfasdfasdfasdfsadfsadfsadfsadfasdfasdfsdafsdafa = fflinstone@slaterockandgravel.com
    sshpub: ssh-dss AAAAasdfasdfsadfsadfsadfsadfasdfasdfsdafsdafaasdfasdfasdfasdfasdfsadfsadfsadfsadfasdfasdfsdafsdafaasdfasdfasdfasdfasdfsadfsadfsadfsadfasdfasdfsdafsdafaasdfasdfasdfasdfasdfsadfsadfsadfsadfasdfasdfsdafsdafa = fflinstone@slaterockandgravel.com

  - name: barney
    fullname: Barney Rubble
    email: brubbel@slaterockandgravel.com
    uid: 4002
    gid: 4002
    shell: /bin/bash
    groups:
      - bowling
    shadow: $6$Suiop/Ss$uiopuiopuiopuiopuiopuiopuiopuiopuiopuiopuiopsadfuiopsadfsadfsdf
    authkey: ssh-dss AAAAuiopuiopsadfsadfsadfsadfuiopuiopsdafsdafauiopuiopuiopuiopuiopsadfsadfsadfsadfuiopuiopsdafsdafauiopuiopuiopuiopuiopsadfsadfsadfsadfuiopuiopsdafsdafauiopuiopuiopuiopuiopsadfsadfsadfsadfuiopuiopsdafsdafa = fflinstone@slaterockandgravel.com
    sshpub: ssh-dss AAAAuiopuiopsadfsadfsadfsadfuiopuiopsdafsdafauiopuiopuiopuiopuiopsadfsadfsadfsadfuiopuiopsdafsdafauiopuiopuiopuiopuiopsadfsadfsadfsadfuiopuiopsdafsdafauiopuiopuiopuiopuiopsadfsadfsadfsadfuiopuiopsdafsdafa = fflinstone@slaterockandgravel.com

ขั้นตอนที่ 2: เพิ่มเสาใหม่ไปที่ /srv/pillar/top.sls

base:
  'testminion':
    - users

ขั้นตอนที่ 3: ใช้ jinja เพื่อแมปหลักไปยังสถานะใน /srv/salt/user/init.sls

{% for user in pillar['users'] %}
user_{{user.name}}:
  group.present:
    - name: {{user.name}}
    - gid: {{user.gid}}

  user.present:
    - name: {{user.name}}
    - fullname: {{user.fullname}}
    - password: {{user.shadow}}
    - shell: {{user.shell}}
    - uid: {{user.uid}}
    - gid: {{user.gid}}
    {% if user.groups %}
    - optional_groups:
      {% for group in user.groups %}
      - {{group}}
      {% endfor %}
    {% endif %}
    - require:
      - group: user_{{user.name}}

  file.directory:
    - name: /home/{{user.name}}
    - user: {{user.name}}
    - group: {{user.name}}
    - mode: 0751
    - makedirs: True

user_{{user.name}}_forward:
  file.append:
    - name: /home/{{user.name}}/.forward
    - text: {{user.email}}

user_{{user.name}}_sshdir:
  file.directory:
    - name: /home/{{user.name}}/.ssh
    - user: {{user.name}}
    - group: {{user.name}}
    - mode: 0700

{% if 'authkey' in user %}
user_{{user.name}}_authkeys:
  ssh_auth.present:
    - user: {{user.name}}
    - name: {{user.authkey}}
{% endif %}

{% if 'sshpriv' in user %}
user_{{user.name}}_sshpriv:
  file.managed:
    - name: /home/{{user.name}}/.ssh/id_rsa
    - user: {{user.name}}
    - group: {{user.name}}
    - mode: 0600
    - contents_pillar: {{user.sshpriv}}
{% endif %}

{% if 'sshpub' in user %}
user_{{user.name}}_sshpub:
  file.managed:
    - name: /home/{{user.name}}/.ssh/id_rsa.pub
    - user: {{user.name}}
    - group: {{user.name}}
    - mode: 0600
    - contents_pillar: {{user.sshpub}}
{% endif %}
{% endfor %} # user in users
# vim: ft=yaml tabstop=2 sts=2 sw=2 et ai si

อย่าลืมซิงค์มิเนียนด้วยเสาใหม่!

salt targetminions saltutil.refresh_pillar

ฉันไม่สามารถรับตัวอย่างนี้เพื่อทำงานกับ Salt 2014.7.1; ดูเหมือนว่าจะมีข้อผิดพลาด: "ตัวแปร Jinja 'วัตถุ str' ไม่มีแอตทริบิวต์ 'ชื่อ'" ฉันใช้วิธีการแบบนี้กับผู้ใช้ / init.sls: {% for user, data in salt['pillar.get']('users', {}).iteritems() %}สิ่งนี้จะเปลี่ยนไฟล์ sls อย่างมีนัยสำคัญตลอด ถ้าฉันมากับตัวอย่างการทำงานฉันจะโพสต์มัน
Mike S

การติดตามผล: หากคุณที่รักนักเดินทางต้องการใช้งานรหัสนี้ฉันเชื่อว่ามีข้อผิดพลาดจำนวนหนึ่ง ตัวอย่างเช่นโคลอนที่อยู่หลัง "เฟร็ด" และ "บาร์นีย์" จะทำให้เกลือกลายเป็น barf เช่นเดียวกับที่ "สิ้นสุดสำหรับ" และ "จบถ้า" (พวกเขาไม่ควรมีช่องว่างในนั้น) ฉันสงสัยอีกครั้งว่าการสร้างครั้งแรกนั้นเป็นความผิดพลาด แต่ตอนนี้ฉันไม่ค่อยรู้เรื่องเกลือมากนักดังนั้นฉันจึงไม่แน่ใจ โปรแกรมเมอร์ Caveat สำหรับตัวฉันเองฉันจะทำงานร่วมกับแนวคิด iteritems ()
Mike S

ขออภัย Dan ฉันยังคงได้รับการทดสอบ: ฐานข้อมูลล้มเหลวในการรวบรวม: ---------- ฐานการแสดงผล SLS: ผู้ใช้ล้มเหลว: ตัวแปร Jinja 'วัตถุ str' ไม่มีแอตทริบิวต์ 'ชื่อ' เมื่อฉันเรียกใช้: เกลือ testminion state.highstate test = True .... ฉันได้คัดลอกข้อความของคุณเป็นคำต่อคำด้านบนแล้ว การเพิ่มเพียงอย่างเดียวคือไฟล์ /srv/salt/top.sls ของฉันซึ่งเป็นไฟล์แบบ 3 บรรทัด (ฐาน:, '*': และ -users)
Mike S

ฉันจะหมุนคอนเทนเนอร์นักเทียบท่าแล้วแยกออกเว้นแต่คุณจะไปถึงก่อน?
Dan Garthwaite

"ข้อมูลล้มเหลวในการรวบรวม" เกิดจากคำต่อท้ายชื่อไฟล์ '.sls' ใน /srv/pillar/top.sls กว่าที่ฉันเจอปัญหา โปรดทราบฉันเขียนใหม่มาก ฉันต้องวาง user.sshpriv ตอนนี้มันเพิ่งจะมาช้าและฉันก็มีปัญหา --- ในเนื้อหาของข้อความ
Dan Garthwaite

1

มันควรจะสังเกตว่าในความสัมพันธ์กับคำถามเดิมมีวิธีง่ายๆถ้าsource: salt://...รูปแบบไม่ทำงานfile.managed- เนื่องจากมันยังเกิดขึ้นsalt-sshเนื่องจากข้อผิดพลาดhttps://github.com/saltstack/salt/issues/38458นั่นคือ ตั้งแต่การแก้ไข - และนั่นคือการเปลี่ยนไปใช้contents:กับเสาไฟล์ภายนอกซึ่งมีการสำรองข้อมูลโดยไฟล์บนต้นแบบ

file_tree ext_pillarเป็นเอกสารที่https://docs.saltstack.com/en/latest/ref/pillar/all/salt.pillar.file_tree.html#module-salt.pillar.file_treeปัจจุบัน มันมีอยู่ตั้งแต่เวอร์ชัน 2015.5.0 ดังนั้นมันจึงใหม่กว่าคำถามและคำตอบดั้งเดิม แต่มันก็เป็นทางออกที่มีอยู่ในปัจจุบันอย่างสมเหตุสมผล

แน่นอนมันยังอยู่ในคำถามที่พบบ่อยที่https://docs.saltstack.com/en/latest/faq.html#is-it-possible-to-deploy-a-file-to-a-specific-minion-without -other-สมุน-มีการเข้าถึงเพื่อมัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.