소금 기둥을 통해 마스터에서 미니언으로 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

Salt Pillar 시스템에는 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 object'에 속성 'name'이 (가) 없습니다"오류가 나타납니다. user / init.sls에서 이와 같은 작업을 수행했습니다. {% for user, data in salt['pillar.get']('users', {}).iteritems() %}이렇게하면 sls 파일이 크게 변경됩니다. 실제 예제를 생각해 내면 게시하겠습니다.
Mike S

후속 조치 : Traveller 님,이 코드를 활용하려는 경우 코드에 많은 오류가 있다고 생각합니다. 예를 들어, "fred"와 "barney"뒤의 콜론은 "end for"와 "end if"와 같이 소금을 바프하게합니다 (공백이 없어야 함). 다시 한 번 구축의 초기 값에 결함이 있다고 생각하지만 현재로서는 소금에 대해 잘 모르므로 확신 할 수 없습니다. Caveat Programmer. 나 자신을 위해 iteritems () 개념을 다루겠다.
Mike S

죄송합니다, Dan, 여전히 증언을 얻습니다 : 데이터를 컴파일하지 못했습니다 : ---------- SLS 'base : users'렌더링에 실패했습니다. Jinja 변수 'str object'에 'name'속성이 없습니다. testminion state.highstate test = True .... 위의 텍스트를 그대로 복사했습니다. 유일한 추가 사항은 간단한 3-liner (base :, '*': 및 -users) 인 /srv/salt/top.sls 파일이었습니다.
Mike S

도커 컨테이너를 돌려서 먼저 가져 가지 않는 한 분류하십시오.
Dan Garthwaite

"데이터 컴파일에 실패했습니다"는 /srv/pillar/top.sls의 '.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 의 FAQ에도 있습니다. -다른 미니언들에게 접근하기

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.