Score:2

วิธีเพิ่มคีย์ ssh ผ่าน Ansible เมื่อตั้งค่า AuthorizedKeysFile

ธง br

ฉันจะทำให้ Ansible เติมไฟล์ที่ถูกต้องได้อย่างไรเมื่อฉัน /etc/ssh/sshd_config มี AuthorizedKeysFile ตั้งค่าให้ /etc/ssh/authorized_keys/%u? Ansible ดูเหมือนจะเพิกเฉยต่อการตั้งค่าและใส่กุญแจเข้าไป $HOME/.ssh/authorized_keys

คู่มือการเล่น:

---
- โฮสต์: ทั้งหมด
  วาร์:
  vars_files:
    - ../group_vars/ssh_root_authorized_keys.yml
  Gather_facts: เท็จ

  งาน:
    - ชื่อ: ตั้งค่าคีย์ที่ได้รับอนุญาตหลายรายการ
      อนุญาต_คีย์:
        ผู้ใช้: ราก
        สถานะ: ปัจจุบัน
        คีย์: '{{ item.key }}'
      with_items: "{{ root_auth_keys }}"

ssh_root_authorized_keys.yml

root_auth_keys:
  - ชื่อ: สำรอง @ โฮสต์
    คีย์ : "{{ ค้นหา('ไฟล์', '../group_vars/pubkeys/[email protected]') }}"

  - ชื่อ: nagios@host
    คีย์ : "{{ ค้นหา('ไฟล์', '../group_vars/pubkeys/[email protected]') }}"
Score:1
ธง in

จาก เอกสาร:

เส้นทาง: เส้นทางสำรองไปยังไฟล์ที่ได้รับอนุญาต_keys

  งาน:
    - ชื่อ: ตั้งค่าคีย์ที่ได้รับอนุญาตหลายรายการ
      อนุญาต_คีย์:
        ผู้ใช้: ราก
        สถานะ: ปัจจุบัน
        คีย์: '{{ item.key }}'
        เส้นทาง: '/etc/ssh/authorized_keys/root'
      with_items: "{{ root_auth_keys }}"
Nstevens avatar
br flag
ขอบคุณ. ฉันหวังว่า Ansible จะ "รู้เส้นทาง" แต่เดาไม่ออก ฉันคิดว่า `stat:` อาจช่วยได้เนื่องจากฉันมีบางโฮสต์ที่ไม่ได้ตั้งค่า `AuthorizedKeysFile` วิธีง่ายๆ ในการตรวจสอบว่ารายการกำหนดค่า sshd นี้แตกต่างจากค่าเริ่มต้นหรือไม่ ฉันคิดว่า `shell:` หรือ `cmd:` กับ `grep` แต่อาจจะไม่ใช่
Score:0
ธง br

มีสองขั้นตอนในการจัดเตรียมฟังก์ชันนี้ ขั้นแรก รับค่าของพารามิเตอร์ อาจมีตัวเลือกมากกว่านี้ เช่น โดยค่าเริ่มต้น

เปลือก> sudo sshd -T | grep อนุญาตไฟล์คีย์
ไฟล์ Authorizedkeys .ssh/authorized_keys .ssh/authorized_keys2

ตัวอย่างเช่น รับอันแรก

    - เชลล์: sshd -T | grep อนุญาตไฟล์คีย์
      ลงทะเบียน: ผลลัพธ์
      กลายเป็น: จริง
    - set_fact:
        AuthorizedKeysFile: "{{ (result.stdout|split)[1] }}"

ให้

  AuthorizedKeysFile: .ssh/authorized_keys

อาจมีพารามิเตอร์ AuthorizedKeysFile %ยู และ %ชม. ดู ตำแหน่งของไฟล์คีย์ที่ได้รับอนุญาต

%h จะถูกแทนที่ด้วยโฮมไดเร็กทอรีของผู้ใช้ที่ตรวจสอบสิทธิ์ และ %u ด้วยชื่อล็อกอินของผู้ใช้

เตรียมฐานข้อมูลของโฮมไดเร็กตอรี่

    - รับ:
        ฐานข้อมูล: passwd

ตามค่าเริ่มต้น โมดูล รับ เก็บฐานข้อมูล รหัสผ่าน ในพจนานุกรม getent_passwd. บ้านเป็นแอตทริบิวต์ที่ 4 เช่น

    - แก้ปัญหา:
        var: getent_passwd['รูท'][4]

ให้

  getent_passwd['รูท'][4]: /รูท

ตอนนี้ได้รับข้อมูล

    auth_keys:
      รูท: [key1, key2, key3]

คุณสามารถทดสอบการทำงาน

    - เชลล์: sshd -T | grep อนุญาตไฟล์คีย์
      ลงทะเบียน: ผลลัพธ์
      กลายเป็น: จริง
    - set_fact:
        AuthorizedKeysFile: "{{ (result.stdout|split)[1] }}"
    - รับ:
        ฐานข้อมูล: passwd
    - แก้ปัญหา:
        ข้อความ: |
          เส้นทาง: {{ _path }}
          คีย์: {{ item.value }}
      วนซ้ำ: "{{ auth_keys|dict2items }}"
      วาร์:
        _user: "{{ item.key }}"
        _home: "{{ getent_passwd[item.key][4] }}"
        _akf: "{{ AuthorizedKeysFile|regex_replace('%u', _user)|
                                     regex_replace('%h', _home) }}"
        _path: "{{ (_akf.0 == '/')|ternary(_akf, [_home, _akf]|join('/')) }}"

ให้

  ข้อความ: |-
    เส้นทาง: /root/.ssh/authorized_keys
    คีย์: ['key1', 'key2', 'key3']

หากคุณเปลี่ยนพารามิเตอร์

เปลือก> sudo sshd -T | grep อนุญาตไฟล์คีย์
authorizedkeysfile /etc/ssh/authorized_keys/%u

การเล่นจะได้รับตำแหน่งที่ถูกต้องของไฟล์คีย์ที่ได้รับอนุญาต

  ข้อความ: |-
    เส้นทาง: /etc/ssh/authorized_keys/root
    คีย์: ['key1', 'key2', 'key3']

โพสต์คำตอบ

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