🖥️salt

➡️This is a command-line reference manual for commands and command combinations that you don’t use often enough to remember it. This cheatsheet explains the salt command with important options and switches using examples.

▁ ▂ ▃ ▄ ꧁ 🔴☠ COMMANDLINE-KUNGFU WITH CHEATSHEETS ☠🔴꧂▅ ▃ ▂ ▁

#                ███████╗ █████╗ ██╗  ████████╗
#                ██╔════╝██╔══██╗██║  ╚══██╔══╝
#                ███████╗███████║██║     ██║   
#                ╚════██║██╔══██║██║     ██║   
#                ███████║██║  ██║███████╗██║   
#                ╚══════╝╚═╝  ╚═╝╚══════╝╚═╝   
# Saltstack ist eine Softwareverwaltung für Linux und Windows, mit der eine große Anzahl von Systemen verwaltet werden kann
                                            

#------------#
# Todo Bei einem neuen Minion:
#-------------------------------#

1. apt install salt-minion
2. vi /etc/hosts muss die DMZ Adresse drin sein wie z.B.
    # 10.254.253.47 salt
3. vi /etc/salt/minion_id > 
    # FQDN wie z.B. proxy.lxu.io
4. Am Salt Master schauen ob es neue Minions gibt
   salt-key -L

5. DMZ 
    # Destination dmz.lxu.io (dmz Adresse) <-> DMZ = source
    # Ports TCP 4505 und TCP 4506 müssen eingehen  an der Inside Firewall offen sein

# DMZ muss in /etc/hosts eintrag rein: 
    # 10.254.254.10  salt

6. in der /etc/salt/minion_id 
    #muss der hostname in FQDN rein




### Installation
# -------------

# cname salt auf master einrichten -> salt.lxu.io

# Master
apt-get install salt-master

# Miniom
apt-get install salt-minion




### Administration (remote execution)
# ----------------------------------
# auf der Kommandozeile des Masters als root:


## Minions hinzufügen:
# -> zeigt accepted und unaccepted Clients an
salt-key -L  

# -> fügt accepted Clients hinzu
salt-key -A  

## Verwaltung:
salt-run manage.status

salt '*' test.ping
salt '*' cmr.run 'ls -l /etc/hosts'
salt '*' cmd.run 'lsb_release -d'
salt '*' network.interfaces
salt '*' status.loadavg
salt '*' disk.usage
salt '*' status.uptime

# Alle verfügbaren Module anschauen:
salt 'SERVER*' sys.doc | grep -E "^\w"

# Nur Befehle für pkg-Modul anschauen
salt 'SERVER*' sys.doc pkg

# Paket Version anschauen
salt 'SERVER.lxu.io' pkg.version vim

# Paket installieren
sealt 'SERVER.lxu.io' pkg.install vim

# Paket löschen
sealt 'LINUX-SERVER.lxu.io' pkg.purge vim

# Pakete updaten
salt 'SERVER*' pkg.list_upgrades
salt '*' pkg.upgrade
salt 'LINUX-SERVER.lxu.io' pkg.upgrade dryrun=True
# Achtung, nicht alle Maschinen gleichzeitig booten
salt 'LINUX-SERVER.lxu.io' system.reboot   

# Password generieren
salt 'minion_id' shadow.gen_password 'Plaintext_Password'

# Passwort ändern
salt 'minion_id' shadow.set_password root 'Password_Hash'



### States (system states)
# ---------------------

# zuerst in /etc/salt/master fileserver konfigurieren
  file_roots:
    base:
      - /srv/salt

# dann /etc/init.d/salt-master restart
/srv/salt/top.sls  Kommandozentrale
/srv/salt/vim      Pakte

# einen State ausführen:
salt -v 'LINUX-SERVER.lxu.io' state.sls vim

# state.apply = state.highstate oder state.sls
salt 'LINUX-SERVER' state.apply vim         





### Pillars (system variables)
# --------------------------




### Garin (Oberflächenbild)
# ------------------------

# Grains auflisten
salt 'LINUX-SERVER.lxu.io' grains.items

# Grain addressieren
salt -G 'virtual:VMware' test.ping


### Addressieren von Minions
# -------------------------

## 1. Liste

# in top.sls
  'LINUX-SERVER.lxu.io,proxy.lxu.io'
    - match: list

# addressieren  
salt -L


## 2. Nodegroups

# konfigurieren der Gruppe in /etc/salt/master
# in top.sls
  proxy:
    - match: nodegroup

# addressieren 
salt -N ...
salt -N 'dnsdmz' state.sls bind

salt -N 'mailrelay' state.highstate postfixmailrelay

  # oder

salt -N 'mailrelay' state.sls postfixmailrelay
# dazu muss postfixmailrelay nicht in top eingetragen sein

###########################################
# Verzeichnis auf lxu.io/srv/salt
#####################################

# alle hosts die mit dns beginnen werden angepingt
salt 'dns*' test.ping

# alle hosts die mit dns beginnen wird folgendes ausgeführt:
salt 'dns*' state.sls agentsdns


############ /srv/salt/agentsdns.sls ##########
# agent auf den sdns-Server installieren

