Ansible Bootstrap: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(25 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
<span id="vorbereitung"></span>
+
 
 
= Vorbereitung =
 
= Vorbereitung =
  
Man kann als unpriviligierter Benutzer Ansible benutzen. Dazu erstellen wir erstmal einen Arbeitordner im Home-Verzeichnis.
+
* Man kann als unpriviligierter Benutzer Ansible benutzen.
 
+
* Es empfiehlt sich einen Arbeitsordner zu erstellen.
* '''cd ~'''
+
* '''mkdir ~/ansible'''
* '''mkdir ansible'''
+
* '''cd ~/ansible'''
  
<!----->
 
<span id="ansible-konfigurationsdateien"></span>
 
 
= Ansible-Konfigurationsdateien =
 
= Ansible-Konfigurationsdateien =
  
Zeile 20: Zeile 18:
 
* '''vim ansible.cfg'''
 
* '''vim ansible.cfg'''
  
<!----->
 
 
  [defaults]
 
  [defaults]
 
  inventory = inventory
 
  inventory = inventory
Zeile 28: Zeile 25:
 
* diese Datei enthält die zu administrierenden Hosts
 
* diese Datei enthält die zu administrierenden Hosts
 
* man kann diese in Gruppen einteilen und bestimmte Variablen (SSH-Passwort, Python-Interpreter, Become-Methode…) zuordnen
 
* man kann diese in Gruppen einteilen und bestimmte Variablen (SSH-Passwort, Python-Interpreter, Become-Methode…) zuordnen
* vim inventory
+
* '''vim inventory'''
  
<!----->
 
 
  [debian]
 
  [debian]
 
  10.81.3.10
 
  10.81.3.10
<span id="erreichbarkeitstest"></span>
+
 
 
== Erreichbarkeitstest ==
 
== Erreichbarkeitstest ==
  
* ansible -m gather_facts debian -k
+
* 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"
 +
        ],
  
<!----->
 
<span id="bootstrap"></span>
 
 
= Bootstrap =
 
= Bootstrap =
  
<span id="passwortloses-login"></span>
 
 
== Passwortloses Login ==
 
== Passwortloses Login ==
  
<span id="erstellen-von-ssh-keys"></span>
 
 
=== Erstellen von SSH-Keys ===
 
=== Erstellen von SSH-Keys ===
  
 
* '''ssh-keygen'''
 
* '''ssh-keygen'''
  
<!----->
 
<span id="hinterlegen-des-öffentlichen-ssh-keys"></span>
 
 
=== Hinterlegen des öffentlichen SSH-Keys ===
 
=== Hinterlegen des öffentlichen SSH-Keys ===
  
 
* '''vim bootstrap.yml'''
 
* '''vim bootstrap.yml'''
  
<!----->
 
 
  ---
 
  ---
 
  - name: Bootstrap eines einzelnen Hosts
 
  - name: Bootstrap eines einzelnen Hosts
Zeile 70: Zeile 70:
 
* '''ansible -m gather_facts debian'''
 
* '''ansible -m gather_facts debian'''
  
<!----->
 
<span id="pakete-installieren"></span>
 
 
== Pakete installieren ==
 
== Pakete installieren ==
  
 
* '''vim bootstrap.yml'''
 
* '''vim bootstrap.yml'''
  
<!----->
 
 
  ...
 
  ...
 
  - name: Installiere vim und sudo
 
  - name: Installiere vim und sudo
Zeile 86: Zeile 83:
 
     - vim
 
     - vim
 
     - sudo
 
     - sudo
* '''ansible-playbook bootstrap.yml --become-method=su -K'''
+
* 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'''
  
<!----->
 
<span id="passwortlos-zum-benutzer-root-werden"></span>
 
 
== Passwortlos zum Benutzer root werden ==
 
== Passwortlos zum Benutzer root werden ==
  
 
* Wir haben vorher das Paket sudo installiert, welches die Standard Become-Methode ist
 
* Wir haben vorher das Paket sudo installiert, welches die Standard Become-Methode ist
* In dessen Konfigurationsdatei kann man einstellen, dass für bestimmte Gruppe die Anmeldung passwortlos sein soll
+
* In dessen Konfigurationsdatei kann man einstellen, dass für bestimmte Gruppen die Anmeldung passwortlos sein soll
 
* Dazu die folgenden drei Schritte
 
* Dazu die folgenden drei Schritte
 
* '''vim bootstrap.yml'''
 
* '''vim bootstrap.yml'''
  
<!----->
 
 
  ...
 
  ...
 
  - name: Sicherstellen, dass die Gruppe sudo existiert
 
  - name: Sicherstellen, dass die Gruppe sudo existiert
Zeile 120: Zeile 117:
 
     groups: sudo
 
     groups: sudo
 
     append: true
 
     append: true
* '''ansible-playbook bootstrap.yml --become-method=su -K'''
+
* '''ansible-playbook bootstrap.yml –become-method=su -K'''
  
<!----->
 
<span id="vim-konfigurieren"></span>
 
 
== vim konfigurieren ==
 
== vim konfigurieren ==
  
Zeile 129: Zeile 124:
 
* '''vim files/vimrc'''
 
* '''vim files/vimrc'''
  
<!----->
 
 
  runtime! debian.vim
 
  runtime! debian.vim
 
  filetype indent plugin on
 
  filetype indent plugin on
Zeile 135: Zeile 129:
 
  colo torte
 
  colo torte
 
  set background=dark
 
  set background=dark
set nu
 
set relativenumber
 
 
  set scrolloff=8
 
  set scrolloff=8
 
  set tabstop=8
 
  set tabstop=8
Zeile 145: Zeile 137:
 
  set incsearch
 
  set incsearch
 
  set showmatch
 
  set showmatch
  set mouse=a
+
  set mouse=
 
  set omnifunc=syntaxcomplete#Complete
 
  set omnifunc=syntaxcomplete#Complete
 
  nnoremap <Space> :
 
  nnoremap <Space> :
Zeile 151: Zeile 143:
 
* '''vim bootstrap.yml'''
 
* '''vim bootstrap.yml'''
  
<!----->
 
 
  ...
 
  ...
 
  - name: Füge das lokale Fragment an die Default vim-Einstellungen
 
  - name: Füge das lokale Fragment an die Default vim-Einstellungen
Zeile 158: Zeile 149:
 
     src: files/vimrc
 
     src: files/vimrc
 
     dest: /etc/vim/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'''
 
