Ansible Bootstrap: Unterschied zwischen den Versionen
| Zeile 10: | Zeile 10: | ||
== ansible.cfg == | == ansible.cfg == | ||
| − | + | <ul> | |
| − | + | <li><p>Hier schaut Ansible nach Dateien wie:</p> | |
| − | + | <ul> | |
| − | + | <li>die Liste der Hosts</li> | |
| − | + | <li>Playbook-Verzeichnisse</li> | |
| − | + | <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> | ||
| − | |||
| − | |||
| − | |||
== inventory == | == inventory == | ||
| − | + | <ul> | |
| − | + | <li><p>diese Datei enthält die zu administrierenden Hosts</p></li> | |
| − | + | <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> | ||
| − | |||
| − | |||
== Erreichbarkeitstest == | == Erreichbarkeitstest == | ||
| − | |||
| − | |||
| − | + | <ul> | |
| − | + | <li><p>mit der Option '''-k''' wird das SSH-Passwort abgefragt</p></li> | |
| − | + | <li><p>'''ansible -m gather_facts debian -k'''</p> | |
| − | + | <p>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” ],</p></li></ul> | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
= Bootstrap = | = Bootstrap = | ||
| Zeile 52: | Zeile 46: | ||
=== Hinterlegen des öffentlichen SSH-Keys === | === Hinterlegen des öffentlichen SSH-Keys === | ||
| − | + | <ul> | |
| + | <li><p>'''vim bootstrap.yml'''</p> | ||
| − | + | ----- | |
| − | + | ||
| − | + | <ul> | |
| − | + | <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> | |
| − | + | </li> | |
| − | + | <li><p>'''ansible-playbook bootstrap.yml -k'''</p></li> | |
| − | + | <li><p>Jetzt sollte kein Passwort notwendig sein</p></li> | |
| − | + | <li><p>'''ansible -m gather_facts debian'''</p></li></ul> | |
| − | |||
| − | |||
| − | |||
| − | |||
== Pakete installieren == | == Pakete installieren == | ||
| − | + | <ul> | |
| − | + | <li><p>'''vim bootstrap.yml'''</p> | |
| − | + | <p>…</p> | |
| − | + | <ul> | |
| − | + | <li>name: Installiere vim und sudo become: true package: name: “{{ item }}” state: present with_items: - vim - sudo</li></ul> | |
| − | + | </li> | |
| − | + | <li><p>Die Standard Become-Methode ist '''sudo'''</p></li> | |
| − | + | <li><p>Da es aber noch nicht installiert ist, müssen wir '''su''' verwenden</p></li> | |
| − | + | <li><p>Das root Passwort kann mit '''-K''' mitgegeben werden</p></li> | |
| − | + | <li><p>'''ansible-playbook bootstrap.yml --become-method=su -K'''</p></li></ul> | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
== Passwortlos zum Benutzer root werden == | == Passwortlos zum Benutzer root werden == | ||
| − | + | <ul> | |
| − | + | <li><p>Wir haben vorher das Paket sudo installiert, welches die Standard Become-Methode ist</p></li> | |
| − | + | <li><p>In dessen Konfigurationsdatei kann man einstellen, dass für bestimmte Gruppen die Anmeldung passwortlos sein soll</p></li> | |
| − | + | <li><p>Dazu die folgenden drei Schritte</p></li> | |
| − | + | <li><p>'''vim bootstrap.yml'''</p> | |
| − | + | <p>…</p> | |
| − | + | <ul> | |
| − | + | <li>name: Sicherstellen, dass die Gruppe sudo existiert become: true group: name: sudo state: present</li> | |
| − | + | <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> | |
| − | + | <li>name: Füge Benutzer xinux zur Gruppe sudo hinzu become: true user: name: xinux groups: sudo append: true</li></ul> | |
| − | + | </li> | |
| − | + | <li><p>'''ansible-playbook bootstrap.yml --become-method=su -K'''</p></li></ul> | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
== vim konfigurieren == | == vim konfigurieren == | ||
| − | + | <ul> | |
| − | + | <li><p>'''mkdir files'''</p></li> | |
| − | + | <li><p>'''vim files/vimrc'''</p> | |
| − | + | <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><Space>`{=html}` : nnoremap </code><CR><code>{=html}</code> /</p></li> | |
| − | + | <li><p>'''vim bootstrap.yml'''</p> | |
| − | + | <p>…</p> | |
| − | + | <ul> | |
| − | + | <li>name: Füge das lokale Fragment an die Default vim-Einstellungen become: true copy: src: files/vimrc dest: /etc/vim/vimrc</li></ul> | |
| − | + | </li> | |
| − | + | <li><p>Da nun alle Zugänge für Ansible passwortlos sind, können wir die vorigen Parameter weglassen</p></li> | |
| − | + | <li><p>'''ansible-playbook bootstrap.yml'''</p></li></ul> | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
= Zusammenfassung = | = Zusammenfassung = | ||
| Zeile 155: | Zeile 104: | ||
== ansible.cfg == | == ansible.cfg == | ||
| − | + | <ul> | |
| − | + | <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> | ||
| − | |||
| − | |||
| − | |||
| − | |||
== inventory == | == inventory == | ||
| − | + | <ul> | |
| − | + | <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> | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
== bootstrap.yml == | == bootstrap.yml == | ||
| − | + | <ul> | |
| − | + | <li><p>Alle in ''inventory'' eingetragenen Hosts adressieren mit '''hosts: all'''<br /> | |
| − | + | </p></li> | |
| − | + | <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> | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
== vimrc == | == vimrc == | ||
| − | + | <ul> | |
| − | + | <li><p>'''vim files/vimrc'''</p> | |
| − | + | <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><Space>`{=html}` : nnoremap </code><CR><code>{=html}</code> /</p></li></ul> | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
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}/