<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.ixheim.de/index.php?action=history&amp;feed=atom&amp;title=Ansible_mit_Rocky</id>
	<title>Ansible mit Rocky - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.ixheim.de/index.php?action=history&amp;feed=atom&amp;title=Ansible_mit_Rocky"/>
	<link rel="alternate" type="text/html" href="https://wiki.ixheim.de/index.php?title=Ansible_mit_Rocky&amp;action=history"/>
	<updated>2026-06-28T20:32:18Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Xinux Wiki</subtitle>
	<generator>MediaWiki 1.35.1</generator>
	<entry>
		<id>https://wiki.ixheim.de/index.php?title=Ansible_mit_Rocky&amp;diff=70264&amp;oldid=prev</id>
		<title>Thomas.will: Die Seite wurde neu angelegt: „= Ansible auf Rocky Linux =  Ansible ist ein agentenloser Automatisierungsdienst – es wird nur auf dem Control Node installiert, die verwalteten Maschinen br…“</title>
		<link rel="alternate" type="text/html" href="https://wiki.ixheim.de/index.php?title=Ansible_mit_Rocky&amp;diff=70264&amp;oldid=prev"/>
		<updated>2026-05-20T06:23:05Z</updated>

		<summary type="html">&lt;p&gt;Die Seite wurde neu angelegt: „= Ansible auf Rocky Linux =  Ansible ist ein agentenloser Automatisierungsdienst – es wird nur auf dem Control Node installiert, die verwalteten Maschinen br…“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Ansible auf Rocky Linux =&lt;br /&gt;