* '''ansible-playbook bootstrap.yml'''
  
<!----->
 
<span id="zusammenfassung"></span>
 
 
= Zusammenfassung =
 
= Zusammenfassung =
  
<span id="ansible.cfg-1"></span>
 
 
== ansible.cfg ==
 
== ansible.cfg ==
  
Zeile 170: Zeile 159:
 
* '''vim ansible.cfg'''
 
* '''vim ansible.cfg'''
  
<!----->
 
 
  [defaults]
 
  [defaults]
 
  inventory = inventory
 
  inventory = inventory
 
  remote_user = xinux
 
  remote_user = xinux
 
  private_key_file = ~/.ssh/id_rsa
 
  private_key_file = ~/.ssh/id_rsa
<span id="inventory-1"></span>
+
 
 
== inventory ==
 
== inventory ==
  
Zeile 181: Zeile 169:
 
* '''vim inventory'''
 
* '''vim inventory'''
  
<!----->
 
 
  [debian]
 
  [debian]
 
  10.81.3.10
 
  10.81.3.10
Zeile 189: Zeile 176:
 
== bootstrap.yml ==
 
== bootstrap.yml ==
  
 +
* Man kann sich die Auflistung aller Gruppen mit ''hosts: all'' ersparen
 +
* Da man meistens alle Hosts bootstrappen will, empfiehlt es sich das so zu schreiben
 
* Man kann die Inventory-Parameter auch ins Play schreiben
 
* Man kann die Inventory-Parameter auch ins Play schreiben
* Das erspart
+
* Das erspart uns die Eingabeparameter
 +
* Diese Variablen werden auch nur bei diesem Play angewendet
 
* '''vim bootstrap.yml'''
 
* '''vim bootstrap.yml'''
  
<!----->
 
 
  ---
 
  ---
 
  - name: Bootstrap von einfachen Debian-Systemen
 
  - name: Bootstrap von einfachen Debian-Systemen
   hosts: debian
+
   hosts: '''all'''
 
   become: true
 
   become: true
 
   vars:
 
   vars:
Zeile 243: Zeile 232:
 
         src: files/vimrc
 
         src: files/vimrc
 
         dest: /etc/vim/vimrc
 
         dest: /etc/vim/vimrc
= vimrc =
+
== vimrc ==
  
 
* '''vim files/vimrc'''
 
* '''vim files/vimrc'''
  
<!----->
 
 
  runtime! debian.vim
 
  runtime! debian.vim
 
  filetype indent plugin on
 
  filetype indent plugin on
Zeile 253: Zeile 241:
 
  colo torte
 
  colo torte
 
  set background=dark
 
  set background=dark
set nu
 
set relativenumber
 
 
  set scrolloff=8
 
  set scrolloff=8
 
  set tabstop=8
 
  set tabstop=8
Zeile 263: Zeile 249:
 
  set incsearch
 
  set incsearch
 
  set showmatch
 
  set showmatch
  set mouse=a
+
  set mouse=
 
  set omnifunc=syntaxcomplete#Complete
 
  set omnifunc=syntaxcomplete#Complete
 
  nnoremap <Space> :
 
  nnoremap <Space> :
 
  nnoremap <CR> /
 
  nnoremap <CR> /

Aktuelle Version vom 12. April 2024, 07: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: "{{ 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: "{{ 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> :
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

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

  • Man kann sich die Auflistung aller Gruppen mit hosts: all ersparen
  • Da man meistens alle Hosts bootstrappen will, empfiehlt es sich das so zu schreiben
  • 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: "{{ 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

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> :
nnoremap <CR> /