Ansible Bootstrap: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
Zeile 10: Zeile 10:
 
== ansible.cfg ==
 
== ansible.cfg ==
  
* Hier schaut Ansible nach Dateien wie:
+
<ul>
** die Liste der Hosts
+
<li><p>Hier schaut Ansible nach Dateien wie:</p>
** Playbook-Verzeichnisse
+
<ul>
** Standard Remote-User
+
<li>die Liste der Hosts</li>
** etc.
+
<li>Playbook-Verzeichnisse</li>
* '''vim ansible.cfg'''
+
<li>Standard Remote-User</li>
 +
<li>etc.</li></ul>
 +
</li>
 +
<li><p>'''vim ansible.cfg'''</p>
 +
<p>[defaults] inventory = inventory remote_user = xinux</p></li></ul>
  
[defaults]
 
inventory = inventory
 
remote_user = xinux
 
 
== inventory ==
 
== inventory ==
  
* diese Datei enthält die zu administrierenden Hosts
+
<ul>
* man kann diese in Gruppen einteilen und bestimmte Variablen (SSH-Passwort, Python-Interpreter, Become-Methode…) zuordnen
+
<li><p>diese Datei enthält die zu administrierenden Hosts</p></li>
* '''vim inventory'''
+
<li><p>man kann diese in Gruppen einteilen und bestimmte Variablen (SSH-Passwort, Python-Interpreter, Become-Methode…) zuordnen</p></li>
 +
<li><p>'''vim inventory'''</p>
 +
<p>[debian] 10.81.3.10</p></li></ul>
  
[debian]
 
10.81.3.10
 
 
== Erreichbarkeitstest ==
 
== Erreichbarkeitstest ==
* mit der Option '''-k''' wird das SSH-Passwort abgefragt
 
