gunakan kunci ssh dari master ke antek melalui pilar garam

11

Saya memiliki dua kunci ssh yang saya coba gunakan ke salah satu kaki tangan saya. Tapi sepertinya saya tidak bisa menggunakannya. Kesalahan keluar. Inilah init.slspilar in:

/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

Ini init.slsnegara saya :

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

Saya pasti melakukan sesuatu yang salah (jelas), tapi saya tidak yakin apa. Ada saran?

secure212
sumber
Saya ingin membantu, tetapi saya tidak bisa menjawab dengan informasi yang diberikan. Sebagian alasannya adalah pemformatan yaml. Edit pertanyaan Anda tetapi tinggalkan tautan kosong di atas dan di bawah setiap kode kunci, kemudian indentasi setiap baris dalam kode kunci dengan setidaknya 4 spasi. Kedua, apakah Anda sudah berhasil melakukan ini tanpa pilar dalam persamaan? Saya belum pernah melihat data pilar mengatur mereka seperti yang Anda miliki.
Dan Garthwaite
Apakah Anda menemukan jawaban untuk pertanyaan Anda?
Dan Garthwaite
Ya, saya yakin saya lakukan
secure212

Jawaban:

13

Sistem Pilar Garam tidak memiliki file init.sls. Kedua negara bagian dan pilar memiliki file top.sls. Negara yang merupakan subdirektori mungkin memiliki file init.sls.

Langkah 1: Tentukan pengguna Anda di /srv/pillar/users.sls

users:

  - name: fred
    fullname: Fred Flintstone
    email: [email protected]
    uid: 4001
    gid: 4001
    shell: /bin/bash
    groups:
      - bowling
    shadow: $6$Sasdf/Ss$asdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfsadfasdfsadfsadfsdf
    authkey: ssh-dss AAAAasdfasdfsadfsadfsadfsadfasdfasdfsdafsdafaasdfasdfasdfasdfasdfsadfsadfsadfsadfasdfasdfsdafsdafaasdfasdfasdfasdfasdfsadfsadfsadfsadfasdfasdfsdafsdafaasdfasdfasdfasdfasdfsadfsadfsadfsadfasdfasdfsdafsdafa = [email protected]
    sshpub: ssh-dss AAAAasdfasdfsadfsadfsadfsadfasdfasdfsdafsdafaasdfasdfasdfasdfasdfsadfsadfsadfsadfasdfasdfsdafsdafaasdfasdfasdfasdfasdfsadfsadfsadfsadfasdfasdfsdafsdafaasdfasdfasdfasdfasdfsadfsadfsadfsadfasdfasdfsdafsdafa = [email protected]

  - name: barney
    fullname: Barney Rubble
    email: [email protected]
    uid: 4002
    gid: 4002
    shell: /bin/bash
    groups:
      - bowling
    shadow: $6$Suiop/Ss$uiopuiopuiopuiopuiopuiopuiopuiopuiopuiopuiopsadfuiopsadfsadfsdf
    authkey: ssh-dss AAAAuiopuiopsadfsadfsadfsadfuiopuiopsdafsdafauiopuiopuiopuiopuiopsadfsadfsadfsadfuiopuiopsdafsdafauiopuiopuiopuiopuiopsadfsadfsadfsadfuiopuiopsdafsdafauiopuiopuiopuiopuiopsadfsadfsadfsadfuiopuiopsdafsdafa = [email protected]
    sshpub: ssh-dss AAAAuiopuiopsadfsadfsadfsadfuiopuiopsdafsdafauiopuiopuiopuiopuiopsadfsadfsadfsadfuiopuiopsdafsdafauiopuiopuiopuiopuiopsadfsadfsadfsadfuiopuiopsdafsdafauiopuiopuiopuiopuiopsadfsadfsadfsadfuiopuiopsdafsdafa = [email protected]

Langkah 2: Tambahkan pilar baru ke /srv/pillar/top.sls

base:
  'testminion':
    - users

Langkah 3: Gunakan jinja untuk memetakan pilar ke status di /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

Jangan lupa untuk menyinkronkan pelayan dengan pilar baru!

salt targetminions saltutil.refresh_pillar
Dan Garthwaite
sumber
Saya tidak bisa mendapatkan contoh ini untuk bekerja di Salt 2014.7.1; tampaknya memberikan kesalahan: "objek str 'variabel Jinja tidak memiliki atribut' nama '". Saya telah melakukan sesuatu seperti ini di user / init.sls: {% for user, data in salt['pillar.get']('users', {}).iteritems() %}Ini akan secara signifikan mengubah file sls di seluruh; jika saya datang dengan contoh kerja saya akan mempostingnya.
Mike S
Tindak Lanjut: Jika Anda, Traveler, mencari untuk menggunakan kode ini, saya yakin ada sejumlah kesalahan di dalamnya. Sebagai contoh, titik dua setelah "fred" dan "barney" akan menyebabkan garam untuk muntah, seperti halnya "end for" dan "end if" (mereka seharusnya tidak memiliki ruang di sana). Sekali lagi saya menduga bahwa inisial untuk konstruksi salah tetapi saya tidak tahu banyak tentang garam saat ini sehingga saya tidak yakin. Programat Peringatan. Bagi saya sendiri, saya akan bekerja dengan konsep iteritems ().
Mike S
Maaf, Dan, saya masih mendapatkan testminion: Data gagal dikompilasi: ---------- Rendering SLS 'basis: pengguna' gagal: Variabel Jinja 'objek str' tidak memiliki atribut 'nama' ketika saya menjalankan: salt testminion state.highstate test = Benar .... Saya telah menyalin teks Anda kata demi kata, di atas. Satu-satunya tambahan adalah file /srv/salt/top.sls saya yang merupakan 3-liner sederhana (basis :, '*' :, dan -pengguna).
Mike S
Saya akan memutar wadah buruh pelabuhan dan mengatasinya, kecuali Anda mendapatkannya terlebih dahulu?
Dan Garthwaite
"Data gagal dikompilasi" disebabkan oleh akhiran nama file '.sls' di /srv/pillar/top.sls. Selain itu saya juga mengalami masalah. Harap dicatat, saya telah menulis ulang banyak tentang itu. Saya harus meninggalkan user.sshpriv untuk saat ini, baru saja terlambat dan saya terus mendapat masalah --- dalam konten teks.
Dan Garthwaite
1

Mungkin perlu dicatat bahwa sehubungan dengan pertanyaan awal, ada solusi sederhana lain jika source: salt://...format tidak berfungsi file.managed- karena masih terjadi dengan salt-sshbug https://github.com/saltstack/salt/issues/38458 yang sebelumnya sejak diperbaiki - dan itu adalah untuk beralih ke contents:dengan pilar eksternal file tree, yang juga didukung oleh file pada master.

The file_tree ext_pillardidokumentasikan di https://docs.saltstack.com/en/latest/ref/pillar/all/salt.pillar.file_tree.html#module-salt.pillar.file_tree saat ini. Sudah ada sejak versi 2015.5.0 sehingga lebih baru dari pertanyaan dan jawaban asli, namun ini adalah solusi yang cukup tersedia saat ini.

Memang, itu juga ada di FAQ di https://docs.saltstack.com/en/latest/faq.html#is-it-possible-to-deploy-a-file-to-a-specific-minion-without -lain-pelayan punya akses ke sana

Josip Rodin
sumber