&lt;br /&gt;
Ansible ist ein agentenloser Automatisierungsdienst – es wird nur auf dem Control Node installiert, die verwalteten Maschinen brauchen nichts außer SSH und Python. Im Labor übernimmt der Client im LAN die Rolle des Control Node und verwaltet alle DMZ-Server.&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
;Ansible wird nur auf dem Control Node installiert – also auf client.it2XX.int&lt;br /&gt;
* dnf install -y ansible&lt;br /&gt;
&lt;br /&gt;
= SSH-Schlüssel vorbereiten =&lt;br /&gt;
;Ansible kommuniziert über SSH – der Control Node braucht einen Schlüssel der auf allen Zielsystemen hinterlegt ist&lt;br /&gt;
* ssh-keygen -t ed25519 -C &amp;quot;ansible@it2XX.int&amp;quot;&lt;br /&gt;
;Schlüssel auf alle DMZ-Server verteilen&lt;br /&gt;
* ssh-copy-id root@ns.it2XX.int&lt;br /&gt;
* ssh-copy-id root@www.it2XX.int&lt;br /&gt;
* ssh-copy-id root@ldap.it2XX.int&lt;br /&gt;
&lt;br /&gt;
= Inventory =&lt;br /&gt;
;Das Inventory listet alle verwalteten Maschinen – hier gruppiert nach ihrer Rolle&lt;br /&gt;
* mkdir -p /etc/ansible&lt;br /&gt;
* vi /etc/ansible/hosts&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[dmz]&lt;br /&gt;
ns.it2XX.int&lt;br /&gt;
www.it2XX.int&lt;br /&gt;
ldap.it2XX.int&lt;br /&gt;
&lt;br /&gt;
[dmz:vars]&lt;br /&gt;
ansible_user=root&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Erster Test =&lt;br /&gt;
;Alle Maschinen anpingen – Ansible nutzt dafür das ping-Modul, nicht ICMP&lt;br /&gt;
* ansible all -m ping&lt;br /&gt;
 ns.it2XX.int | SUCCESS =&amp;gt; {&lt;br /&gt;
     &amp;quot;changed&amp;quot;: false,&lt;br /&gt;
     &amp;quot;ping&amp;quot;: &amp;quot;pong&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
;Ad-hoc Befehl auf allen Maschinen ausführen&lt;br /&gt;
* ansible all -m command -a &amp;quot;hostname&amp;quot;&lt;br /&gt;
&lt;br /&gt;
;Nur die DMZ-Gruppe ansprechen&lt;br /&gt;
* ansible dmz -m command -a &amp;quot;uptime&amp;quot;&lt;br /&gt;
&lt;br /&gt;
= Playbooks =&lt;br /&gt;
&lt;br /&gt;
;Ein Playbook ist eine YAML-Datei die Tasks in einer bestimmten Reihenfolge ausführt&lt;br /&gt;
;Einfaches Beispiel – Paket installieren und Dienst starten&lt;br /&gt;
* vi /root/test.yml&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
- name: Testplaybook&lt;br /&gt;
  hosts: dmz&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: tree installieren&lt;br /&gt;
      dnf:&lt;br /&gt;
        name: tree&lt;br /&gt;
        state: present&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* ansible-playbook /root/test.yml&lt;br /&gt;
&lt;br /&gt;
= Rollen =&lt;br /&gt;
&lt;br /&gt;
;Rollen sind wiederverwendbare Ansible-Strukturen – Playbook, Templates und Handler in einem Verzeichnis&lt;br /&gt;
;Eine Rolle hat immer dieselbe Verzeichnisstruktur:&lt;br /&gt;
 roles/&lt;br /&gt;
 └── rollenname/&lt;br /&gt;
     ├── tasks/&lt;br /&gt;
     │   └── main.yml&lt;br /&gt;
     ├── templates/&lt;br /&gt;
     ├── handlers/&lt;br /&gt;
     │   └── main.yml&lt;br /&gt;
     └── defaults/&lt;br /&gt;
         └── main.yml&lt;br /&gt;
&lt;br /&gt;
;Rollengerüst automatisch erstellen&lt;br /&gt;
* mkdir -p /etc/ansible/roles&lt;br /&gt;
* cd /etc/ansible/roles&lt;br /&gt;
* ansible-galaxy init sssd&lt;br /&gt;
* ansible-galaxy init ssh-hardening&lt;br /&gt;
&lt;br /&gt;
= Rolle: SSSD =&lt;br /&gt;
&lt;br /&gt;
;Diese Rolle installiert SSSD auf allen DMZ-Servern und verbindet sie gegen den LDAP-Server&lt;br /&gt;
&lt;br /&gt;
== tasks/main.yml ==&lt;br /&gt;
* vi /etc/ansible/roles/sssd/tasks/main.yml&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
- name: Pakete installieren&lt;br /&gt;
  dnf:&lt;br /&gt;
    name:&lt;br /&gt;
      - sssd&lt;br /&gt;
      - sssd-ldap&lt;br /&gt;
      - oddjob&lt;br /&gt;
      - oddjob-mkhomedir&lt;br /&gt;
    state: present&lt;br /&gt;
&lt;br /&gt;
- name: sssd.conf schreiben&lt;br /&gt;
  template:&lt;br /&gt;
    src: sssd.conf.j2&lt;br /&gt;
    dest: /etc/sssd/sssd.conf&lt;br /&gt;
    owner: root&lt;br /&gt;
    group: root&lt;br /&gt;
    mode: '0600'&lt;br /&gt;
  notify: sssd neu starten&lt;br /&gt;
&lt;br /&gt;
- name: authselect konfigurieren&lt;br /&gt;
  command: authselect select sssd with-mkhomedir --force&lt;br /&gt;
  changed_when: false&lt;br /&gt;
&lt;br /&gt;
- name: oddjobd starten&lt;br /&gt;
  systemd:&lt;br /&gt;
    name: oddjobd&lt;br /&gt;
    enabled: true&lt;br /&gt;
    state: started&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== templates/sssd.conf.j2 ==&lt;br /&gt;
;Das Template nutzt Ansible-Variablen – so funktioniert dieselbe Rolle für jeden Studenten&lt;br /&gt;
* vi /etc/ansible/roles/sssd/templates/sssd.conf.j2&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[sssd]&lt;br /&gt;
config_file_version = 2&lt;br /&gt;
services = nss, pam, sudo&lt;br /&gt;
domains = {{ domain }}&lt;br /&gt;
&lt;br /&gt;
[domain/{{ domain }}]&lt;br /&gt;
id_provider = ldap&lt;br /&gt;
auth_provider = ldap&lt;br /&gt;
chpass_provider = ldap&lt;br /&gt;
access_provider = permit&lt;br /&gt;
sudo_provider = ldap&lt;br /&gt;
ldap_uri = ldaps://ldap.{{ domain }}&lt;br /&gt;
ldap_search_base = dc={{ dc1 }},dc={{ dc2 }}&lt;br /&gt;
ldap_sudo_search_base = ou=sudo,dc={{ dc1 }},dc={{ dc2 }}&lt;br /&gt;
ldap_default_bind_dn = cn=admin,dc={{ dc1 }},dc={{ dc2 }}&lt;br /&gt;
ldap_default_authtok = {{ ldap_password }}&lt;br /&gt;
ldap_tls_cacert = /etc/pki/tls/certs/ca-bundle.crt&lt;br /&gt;
ldap_tls_reqcert = hard&lt;br /&gt;
cache_credentials = True&lt;br /&gt;
&lt;br /&gt;
[nss]&lt;br /&gt;
filter_users = root,daemon,bin,sys,sync,games,man,lp,mail,news,uucp,proxy,nobody,systemd-network,systemd-resolve,dbus,polkitd,unbound,tss,sssd,chrony,sshd,rngd&lt;br /&gt;
&lt;br /&gt;
[pam]&lt;br /&gt;
offline_credentials_expiration = 2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== handlers/main.yml ==&lt;br /&gt;
* vi /etc/ansible/roles/sssd/handlers/main.yml&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
- name: sssd neu starten&lt;br /&gt;
  systemd:&lt;br /&gt;
    name: sssd&lt;br /&gt;
    state: restarted&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== defaults/main.yml ==&lt;br /&gt;
;Standardwerte – werden durch group_vars oder host_vars überschrieben&lt;br /&gt;
* vi /etc/ansible/roles/sssd/defaults/main.yml&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
domain: &amp;quot;it2XX.int&amp;quot;&lt;br /&gt;
dc1: &amp;quot;it2XX&amp;quot;&lt;br /&gt;
dc2: &amp;quot;int&amp;quot;&lt;br /&gt;
ldap_password: &amp;quot;123Start$&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Rolle: SSH-Härtung =&lt;br /&gt;
&lt;br /&gt;
;Diese Rolle schaltet Passwort-Authentifizierung ab – erst nachdem die SSH-Keys verteilt wurden&lt;br /&gt;
;Wichtig: Reihenfolge beachten – erst Keys verteilen, dann diese Rolle ausführen&lt;br /&gt;
&lt;br /&gt;
== tasks/main.yml ==&lt;br /&gt;
* vi /etc/ansible/roles/ssh-hardening/tasks/main.yml&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
- name: Passwort-Login deaktivieren&lt;br /&gt;
  lineinfile:&lt;br /&gt;
    path: /etc/ssh/sshd_config&lt;br /&gt;
    regexp: '^#?PasswordAuthentication'&lt;br /&gt;
    line: 'PasswordAuthentication no'&lt;br /&gt;
    state: present&lt;br /&gt;
  notify: sshd neu starten&lt;br /&gt;
&lt;br /&gt;
- name: Root-Login nur mit Key erlauben&lt;br /&gt;
  lineinfile:&lt;br /&gt;
    path: /etc/ssh/sshd_config&lt;br /&gt;
    regexp: '^#?PermitRootLogin'&lt;br /&gt;
    line: 'PermitRootLogin prohibit-password'&lt;br /&gt;
    state: present&lt;br /&gt;
  notify: sshd neu starten&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== handlers/main.yml ==&lt;br /&gt;
* vi /etc/ansible/roles/ssh-hardening/handlers/main.yml&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
- name: sshd neu starten&lt;br /&gt;
  systemd:&lt;br /&gt;
    name: sshd&lt;br /&gt;
    state: restarted&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Playbook: DMZ ausrollen =&lt;br /&gt;
&lt;br /&gt;
;Ein Playbook das beide Rollen nacheinander ausführt&lt;br /&gt;
* vi /etc/ansible/dmz.yml&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
- name: DMZ-Server konfigurieren&lt;br /&gt;
  hosts: dmz&lt;br /&gt;
  roles:&lt;br /&gt;
    - sssd&lt;br /&gt;
    - ssh-hardening&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Zuerst nur SSSD ausrollen und testen&lt;br /&gt;
* ansible-playbook /etc/ansible/dmz.yml --tags sssd&lt;br /&gt;
&lt;br /&gt;
;Danach SSH-Härtung&lt;br /&gt;
* ansible-playbook /etc/ansible/dmz.yml&lt;br /&gt;
&lt;br /&gt;
;Dry-run – zeigt was sich ändern würde ohne es anzuwenden&lt;br /&gt;
* ansible-playbook /etc/ansible/dmz.yml --check&lt;br /&gt;
&lt;br /&gt;
= Kontrolle =&lt;br /&gt;
&lt;br /&gt;
;SSSD auf einem Server prüfen&lt;br /&gt;
* ansible ns.it2XX.int -m command -a &amp;quot;getent passwd thomas&amp;quot;&lt;br /&gt;
&lt;br /&gt;
;SSH-Konfiguration prüfen&lt;br /&gt;
* ansible dmz -m command -a &amp;quot;grep PasswordAuthentication /etc/ssh/sshd_config&amp;quot;&lt;br /&gt;
&lt;br /&gt;
;Alle Fakten eines Servers anzeigen – nützlich zur Fehlersuche&lt;br /&gt;
* ansible ns.it2XX.int -m setup&lt;br /&gt;
&lt;br /&gt;
= Logs =&lt;br /&gt;
* journalctl -fu sshd&lt;br /&gt;
* ansible-playbook /etc/ansible/dmz.yml -v&lt;br /&gt;
* ansible-playbook /etc/ansible/dmz.yml -vvv&lt;/div&gt;</summary>
		<author><name>Thomas.will</name></author>
	</entry>
</feed>