triển khai khóa ssh từ chủ đến minion thông qua các cột muối


11

Tôi có hai khóa ssh mà tôi đang cố gắng triển khai cho một trong những tay sai của mình. Nhưng tôi dường như không thể có được nó để triển khai. Nó lỗi ra. Đây là init.slstrong các trụ cột:

/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

Đây là init.slstrạng thái của tôi :

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

Tôi phải làm điều gì đó sai (rõ ràng), nhưng tôi không chắc chắn điều gì. Bất kỳ đề xuất?


Tôi muốn giúp đỡ, nhưng tôi không thể trả lời với thông tin được cung cấp. Một phần lý do là định dạng yaml. Chỉnh sửa câu hỏi của bạn nhưng để lại một liên kết trống bên trên và bên dưới mỗi codeblock, sau đó thụt lề từng dòng trong codeblock ít nhất 4 khoảng trắng. Thứ hai, bạn đã thành công trong việc này mà không cần trụ trong phương trình? Tôi chưa bao giờ thấy dữ liệu trụ cột được thiết lập theo cách bạn có.
Dan Garthwaite

Bạn đã tìm thấy một câu trả lời cho câu hỏi của bạn?
Dan Garthwaite

Có, tôi tin rằng tôi đã làm
safe212

Câu trả lời:


13

Hệ thống Salt Pillar không có tệp init.sls. Cả hai trạng thái và trụ cột đều có tệp top.sls. Các tiểu bang là thư mục con có thể có tệp init.sls.

Bước 1: Xác định người dùng của bạn trong /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

Bước 2: Thêm trụ cột mới vào /srv/pillar/top.sls

base:
  'testminion':
    - users

Bước 3: Sử dụng jinja để ánh xạ cột tới các trạng thái trong /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

Đừng quên đồng bộ các tay sai với các trụ cột mới!

salt targetminions saltutil.refresh_pillar

Tôi không thể lấy ví dụ này để làm việc trên Salt 2014.7.1; nó xuất hiện để báo lỗi: "Biến Jinja 'đối tượng str' không có thuộc tính 'name'". Tôi đã dùng đến việc làm một cái gì đó như thế này trong user / init.sls: {% for user, data in salt['pillar.get']('users', {}).iteritems() %}Điều này sẽ thay đổi đáng kể tệp sls trong suốt; nếu tôi đưa ra một ví dụ làm việc tôi sẽ đăng nó.
Mike S

Theo dõi: Nếu bạn, khách du lịch thân yêu, đang tìm cách sử dụng mã này, tôi tin rằng nó có một số lỗi trong đó. Ví dụ, các dấu hai chấm sau "fred" và "barney" sẽ khiến muối bị barf, cũng như "end for" và "end if" (chúng không nên có khoảng trắng trong đó). Một lần nữa tôi nghi ngờ rằng ban đầu để xây dựng bị lỗi nhưng tôi không biết nhiều về muối vào thời điểm này nên tôi không chắc chắn. Lập trình viên cẩn thận. Đối với bản thân tôi, tôi sẽ làm việc với khái niệm iteritems ().
Mike S

Xin lỗi, Dan, tôi vẫn nhận được testminion: Dữ liệu không được biên dịch: ---------- Kết xuất SLS 'cơ sở: người dùng' không thành công: biến Jinja 'đối tượng str' không có thuộc tính 'tên' khi tôi chạy: salt testminion state.highstate test = True .... Tôi đã sao chép nguyên văn văn bản của bạn, ở trên. Sự bổ sung duy nhất là tệp /srv/salt/top.sls của tôi, đây là một tệp 3 lớp đơn giản (cơ sở:, '*':, và -users).
Mike S

Tôi sẽ quay một container docker và sắp xếp nó ra, trừ khi bạn nhận được nó trước?
Dan Garthwaite

"Dữ liệu không thể biên dịch" được gây ra bởi hậu tố tên tệp '.sls' trong /srv/pillar/top.sls. Hơn tôi cũng gặp vấn đề. Xin lưu ý, tôi đã viết lại nhiều về nó. Bây giờ tôi đã phải bỏ user.sshpriv, nó đã bị trễ và tôi tiếp tục gặp rắc rối với --- trong nội dung văn bản.
Dan Garthwaite

0

Có lẽ cần lưu ý rằng liên quan đến câu hỏi ban đầu, có một giải pháp đơn giản khác nếu source: salt://...định dạng không hoạt động file.managed- như vẫn xảy ra với salt-sshlỗi https://github.com/saltstack/salt/issues/38458 đó là kể từ khi cố định - và đó là để chuyển sang contents:với cột bên ngoài của cây tệp, cũng được hỗ trợ bởi các tệp trên bản gốc.

Các file_tree ext_pillarđược ghi lại tại https://docs.saltstack.com/en/latest/ref/pillar/all/salt.pillar.file_tree.html#module-salt.pillar.file_tree hiện nay. Nó đã tồn tại từ phiên bản 2015.5.0, vì vậy nó mới hơn câu hỏi và câu trả lời ban đầu, tuy nhiên nó là một giải pháp khá hợp lý hiện nay.

Thật vậy, nó cũng có trong Câu hỏi thường gặp tại https://docs.saltstack.com/en/latest/faq.html#is-it-possible-to-deploy-a-file-to-a-specific-minion-without -ther-minions-have-access-to-it

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.