# check-mk-agent:
#  pkg.purged: []
#  cmd.run:
#    - name: rm -f /root/check-mk-agent*deb

# checkmkagent:
#  cmd.run:
#    - name: dpkg -i /root/check-mk-agent_1.2.8p18_all.deb
#    - require:
#      - file: /root/check-mk-agent_1.2.8p18_all.deb

# /root/check-mk-agent_1.2.8p18_all.deb:
#  file.managed:
#    - source: salt://deploy/checkmk/check-mk-agent_1.2.8p18_all.deb

# register:
#  cmd.run:
#      - name: cmk-update-agent register -vvv --secret SECRETPASS

# Packet Upgrades verfügber? 
salt 'unix.lxu.io' pkg.list_upgrades

# Packete Upgraden 
salt 'unix.lxu.io' pkg.upgrade

# dhcpdconfsdns.sls ausfürhen (alle configs auf allen dhcp server austauschen)
salt 'dhcp.lxu.*' state.sls dhcpdconfsdns

# config verzeichnis [email protected]:/srv/salt/deploy/dhcpdsdns
history | awk '{print $4,$5,$6,$7,$8,$9,$10}' | grep -i salt
cd /srv/salt/deploy/     

salt-key -L     
salt-key -L | grep voip  
salt-key -L | grep prx  
salt-key -A     
salt-key -L | wc -l  

salt 'dns.lxu.io' state.highstate    
salt-cmd proxy.lxu.io test.ping    
salt apache.lxu.io test.ping    

# drüberkopieren
salt-cp dhcp.lxu.io ./sysctl.conf /etc/   
salt-cp proxy.lxu.io ./sysctl.conf /etc/   
salt nginx.lxu.io cmd.run 'sysctl -p'  
salt nbinx.lxu.io cmd.run 'sysctl -p'  

salt proxy.lxu.io cmd.run 'sysctl -p'  
salt-key -d bind9.lxu.io    
salt 'saltstack.lxu.io' state.highstate    

# Anpingen eines Servers
salt unix-srv50.lxu.io test.ping    
salt unix-srv360.lxu.io test.ping    

salt '*' cmd.run 'lsb_release -d'
salt 'proxy*' pkg.update
salt 'server1.lxu.io' pkg.upgrade
salt '*.lxu.io' pkg.install linux-image-amd64
salt 'ssh.lxu.io' state.sls vim   
salt '*.lxu.io' pkg.autoremove purge=True
salt 'dhcp.lxu.io' system.reboot
salt 'squidproxy*' cmd.run 'tail /var/log/squid/access.log'
salt -N 'mailrelay' state.sls postfixmailrelay

# Eine Nodegroup wird unter /etc/salt/master erstellt - z.b. nodegroup unix-srv:
unix-srv: '[email protected],unix-srv379.lxu.io,unix-srv380.lxu.io,unix-srv381.lxu.io,unix-srv383.lxu.io,unix-srv384.lxu.io,unix-srv389.lxu.io,unix-srv390.lxu.io,unix-srv391.lxu.io,unix-srv392.lxu.io,unix-srv393.lxu.io,unix-srv394.lxu.io,unix-srv770.lxu.io,unix-srv774.lxu.io,unix-srv777.lxu.io,unix-srv260.lxu.io,unix-srv260.lxu.io'

salt -N 'unix-srv' cmd.run 'lsb_release -d'
salt -N 'unix-srv' cmd.run 'tail -n 10 /var/log/daemon.log'
salt -N 'unix-srv' cmd.run 'tail -n 10 /var/log/daemon.log'


#-----------------------------------------------------------------------///
# Port 4506 Saltstack
#-----------------------------------------------------------------------///
# Beispiel: Benutzer anlegen
salt * user.add thorsten

# Benutzer auf allen Systemen anlegen
salt '*' ssh.set_auth_key admin AAAAB3NzaC2y…p8cxw==enc='rsa' comment='[email protected]'

# Einen öffentlichen SSH-Schlüssel hinterlegen
salt '*' user.chshell admin /bin/bash

salt * cmd.run "lsb_release -d"
salt * pkg.upgrade 

# Beispiel: Benutzer anlegen
salt * user.add thorsten

# Benutzer auf allen Systemen anlegen
salt '*' ssh.set_auth_key admin AAAAB3NzaC2y…p8cxw==enc='rsa' comment='[email protected]'

# Einen öffentlichen SSH-Schlüssel hinterlegen
salt '*' user.chshell admin /bin/bash

# Minions adressieren (Grain = Oberflächenbild)
salt -G "os_family:RedHat" test.ping

# unter der Oberfläche
salt minion1.lxu.io grains.items

# States definieren in /etc/salt/master
file_roots:
  base:
    - /srv/salt

# Die Kommandobrücke: top.sls
/srv/salt/top.sls

# Benutzer verwalten
/srv/salt/create_user.sls



### Push & Pull
# -------------

# Pull - Minions holen sich alle States ab: root@minion2:~ 
salt-call state.highstate

# Push - Master schickt alle Sates (top.sls): root@master:~
salt minion1.lxu.io state.highstate

