Ansible에서 비 루트 사용자 작성 및 루트 SSH 사용 안함


9

서버를 부트 스트랩하기 위해 Ansible 플레이 북을 작성하려고합니다. 기본적으로 Linode에서는 비밀번호를 사용하여 루트로만 로그인 할 수 있으므로 내 플레이 북은 루트로 로그인하고 SSH 키를 사용하여 비 루트 사용자를 작성하며 루트 및 비밀번호 SSH를 사용하지 않습니다.

루트 로그인이 비활성화되어 있으므로 해당 플레이 북을 다시 실행할 수 없기 때문에 문제가됩니다! 플레이 북이 dem 등원이고 부트 스트랩 후 호스트를 추가하거나 제거 할 필요가 없습니다.


답변:


5

나는 이런 식으로하고 싶다 :

- hosts: all
  remote_user: root
  gather_facts: no
  tasks:
    - name: Check ansible user
      command: ssh -q -o BatchMode=yes -o ConnectTimeout=3 ansible@{{ inventory_hostname }} "echo OK"
      delegate_to: 127.0.0.1
      changed_when: false
      failed_when: false
      register: check_ansible_user
    - block:
      - name: Create Ansible user
        user:
          name: ansible
          comment: "Ansible user"
          password: $6$u3GdHI6FzXL01U9q$LENkJYHcA/NbnXAoJ1jzj.n3a7X6W35rj2TU1kSx4cDtgOEV9S6UboZ4BQ414UDjVvpaQhTt8sXVtkPvOuNt.0
          shell: /bin/bash
      - name: Add authorized key
        authorized_key:
          user: ansible
          key: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"
          exclusive: yes
      - name: Allow sudo for ansible
        copy:
          content: ansible ALL=(ALL) ALL
          dest: /etc/sudoers.d/ansible
          mode: 0600
      when: check_ansible_user | failed

내 가능한 사용자와 원격 호스트에 연결하려고합니다. 이것이 불가능한 경우 (첫 실행시) 루트로 연결하고 authorized_keys파일 및 sudo권한 과 함께 사용 가능한 사용자를 만듭니다 .

후속 실행시에는 사용자가 작업 할 수 있으므로 작업 블록을 건너 뛸 수 있습니다.

원격 호스트가 부트 스트랩되면 가능한 사용자와 계속 진행할 수 있습니다 become.

- hosts: all
  remote_user: ansible
  become: yes
  roles:
    - ...

remote_user처음 실행 한 후 플레이 북에서 수동으로 변경 합니까? 그것은 dem 등하 지 않습니다. 뭔가 빠졌 으면 좋겠다.
Deefour

1
당신은 아무것도 수동으로 변경하지 않습니다. 두 codesamples는 두 개의 다른 놀이를 (어쩌면 호출되고 그들을 상상하는 데 도움이 대표 bootstrap.yml하고 site.yml, 여기서 site.yml포함 bootstrap.yml아무것도하기 전에). 첫 번째 작업이 bootstrap.yml실패하면 이 게임의 다른 모든 작업 을 건너 뛰고 site.yml대신합니다.
Michael Trojanek

코드 스 니펫을 복사하여 붙여 넣었지만 해당 작업 블록을 건너 뜁니다 "skip_reason": "Conditional result was False".. 플레이를 실행하면 -vvvssh 호출이 반환됩니다."msg": "non-zero return code", "rc": 255,
Rafa

when조건 변경을 수정했습니다 .when: not "OK" in check_ansible_user.stdout
Rafa

2

나는 다음을 할 것이다 :

  • 당신이 (다른 것들과 함께) 역할을 만들고 (사용할 수있는 적절한 사용자 및 sudo 규칙)
  • SSH에 대한 역할을 만들거나 조정하여 관리하고 sshd_config(을 사용하여 전체 파일을 관리하는 것이 좋지만 사용자에게 template달려 있음) 루트 로그인을 비활성화하십시오.
  • 메타 역할과 같은 SSH 역할이 기본 역할에 종속되도록하십시오.

첫 번째 역할 (기본 역할)의 경우 다음과 같은 것을 사용하는 경향이 있습니다.

 name: base | local ansible user | create user
  user:
    name: "{{ local_ansible_user }}"
    group: "{{ local_ansible_group }}"
    home: "/home/{{ local_ansible_user }}"
    state: present
    generate_ssh_key: "{{ local_ansible_generate_key }}"
    ssh_key_bits: 4096
    ssh_key_type: rsa
  tags:
    - ansible
    - local_user

- name: base | local ansible user | provision authorised keys
  authorized_key:
    user: "{{ local_ansible_user }}"
    state: present
    key: "{{ item }}"
  with_items: "{{ local_ansible_authorised_keys }}"
  tags:
    - ansible
    - authorised_keys

SSH 구성의 경우 다음을 사용합니다.

- name: openssh | server | create configuration
  template:
    src: sshd_config.j2
    dest: /etc/ssh/sshd_config
    owner: root
    group: root
    mode: "0640"
    validate: "/usr/sbin/sshd -tf %s"
  notify:
    - openssh | server | restart
  tags:
    - ssh
    - openssh

Ansible의 역할 종속성은 여기 에 문서화되어 있습니다 .

플레이 북에서 주문을 사용하여이 작업을 수행 할 수도 있습니다.

좀이 GitHub의에 ansible 물건을 당신이 맥락에서 그것을보고 싶다면, (있는 위 촬영)


2

당신이 함께 Linode에 서버를 작성하는 경우 linode 모듈 에는 등록 수 return valuelinode작업을하고 linode 작업의 outout을 체킹 상태로 부트 스트랩 작업을 포함한다. 그것은 dem 등이어야합니다. 다음과 같이 해보십시오 :

- linode:
    api_key: 'longStringFromLinodeApi'
    name: linode-test1
    plan: 1
    datacenter: 2
    distribution: 99
    password: 'superSecureRootPassword'
    private_ip: yes
    ssh_pub_key: 'ssh-rsa qwerty'
    swap: 768
    wait: yes
    wait_timeout: 600
    state: present
  register: linode_node

- include: bootstrap.yml
  when: linode_node.changed

bootstrap.yml ssh 루트 로그인 등을 비활성화하는 데 필요한 모든 작업을 포함합니다.


-1

호스트를 부트 스트랩 한 후 인벤토리ansible_ssh_user 에서를 수정할 수 있습니까?

[targets]

other1.example.com ansible_connection=ssh ansible_ssh_user=root # new host
other2.example.com ansible_connection=ssh ansible_ssh_user=user # bootstrapped host
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.