2016-05-19 22 views
24

Przejąłem serwer Ubuntu 14.04. Ma użytkownika o nazwie "deployer" (używany z capistrano), i jako taki potrzebuje przywilejów sudo. Dzięki tej konfiguracji mogę się zalogować do serwera i robić rzeczy takie jak:Odpowiedz: utwórz użytkownika z uprawnieniami sudo

workstation> ssh [email protected] 
myserver> sudo apt-get install git 
myserver> exit 
workstation> 

Próbuję dowiedzieć się, jak korzystać z ansibl (wersja 2.0.2.0 i python 2.7.3), aby utworzyć użytkownika o nazwie „Deployer "i być w stanie zalogować się do serwera z tym id, a następnie tak sudo-takie rzeczy jak" apt-get install ". Moja PlayBook wygląda następująco:

--- 
- hosts: example 
    become: yes 
    tasks: 
    - name: Update apt cache 
    apt: 
     update_cache: yes 
     cache_valid_time: 3600 

    - group: name=sudo state=present 

    - name: Add deployer user and add it to sudo 
    user: name=deployer 
      state=present 
      createhome=yes 
    become: yes 
    become_method: "sudo" 

    - name: Set up authorized keys for the deployer user 
    authorized_key: user=deployer key="{{item}}" 
    with_file: 
     - /home/jaygodse/.ssh/id_rsa.pub 

Po uruchomieniu tej playbook, jestem w stanie ssh do maszyny jako „wdrożeniowcowi” (np ssh Deployer @ myserver), ale jeśli mogę uruchomić komendę sudo, to zawsze mnie pyta dla mojego hasła sudo.

Rozumiem, że użytkownik "wdrażającego" musi ostatecznie znaleźć się w pliku użytkowników visudo, ale nie mogę określić, które magiczne inkantacje z odpowiedziami mają się wywoływać, aby można było dołączyć do maszyny jako wdrażający, a następnie uruchomić sudo (np. sudo apt-get install git ") bez pytania o hasło sudo

Szukałem wysokiego i niskiego poziomu, i nie mogę znaleźć fragmentu Asystenta, który umieszcza użytkownika" deployer "w grupa sudo bez pytania o hasło Jak to zrobić?

Odpowiedz

52

Czasami wiadomo, o co pytać Nie wiedziałem, ponieważ jestem programistą, który wykonał pracę z DevOps

Podobno hasło "passwordless" lub NOPASSWD jest rzeczą, którą należy umieścić w pliku/etc/sudoers.

Odpowiedź na moje pytanie jest podana na Ansible: best practice for maintaining list of sudoers.

ansibl kod PlayBook fragment wygląda tak z moim problemem:

- name: Make sure we have a 'wheel' group 
    group: 
    name: wheel 
    state: present 

- name: Allow 'wheel' group to have passwordless sudo 
    lineinfile: 
    dest: /etc/sudoers 
    state: present 
    regexp: '^%wheel' 
    line: '%wheel ALL=(ALL) NOPASSWD: ALL' 
    validate: 'visudo -cf %s' 

- name: Add sudoers users to wheel group 
    user: name=deployer groups=wheel append=yes state=present createhome=yes 


- name: Set up authorized keys for the deployer user 
    authorized_key: user=deployer key="{{item}}" 
    with_file: 
    - /home/railsdev/.ssh/id_rsa.pub 

A najlepsze jest to, że rozwiązanie jest idempotent. Nie dodaje liniido/etc/sudoers, gdy skrypt uruchamia się po raz kolejny. I tak ... Udało mi się ssh na serwerze jako "deployer" i uruchomić polecenie sudo bez konieczności podawania hasła.

+33

Proszę dodać linię 'validate: 'visudo -cf% s'' na końcu sekcji' lineinfile: 'do sprawdzenia przed zapisaniem. Usunięcie pliku sudoers spowoduje trwałe zablokowanie dostępu do sudo. –

+1

'authorized_key' [akceptuje klucz jako ciąg] (http://docs.ansible.com/ansible/latest/authorized_key_module.html) w parametrze' key' od wersji 1.92 – Tim

+1

Możesz również utworzyć/skopiować plik w '/ etc/sudoers.d', większość dystrybucji jako domyślna zawiera linię dla tego ... –

Powiązane problemy