# Master schickt einen State: root@master:~# 
salt minion1.lxu.io state.sls create_user



# dynamische Dateien mit Jinja
#-----------------------------------------------------------------------///

# Upgade Buster
/etc/apparmor.d/local/usr.sbin.named

# alle die mit linux- anfangen - rausfinden wie die wirktlich heißen
salt 'linux-*' cmd.run 'hostname' 

# System testpingen
salt 'linux-sftp.lxu.io' test.ping

# System upgraden
salt 'linux-sftp.lxu.io' pkg.upgrade dist_upgrade=yes

# Alten system aufräumen
salt 'linux-sftp.lxu.io' pkg.autoremove

# System upgraden
salt 'linux-sftp.lxu.io' pkg.upgrade dist_upgrade=yes

# reboot
salt 'linux-sftp.lxu.io' system.reboot

# testen ob 10 läuft
salt 'linux-sftp.lxu.io' '*' cmd.run 'lsb_release -d'


# Shell Variable setzen
[email protected]:/srv/salt# MyServer=lxu.io
[email protected]:/srv/salt# echo $MyServer
#-----------------------------------------------------------------#
salt '$MyServer' pkg.upgrade dist_upgrade=yes
salt '$MyServer' state.sls upgrade
salt '$MyServer' pkg.upgrade dist_upgrade=yes

# -> Minion did not return. [Not connected]
# dauert weile -> 5min bis minion wieder da ist

salt '$MyServer' pkg.autoremove
salt '$MyServer' system.reboot
salt '$MyServer' test.ping


[email protected]:/srv/salt# MyServer=linux.lxu.io
[email protected]:/srv/salt# echo $MyServer
#-----------------------------------------------------------------#
salt -N '2upgrade' pkg.upgrade dist_upgrade=yes
salt -N '2upgrade' state.sls upgrade
salt -N '2upgrade' pkg.upgrade dist_upgrade=yes
 
 # -> Minion did not return. [Not connected]
 # dauert weile -> 5min bis minion wieder da ist
 
salt -N '2upgrade' pkg.autoremove
salt -N '2upgrade' system.reboot
salt -N '2upgrade' test.ping

# Tests
salt -N '2upgrade' cmd.run 'service isc-dhcp-server status'
salt -N '2upgrade' cmd.run 'service bind9 status'
salt -N '2upgrade' cmd.run 'tail -n 50 /var/log/daemon.log'
salt -N '2upgrade' cmd.run 'dig @localhost linux.lxu.io'
salt -N '2upgrade' cmd.run 'dig @localhost google.com'

## recive Files from salt-minion
# gehen ins verzeichnis: -> /var/cache/salt/master/minions/linux.lxu.io/files/root
#	-> salt linux.lxu.io cp.push /root/testdatei
salt linux.lxu.io cp.push /root/testdatei

# copiert von remote nach /var/cache/salt/master/minions/mx.lxu.io/files/*
salt -N mxn cp.push_dir /etc/postfix/
salt linux.lxu.io cp.push /etc/dhcp/

salt mx.lxu.io cp.push_dir /etc/postfix/
salt mx.lxu.io cp.push_dir /etc/rspamd/
salt mx.lxu.io cp.push_dir /var/lib/clamav/

# von . local das script nach /usr/local/bin zu den minions kopieren
salt-cp dhcp.lxu.io 'dhcplease-monitor.sh' '/usr/local/bin'

# auf minions remote dateirecht des scripts ändern auf execuable
salt dhcp.lxu.io cmd.run 'chmod +x /usr/local/bin/dhcplease-monitor.sh'

# Testping auf dhcp.lxu.io 
salt 'dhcp.lxu.io*' test.ping

# Copy des scripts nach /usr/local/bin
salt-cp 'dhcp.lxu.io*' 'dhcplease-monitor.sh' '/usr/local/bin'

# chmod eines scripts über 
salt 'dhcp.lxu.io*' cmd.run 'chmod u+x /usr/local/bin/dhcplease-monitor.sh'



#==============================##==============================#
# CMD SALT						       #
#==============================##==============================#
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░

  █║▌│║█║▌★ KALI ★ PARROT ★ DEBIAN 🔴 PENTESTING ★ HACKING ★ █║▌│║█║▌

              ██╗ ██╗ ██████╗  ██████╗ ██╗  ██╗███████╗██████╗
             ████████╗██╔══██╗██╔═══██╗╚██╗██╔╝██╔════╝██╔══██╗
             ╚██╔═██╔╝██║  ██║██║   ██║ ╚███╔╝ █████╗  ██║  ██║
             ████████╗██║  ██║██║   ██║ ██╔██╗ ██╔══╝  ██║  ██║
             ╚██╔═██╔╝██████╔╝╚██████╔╝██╔╝ ██╗███████╗██████╔╝
              ╚═╝ ╚═╝ ╚═════╝  ╚═════╝ ╚═╝  ╚═╝╚══════╝╚═════╝

               █║▌│║█║▌ WITH COMMANDLINE-KUNGFU POWER █║▌│║█║▌

░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░