* '''ansible -m gather_facts debian -k'''
 
  
10.81.3.10 | SUCCESS => {
+
<ul>
    "ansible_facts": {
+
<li><p>mit der Option '''-k''' wird das SSH-Passwort abgefragt</p></li>
        "ansible_all_ipv4_addresses": [
+
<li><p>'''ansible -m gather_facts debian -k'''</p>
            "10.81.3.10"
+
<p>10.81.3.10 | SUCCESS =&gt; {     “ansible_facts”: {         “ansible_all_ipv4_addresses”: [             “10.81.3.10”         ],         “ansible_all_ipv6_addresses”: [             “2003:a:32a:1700:a00:27ff:fee6:4fc0”,             “fe80::a00:27ff:fee6:4fc0”         ],</p></li></ul>
        ],
 
        "ansible_all_ipv6_addresses": [
 
            "2003:a:32a:1700:a00:27ff:fee6:4fc0",
 
            "fe80::a00:27ff:fee6:4fc0"
 
        ],
 
  
 
= Bootstrap =
 
= Bootstrap =
Zeile 52: Zeile 46:
 
=== Hinterlegen des öffentlichen SSH-Keys ===
 
=== Hinterlegen des öffentlichen SSH-Keys ===
  
* '''vim bootstrap.yml'''
+
<ul>
 +
<li><p>'''vim bootstrap.yml'''</p>
  
---
+
-----
- name: Bootstrap eines einzelnen Hosts
+
 
  hosts: debian
+
<ul>
  tasks:
+
<li>name: Bootstrap eines einzelnen Hosts   hosts: debian   tasks:     - name: Hinterlege SSH-Key       authorized_key:         user: xinux         state: present         key: “{{ lookup(‘file’, ‘~/.ssh/id_rsa.pub’) }}”</li></ul>
    - name: Hinterlege SSH-Key
+
</li>
      authorized_key:
+
<li><p>'''ansible-playbook bootstrap.yml -k'''</p></li>
        user: xinux
+
<li><p>Jetzt sollte kein Passwort notwendig sein</p></li>
        state: present
+
<li><p>'''ansible -m gather_facts debian'''</p></li></ul>
        <nowiki>key: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"</nowiki>
 
* '''ansible-playbook bootstrap.yml -k'''
 
* Jetzt sollte kein Passwort notwendig sein
 
* '''ansible -m gather_facts debian'''
 
  
 
== Pakete installieren ==
 
== Pakete installieren ==
  
* '''vim bootstrap.yml'''
+
<ul>
 
+
<li><p>'''vim bootstrap.yml'''</p>
...
+
<p>…</p>
- name: Installiere vim und sudo
+
<ul>
  become: true
+
<li>name: Installiere vim und sudo   become: true   package:     name: “{{ item }}”     state: present   with_items:     - vim     - sudo</li></ul>
  package:
+
</li>
    <nowiki>name: "{{ item }}"</nowiki>
+
<li><p>Die Standard Become-Methode ist '''sudo'''</p></li>
    state: present
+
<li><p>Da es aber noch nicht installiert ist, müssen wir '''su''' verwenden</p></li>
  with_items:
+
<li><p>Das root Passwort kann mit '''-K''' mitgegeben werden</p></li>
    - vim
+
<li><p>'''ansible-playbook bootstrap.yml --become-method=su -K'''</p></li></ul>
    - sudo
 
 
 
* Die Standard Become-Methode ist '''sudo'''
 
* Da es aber noch nicht installiert ist, müssen wir '''su''' verwenden
 
* Das root Passwort kann mit '''-K''' mitgegeben werden
 
* '''ansible-playbook bootstrap.yml --become-method=su -K'''
 
  
 
== Passwortlos zum Benutzer root werden ==
 
== Passwortlos zum Benutzer root werden ==
  
* Wir haben vorher das Paket sudo installiert, welches die Standard Become-Methode ist
+
<ul>
* In dessen Konfigurationsdatei kann man einstellen, dass für bestimmte Gruppen die Anmeldung passwortlos sein soll
+
<li><p>Wir haben vorher das Paket sudo installiert, welches die Standard Become-Methode ist</p></li>
* Dazu die folgenden drei Schritte
+
<li><p>In dessen Konfigurationsdatei kann man einstellen, dass für bestimmte Gruppen die Anmeldung passwortlos sein soll</p></li>
* '''vim bootstrap.yml'''
+
<li><p>Dazu die folgenden drei Schritte</p></li>
 
+
<li><p>'''vim bootstrap.yml'''</p>
...
+
<p>…</p>
- name: Sicherstellen, dass die Gruppe sudo existiert
+
<ul>
  become: true
+
<li>name: Sicherstellen, dass die Gruppe sudo existiert   become: true   group:     name: sudo     state: present</li>
  group:
+
<li>name: Erlaube der Gruppe sudo passwortloses Login   become: true   lineinfile:     dest: /etc/sudoers     state: present     regexp: ‘^%sudo’     line: ‘%sudo ALL=(ALL) NOPASSWD: ALL’     validate: /usr/sbin/visudo -cf %s</li>
    name: sudo
+
<li>name: Füge Benutzer xinux zur Gruppe sudo hinzu   become: true   user:     name: xinux     groups: sudo     append: true</li></ul>
    state: present
+
</li>
+
<li><p>'''ansible-playbook bootstrap.yml --become-method=su -K'''</p></li></ul>
- name: Erlaube der Gruppe sudo passwortloses Login
 
  become: true
 
  lineinfile:
 
    dest: /etc/sudoers
 
    state: present
 
    regexp: '^%sudo'
 
    line: '%sudo ALL=(ALL) NOPASSWD: ALL'
 
    validate: /usr/sbin/visudo -cf %s
 
 
- name: Füge Benutzer xinux zur Gruppe sudo hinzu
 
  become: true
 
  user:
 
    name: xinux
 
    groups: sudo
 
    append: true
 
* '''ansible-playbook bootstrap.yml --become-method=su -K'''
 
  
 
== vim konfigurieren ==
 
== vim konfigurieren ==
  
* '''mkdir files'''
+
<ul>
* '''vim files/vimrc'''
+
<li><p>'''mkdir files'''</p></li>
 
+
<li><p>'''vim files/vimrc'''</p>
runtime! debian.vim
+
<p>runtime! debian.vim filetype indent plugin on syntax on colo torte set background=dark set scrolloff=8 set tabstop=8 set softtabstop=4 set shiftwidth=4 set autoindent set showcmd set incsearch set showmatch set mouse= set omnifunc=syntaxcomplete#Complete nnoremap <code>&lt;Space&gt;`{=html}` :  nnoremap </code><CR><code>{=html}</code> /</p></li>
filetype indent plugin on
+
<li><p>'''vim bootstrap.yml'''</p>
syntax on
+
<p>…</p>
colo torte
+
<ul>
set background=dark
+
<li>name: Füge das lokale Fragment an die Default vim-Einstellungen   become: true   copy:     src: files/vimrc     dest: /etc/vim/vimrc</li></ul>
set scrolloff=8
+
</li>
set tabstop=8
+
<li><p>Da nun alle Zugänge für Ansible passwortlos sind, können wir die vorigen Parameter weglassen</p></li>
set softtabstop=4
+
<li><p>'''ansible-playbook bootstrap.yml'''</p></li></ul>
set shiftwidth=4
 
set autoindent
 
set showcmd
 
set incsearch
 
set showmatch
 
set mouse=
 
set omnifunc=syntaxcomplete#Complete
 
nnoremap <Space> :
 
nnoremap <CR> /
 
* '''vim bootstrap.yml'''
 
 
 
...
 
- name: Füge das lokale Fragment an die Default vim-Einstellungen
 
  become: true
 
  copy:
 
    src: files/vimrc
 
    dest: /etc/vim/vimrc
 
 
 
* Da nun alle Zugänge für Ansible passwortlos sind, können wir die vorigen Parameter weglassen
 
* '''ansible-playbook bootstrap.yml'''
 
  
 
= Zusammenfassung =
 
= Zusammenfassung =
Zeile 155: Zeile 104:
 
== ansible.cfg ==
 
== ansible.cfg ==
  
* Hier könnte man noch den privaten SSH-Schlüssel angeben, wenn man mehrere hat.
+
<ul>
* '''vim ansible.cfg'''
+
<li><p>Hier könnte man noch den privaten SSH-Schlüssel angeben, wenn man mehrere hat.</p></li>
 +
<li><p>'''vim ansible.cfg'''</p>
 +
<p>[defaults] inventory = inventory remote_user = xinux private_key_file = ~/.ssh/id_rsa</p></li></ul>
  
[defaults]
 
inventory = inventory
 
remote_user = xinux
 
private_key_file = ~/.ssh/id_rsa
 
 
== inventory ==
 
== inventory ==
  
* Hier kann man Variablen definieren, um das Verhalten von Ansible auf bestimmten Hosts/Gruppen zu beeinflussen.
+
<ul>
* '''vim inventory'''
+
<li><p>Hier kann man Variablen definieren, um das Verhalten von Ansible auf bestimmten Hosts/Gruppen zu beeinflussen.</p></li>
 +
<li><p>'''vim inventory'''</p>
 +
<p>[debian] 10.81.3.10 [all:vars] ansible_python_interpreter=/usr/bin/python3</p></li></ul>
  
[debian]
 
10.81.3.10
 
 
[all:vars]
 
ansible_python_interpreter=/usr/bin/python3
 
 
== bootstrap.yml ==
 
== bootstrap.yml ==
  
* Man kann die Inventory-Parameter auch ins Play schreiben
+
<ul>
* Das erspart uns die Eingabeparameter
+
<li><p>Alle in ''inventory'' eingetragenen Hosts adressieren mit '''hosts: all'''<br />
* Diese Variablen werden auch nur bei diesem Play angewendet
+
</p></li>
* '''vim bootstrap.yml'''
+
<li><p>Man kann die Inventory-Parameter auch ins Play schreiben</p></li>
 +
<li><p>Das erspart uns die Eingabeparameter</p></li>
 +
<li><p>Diese Variablen werden auch nur bei diesem Play angewendet</p></li>
 +
<li><p>'''vim bootstrap.yml'''</p>
 +
 
 +
-----
 +
 
 +
<ul>
 +
<li>name: Bootstrap von einfachen Debian-Systemen   ’‘’hosts: all’’’   become: true   vars:     - ansible_ssh_pass: 123Start$     - ansible_become_pass: 123Start$     - ansible_become_method: su   tasks:     - name: Hinterlege SSH-Key       authorized_key:         user: “{{ item }}”         state: present         key: “{{ lookup(‘file’, ‘~/.ssh/id_rsa.pub’) }}”       with_items:         - xinux         - root     - name: Installiere vim und sudo       package:         name: “{{ item }}”         state: present       with_items:         - vim         - sudo     - name: Sicherstellen, dass die Gruppe sudo existiert       group:         name: sudo         state: present     - name: Erlaube der Gruppe sudo passwortloses Login       lineinfile:         dest: /etc/sudoers         state: present         regexp: ‘^%sudo’         line: ‘%sudo ALL=(ALL) NOPASSWD: ALL’         validate: /usr/sbin/visudo -cf %s     - name: Füge Benutzer xinux zur Gruppe sudo hinzu       user:         name: xinux         groups: sudo         append: true     - name: Füge das lokale Fragment an die Default vim-Einstellungen       copy:         src: files/vimrc         dest: /etc/vim/vimrc</li></ul>
 +
</li></ul>
  
---
 
- name: Bootstrap von einfachen Debian-Systemen
 
  hosts: debian
 
  become: true
 
  vars:
 
    - ansible_ssh_pass: 123Start$
 
    - ansible_become_pass: 123Start$
 
    - ansible_become_method: su
 
  tasks:
 
    - name: Hinterlege SSH-Key
 
      authorized_key:
 
        <nowiki>user: "{{ item }}"</nowiki>
 
        state: present
 
        <nowiki>key: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"</nowiki>
 
      with_items:
 
        - xinux
 
        - root
 
 
    - name: Installiere vim und sudo
 
      package:
 
        <nowiki>name: "{{ item }}"</nowiki>
 
        state: present
 
      with_items:
 
        - vim
 
        - sudo
 
 
    - name: Sicherstellen, dass die Gruppe sudo existiert
 
      group:
 
        name: sudo
 
        state: present
 
 
    - name: Erlaube der Gruppe sudo passwortloses Login
 
      lineinfile:
 
        dest: /etc/sudoers
 
        state: present
 
        regexp: '^%sudo'
 
        line: '%sudo ALL=(ALL) NOPASSWD: ALL'
 
        validate: /usr/sbin/visudo -cf %s
 
 
    - name: Füge Benutzer xinux zur Gruppe sudo hinzu
 
      user:
 
        name: xinux
 
        groups: sudo
 
        append: true
 
 
    - name: Füge das lokale Fragment an die Default vim-Einstellungen
 
      copy:
 
        src: files/vimrc
 
        dest: /etc/vim/vimrc
 
 
== vimrc ==
 
== vimrc ==
  
* '''vim files/vimrc'''
+
<ul>
 
+
<li><p>'''vim files/vimrc'''</p>
runtime! debian.vim
+
<p>runtime! debian.vim filetype indent plugin on syntax on colo torte set background=dark set scrolloff=8 set tabstop=8 set softtabstop=4 set shiftwidth=4 set autoindent set showcmd set incsearch set showmatch set mouse= set omnifunc=syntaxcomplete#Complete nnoremap <code>&lt;Space&gt;`{=html}` :  nnoremap </code><CR><code>{=html}</code> /</p></li></ul>
filetype indent plugin on
 
syntax on
 
colo torte
 
set background=dark
 
set scrolloff=8
 
set tabstop=8
 
set softtabstop=4
 
set shiftwidth=4
 
set autoindent
 
set showcmd
 
set incsearch
 
set showmatch
 
set mouse=
 
set omnifunc=syntaxcomplete#Complete
 
nnoremap <Space> :
 
nnoremap <CR> /
 

Version vom 20. Februar 2023, 08:40 Uhr

Vorbereitung

  • Man kann als unpriviligierter Benutzer Ansible benutzen.
  • Es empfiehlt sich einen Arbeitsordner zu erstellen.
  • mkdir ~/ansible
  • cd ~/ansible

Ansible-Konfigurationsdateien

ansible.cfg

  • Hier schaut Ansible nach Dateien wie:

    • die Liste der Hosts
    • Playbook-Verzeichnisse
    • Standard Remote-User
    • etc.
  • vim ansible.cfg

    [defaults] inventory = inventory remote_user = xinux

inventory

  • diese Datei enthält die zu administrierenden Hosts

  • man kann diese in Gruppen einteilen und bestimmte Variablen (SSH-Passwort, Python-Interpreter, Become-Methode…) zuordnen

  • vim inventory

    [debian] 10.81.3.10

Erreichbarkeitstest

  • mit der Option -k wird das SSH-Passwort abgefragt

  • ansible -m gather_facts debian -k

    10.81.3.10 | SUCCESS => {     “ansible_facts”: {         “ansible_all_ipv4_addresses”: [             “10.81.3.10”         ],         “ansible_all_ipv6_addresses”: [             “2003:a:32a:1700:a00:27ff:fee6:4fc0”,             “fe80::a00:27ff:fee6:4fc0”         ],

Bootstrap

Passwortloses Login

Erstellen von SSH-Keys

  • ssh-keygen

Hinterlegen des öffentlichen SSH-Keys

  • vim bootstrap.yml


    • name: Bootstrap eines einzelnen Hosts   hosts: debian   tasks:     - name: Hinterlege SSH-Key       authorized_key:         user: xinux         state: present         key: “Vorlage:Lookup(‘file’, ‘~/.ssh/id rsa.pub’)
  • ansible-playbook bootstrap.yml -k

  • Jetzt sollte kein Passwort notwendig sein

  • ansible -m gather_facts debian

Pakete installieren

  • vim bootstrap.yml

    • name: Installiere vim und sudo   become: true   package:     name: “Vorlage:Item”     state: present   with_items:     - vim     - sudo
  • Die Standard Become-Methode ist sudo

  • Da es aber noch nicht installiert ist, müssen wir su verwenden

  • Das root Passwort kann mit -K mitgegeben werden

  • ansible-playbook bootstrap.yml --become-method=su -K

Passwortlos zum Benutzer root werden

  • Wir haben vorher das Paket sudo installiert, welches die Standard Become-Methode ist

  • In dessen Konfigurationsdatei kann man einstellen, dass für bestimmte Gruppen die Anmeldung passwortlos sein soll

  • Dazu die folgenden drei Schritte

  • vim bootstrap.yml

    • name: Sicherstellen, dass die Gruppe sudo existiert   become: true   group:     name: sudo     state: present
    • name: Erlaube der Gruppe sudo passwortloses Login   become: true   lineinfile:     dest: /etc/sudoers     state: present     regexp: ‘^%sudo’     line: ‘%sudo ALL=(ALL) NOPASSWD: ALL’     validate: /usr/sbin/visudo -cf %s
    • name: Füge Benutzer xinux zur Gruppe sudo hinzu   become: true   user:     name: xinux     groups: sudo     append: true
  • ansible-playbook bootstrap.yml --become-method=su -K

vim konfigurieren

  • mkdir files

  • vim files/vimrc

    runtime! debian.vim filetype indent plugin on syntax on colo torte set background=dark set scrolloff=8 set tabstop=8 set softtabstop=4 set shiftwidth=4 set autoindent set showcmd set incsearch set showmatch set mouse= set omnifunc=syntaxcomplete#Complete nnoremap <Space>`{=html}` : nnoremap <CR>{=html} /

  • vim bootstrap.yml

    • name: Füge das lokale Fragment an die Default vim-Einstellungen   become: true   copy:     src: files/vimrc     dest: /etc/vim/vimrc
  • Da nun alle Zugänge für Ansible passwortlos sind, können wir die vorigen Parameter weglassen

  • ansible-playbook bootstrap.yml

Zusammenfassung

ansible.cfg

  • Hier könnte man noch den privaten SSH-Schlüssel angeben, wenn man mehrere hat.

  • vim ansible.cfg

    [defaults] inventory = inventory remote_user = xinux private_key_file = ~/.ssh/id_rsa

inventory

  • Hier kann man Variablen definieren, um das Verhalten von Ansible auf bestimmten Hosts/Gruppen zu beeinflussen.

  • vim inventory

    [debian] 10.81.3.10 [all:vars] ansible_python_interpreter=/usr/bin/python3

bootstrap.yml

  • Alle in inventory eingetragenen Hosts adressieren mit hosts: all

  • Man kann die Inventory-Parameter auch ins Play schreiben

  • Das erspart uns die Eingabeparameter

  • Diese Variablen werden auch nur bei diesem Play angewendet

  • vim bootstrap.yml


    • name: Bootstrap von einfachen Debian-Systemen   ’‘’hosts: all’’’   become: true   vars:     - ansible_ssh_pass: 123Start$     - ansible_become_pass: 123Start$     - ansible_become_method: su   tasks:     - name: Hinterlege SSH-Key       authorized_key:         user: “Vorlage:Item”         state: present         key: “Vorlage:Lookup(‘file’, ‘~/.ssh/id rsa.pub’)”       with_items:         - xinux         - root     - name: Installiere vim und sudo       package:         name: “Vorlage:Item”         state: present       with_items:         - vim         - sudo     - name: Sicherstellen, dass die Gruppe sudo existiert       group:         name: sudo         state: present     - name: Erlaube der Gruppe sudo passwortloses Login       lineinfile:         dest: /etc/sudoers         state: present         regexp: ‘^%sudo’         line: ‘%sudo ALL=(ALL) NOPASSWD: ALL’         validate: /usr/sbin/visudo -cf %s     - name: Füge Benutzer xinux zur Gruppe sudo hinzu       user:         name: xinux         groups: sudo         append: true     - name: Füge das lokale Fragment an die Default vim-Einstellungen       copy:         src: files/vimrc         dest: /etc/vim/vimrc

vimrc

  • vim files/vimrc

    runtime! debian.vim filetype indent plugin on syntax on colo torte set background=dark set scrolloff=8 set tabstop=8 set softtabstop=4 set shiftwidth=4 set autoindent set showcmd set incsearch set showmatch set mouse= set omnifunc=syntaxcomplete#Complete nnoremap <Space>`{=html}` : nnoremap <CR>{=html} /