Compare commits
48
Commits
1befa79366
..
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
105395c62d | ||
|
|
e0df6c5405 | ||
|
|
083f42ca51 | ||
|
|
2fca686b56 | ||
|
|
9a4b1ef83d | ||
|
|
c950d17582 | ||
|
|
e87a48cd7a | ||
|
|
cf1852fd0a | ||
|
|
7c192a0e05 | ||
|
|
83c3b620e9 | ||
|
|
6444a814b0 | ||
|
|
56c5255442 | ||
|
|
d248af483d | ||
|
|
495713b5c2 | ||
|
|
28f6958ae3 | ||
|
|
8685420f24 | ||
|
|
fdfe0f3594 | ||
|
|
4863322ee3 | ||
|
|
99a712ffa4 | ||
|
|
e9f493bc63 | ||
|
|
de44af64b4 | ||
|
|
a1046bda79 | ||
|
|
b361f27241 | ||
|
|
55529624c2 | ||
|
|
473cf80c62 | ||
|
|
bbe2db2700 | ||
|
|
a6ff8e5a6f | ||
|
|
5ae6001157 | ||
|
|
fa2bf9d50d | ||
|
|
e283a519b8 | ||
|
|
1bc0c2eb5e | ||
|
|
50e0126dd3 | ||
|
|
60856b0312 | ||
|
|
84e6a6eefe | ||
|
|
aa7cab41d7 | ||
|
|
c299e074b8 | ||
|
|
fc48de8132 | ||
|
|
93089d6eac | ||
|
|
00fac9ff89 | ||
|
|
52dfa9de5f | ||
|
|
75d5680364 | ||
|
|
9810a03376 | ||
|
|
6116e9283e | ||
|
|
10b000feef | ||
|
|
0d56365fcf | ||
|
|
b657d768ee | ||
|
|
c39398637b | ||
|
|
55efaf776d |
@@ -8,6 +8,7 @@ Hier sammeln wir kleine Helfer für Log-Analysen, Automatisierungen und typische
|
|||||||
- [Quick Start](#quick-start)
|
- [Quick Start](#quick-start)
|
||||||
- [Übersicht](#übersicht)
|
- [Übersicht](#übersicht)
|
||||||
- [Bash-Profile](#bash-profile)
|
- [Bash-Profile](#bash-profile)
|
||||||
|
- [Domaintools](#domaintools)
|
||||||
- [Legacy Snippets](#legacy-snippets)
|
- [Legacy Snippets](#legacy-snippets)
|
||||||
- [WH20 Snippets](#wh20-snippets)
|
- [WH20 Snippets](#wh20-snippets)
|
||||||
- [Installation](#installation)
|
- [Installation](#installation)
|
||||||
@@ -22,6 +23,7 @@ Hier sammeln wir kleine Helfer für Log-Analysen, Automatisierungen und typische
|
|||||||
Die Skripte sind nach Kategorie getrennt:
|
Die Skripte sind nach Kategorie getrennt:
|
||||||
|
|
||||||
- [**Bashprofiles**](./bashprofiles/README.md) – Optimierte Bash-Konfigurationen
|
- [**Bashprofiles**](./bashprofiles/README.md) – Optimierte Bash-Konfigurationen
|
||||||
|
- [**Domaintools**](./domaintools/README.md) - Tools für Domainabfragen
|
||||||
- [**Legacy**](./legacy/README.md) – Snippets für Legacy-Umgebungen (inkl. Connect Tools)
|
- [**Legacy**](./legacy/README.md) – Snippets für Legacy-Umgebungen (inkl. Connect Tools)
|
||||||
- [**WH20**](./wh20/README.md) – Snippets für WH20-Umgebungen
|
- [**WH20**](./wh20/README.md) – Snippets für WH20-Umgebungen
|
||||||
|
|
||||||
@@ -33,6 +35,17 @@ Optimierte Bash-Konfigurationen für verschiedene Support-Umgebungen:
|
|||||||
- [`pl`](./bashprofiles/pl)
|
- [`pl`](./bashprofiles/pl)
|
||||||
→ [Dokumentation & Beispiele](./bashprofiles/README.md)
|
→ [Dokumentation & Beispiele](./bashprofiles/README.md)
|
||||||
Basis-Profil mit erweiterter History, farbigem Prompt und modularer Struktur
|
Basis-Profil mit erweiterter History, farbigem Prompt und modularer Struktur
|
||||||
|
- [`eign01`](./bashprofiles/eign01/)
|
||||||
|
Sicherungskopie der aktuellen `.bashrc` von `eign01`.
|
||||||
|
|
||||||
|
## Domaintools
|
||||||
|
|
||||||
|
- [`domainchecker`](./domaintools/domainchecker/README.md)
|
||||||
|
Tool zur `dig`-Massenabfrage von Domains und DNS-Records.
|
||||||
|
- [`histodomain`](./domaintools/histodomain/README.md)
|
||||||
|
Abfrage zu historischen DNS-Einträgen über die [Securitytrails-API](https://securitytrails.com).
|
||||||
|
- [`sslchecker`](./domaintools/sslchecker/README.md)
|
||||||
|
Tool zur schnellen SSL-Prüfung mehrerer Domains gleichzeitig.
|
||||||
|
|
||||||
## Legacy Snippets
|
## Legacy Snippets
|
||||||
|
|
||||||
@@ -52,7 +65,16 @@ Optimierte Bash-Konfigurationen für verschiedene Support-Umgebungen:
|
|||||||
|
|
||||||
- [`plesk`](./wh20/plesk)
|
- [`plesk`](./wh20/plesk)
|
||||||
Dieses Skript stellt eine SSH-Verbindung zu einem angegebenen Webserver her und generiert so einen einmaligen Login-Link für das Plesk Admin Panel des gewünschten Servers.
|
Dieses Skript stellt eine SSH-Verbindung zu einem angegebenen Webserver her und generiert so einen einmaligen Login-Link für das Plesk Admin Panel des gewünschten Servers.
|
||||||
|
- [`wh20`](./wh20/wh20)
|
||||||
|
Dieses Skript verbindet zum angegbenen Webserver via SSH
|
||||||
|
- [`damagecontrol`](./wh20/damagereport)
|
||||||
|
Dieses Skript ermöglicht die kombinierte Abfrage zu geläufigen Problemen mit MS365-Empfängern über [`checkms`](./legacy/checkms), [`adspam`](./wh20/adspam), [`donaspam`](wh20/donaspam) sowie [`spamcheck` selbst](.wh20/spamcheck).
|
||||||
|
- [`adspam`](./adspam)
|
||||||
|
Dieses Skript ermöglicht die Prüfung auf geläufige MS365- und Spamhaus-Fehlermeldungen auf Adino-Servern direkt von der Connect aus.
|
||||||
|
- [`donaspam`](./donaspam)
|
||||||
|
Dieses Skript ermöglicht die Prüfung auf geläufige MS365- und Spamhaus-Fehlermeldungen auf inname-Servern direkt von der Connect aus.
|
||||||
|
- [`spamcheck`](./spamcheck)
|
||||||
|
Dieses Skript ermöglicht die Prüfung auf geläufige MS365- und Spamhaus-Fehlermeldungen auf einem Plesk-Server.
|
||||||
---
|
---
|
||||||
|
|
||||||
## Quick Start
|
## Quick Start
|
||||||
@@ -129,9 +151,10 @@ cd /pfad/zu/esn-support-tools
|
|||||||
Um ein neues Bash-Skript in dieses Repository aufzunehmen, bitte folgende Schritte:
|
Um ein neues Bash-Skript in dieses Repository aufzunehmen, bitte folgende Schritte:
|
||||||
|
|
||||||
1. **Ordnerstruktur anlegen**
|
1. **Ordnerstruktur anlegen**
|
||||||
Je nach Kategorie (`bashprofiles`, `legacy` oder `wh20`) einen Unterordner erstellen:
|
Je nach Kategorie (`bashprofiles`, `domaintools`, `legacy` oder `wh20`) einen Unterordner erstellen:
|
||||||
```
|
```
|
||||||
bashprofiles/<username>/
|
bashprofiles/<username>/
|
||||||
|
domaintools/<scriptname>/
|
||||||
legacy/<scriptname>/
|
legacy/<scriptname>/
|
||||||
wh20/<scriptname>/
|
wh20/<scriptname>/
|
||||||
```
|
```
|
||||||
@@ -139,6 +162,10 @@ Um ein neues Bash-Skript in dieses Repository aufzunehmen, bitte folgende Schrit
|
|||||||
2. **Skript hinzufügen**
|
2. **Skript hinzufügen**
|
||||||
Das eigentliche Skript im neuen Ordner ablegen:
|
Das eigentliche Skript im neuen Ordner ablegen:
|
||||||
```
|
```
|
||||||
|
domaintools/<scriptname>/<scriptname>
|
||||||
|
```
|
||||||
|
oder
|
||||||
|
```
|
||||||
legacy/<scriptname>/<scriptname>
|
legacy/<scriptname>/<scriptname>
|
||||||
```
|
```
|
||||||
oder
|
oder
|
||||||
@@ -156,6 +183,10 @@ Um ein neues Bash-Skript in dieses Repository aufzunehmen, bitte folgende Schrit
|
|||||||
[README_template_script.md](./README_template.md)
|
[README_template_script.md](./README_template.md)
|
||||||
→ kopieren, anpassen und ins Skript-Verzeichnis legen:
|
→ kopieren, anpassen und ins Skript-Verzeichnis legen:
|
||||||
```
|
```
|
||||||
|
domaintools/<scriptname>/README.md
|
||||||
|
```
|
||||||
|
oder
|
||||||
|
```
|
||||||
legacy/<scriptname>/README.md
|
legacy/<scriptname>/README.md
|
||||||
```
|
```
|
||||||
oder
|
oder
|
||||||
@@ -166,6 +197,7 @@ Um ein neues Bash-Skript in dieses Repository aufzunehmen, bitte folgende Schrit
|
|||||||
4. **Übersicht aktualisieren**
|
4. **Übersicht aktualisieren**
|
||||||
Das Skript in die Übersicht der passenden Kategorie-README eintragen:
|
Das Skript in die Übersicht der passenden Kategorie-README eintragen:
|
||||||
- [`bashprofiles/README.md`](./bashprofiles/README.md)
|
- [`bashprofiles/README.md`](./bashprofiles/README.md)
|
||||||
|
- [`domaintools/README.md`](./domaintools/README.md)
|
||||||
- [`legacy/README.md`](./legacy/README.md)
|
- [`legacy/README.md`](./legacy/README.md)
|
||||||
- [`wh20/README.md`](./wh20/README.md)
|
- [`wh20/README.md`](./wh20/README.md)
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,73 @@
|
|||||||
|
# Domain Tools
|
||||||
|
|
||||||
|
Sammlung von Bash-Skripten für diversen Abfragen zu Domains. Enthält Tools zur Massenabfrage von DNS-Einträgen sowie zur Anzeige historischer DNS-Einträge.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Inhaltsverzeichnis
|
||||||
|
|
||||||
|
- [Übersicht](#Übersicht)
|
||||||
|
- [Enthaltene Tools](#enthaltene-Tools)
|
||||||
|
- [Voraussetzungen](#Voraussetzungen)
|
||||||
|
- [Lizenz/Sichtbarkeit](#lizenz--sichtbarkeit)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Übersicht
|
||||||
|
|
||||||
|
******
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## enthaltene Tools
|
||||||
|
|
||||||
|
### [`domainchecker`](./domainchecker/)
|
||||||
|
Tool zur dig-Massenabfrage von Domains und DNS-Records.
|
||||||
|
|
||||||
|
- [Dokumentation & Beispiele](./domainchecker/README.md)
|
||||||
|
|
||||||
|
### [`histodomain`](./histodomain/)
|
||||||
|
Abfrage zu historischen DNS-Einträgen über die Securitytrails-API.
|
||||||
|
|
||||||
|
- [Dokumentation & Beispiele](./histodomain/README.md)
|
||||||
|
|
||||||
|
### [`sslchecker`](./sslchecker/)
|
||||||
|
Tool zur schnellen SSL-Prüfung mehrerer Domains gleichzeitig.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Voraussetzungen
|
||||||
|
|
||||||
|
### generelle Voraussetzungen
|
||||||
|
- kann auch von außerhalb der Connect genutzt werden, sofern eine lokale `bash` verwendbar ist
|
||||||
|
- **Kerberos-Setup**: Funktionierende Kerberos-Konfiguration
|
||||||
|
- **SSH-Zugriff**: Berechtigungen für easyname-Infrastruktur
|
||||||
|
|
||||||
|
### Setup-Anleitung
|
||||||
|
|
||||||
|
1. Kerberos-Ticket erstellen:
|
||||||
|
```bash
|
||||||
|
kinit deinusername@NESSUS.AT
|
||||||
|
# oder mit go-Tool:
|
||||||
|
go kinit
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Tool in PATH hinzufügen oder Alias erstellen:
|
||||||
|
```bash
|
||||||
|
# Option 1: Alias
|
||||||
|
alias domainchecker="/pfad/zu/domaintools/domainchecker/domainchecker.sh"
|
||||||
|
|
||||||
|
# Option 2: Symlink
|
||||||
|
ln -s /pfad/zu/domaintools/domainchecker/domainchecker.sh ~/bin/domainchecker
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Lizenz / Sichtbarkeit
|
||||||
|
|
||||||
|
> Dieses Repository ist **intern** für easyname Support.
|
||||||
|
> Falls eine Freigabe nach extern geplant ist, bitte vorab mit Teamleitung abklären.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*Diese Tools wurden mit Hilfe von Microsoft Copilot erstellt.*
|
||||||
@@ -0,0 +1,96 @@
|
|||||||
|
# domainchecker
|
||||||
|
|
||||||
|
Domainchecker für schnelle Prüfung eines beliebigen DNS-Records für eine beliebige Anzahl an Domains
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
- Ausgabe einer Liste von DNS-Records für eine beliebige in einem Array übergebene Anzahl Domains
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
1. Repository klonen oder Skript kopieren:
|
||||||
|
```bash
|
||||||
|
git clone git.in.loki-net.at/esn-support-bash-snippets.git
|
||||||
|
cd esn-support-bash-snippets/domaintools/domainchecker
|
||||||
|
chmod +x domainchecker.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Abhängigkeiten (falls vorhanden) installieren:
|
||||||
|
- dnsutils (dig), also vorinstalliert auf connect-lej.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Nutzung
|
||||||
|
|
||||||
|
### Standardaufruf
|
||||||
|
```bash
|
||||||
|
./domainchecker.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
### Beispiele
|
||||||
|
```bash
|
||||||
|
bash domainchecker.sh
|
||||||
|
> Welche Domains sollen gesucht werden?
|
||||||
|
> domain1.tld domain2.tld domain3.tld domain4.tld
|
||||||
|
> Welcher Record soll untersucht werden?
|
||||||
|
> A
|
||||||
|
domain1.tld A-Records:
|
||||||
|
⤷
|
||||||
|
====
|
||||||
|
domain2.tld A-Records:
|
||||||
|
⤷91.151.18.26
|
||||||
|
====
|
||||||
|
domain3.tld A-Records:
|
||||||
|
⤷91.151.18.26
|
||||||
|
====
|
||||||
|
domain4.tld A-Records:
|
||||||
|
⤷91.151.18.28
|
||||||
|
====
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Optionen
|
||||||
|
|
||||||
|
```
|
||||||
|
Usage: ./<scriptname> [OPTIONS]
|
||||||
|
|
||||||
|
--help Zeigt diese Hilfe
|
||||||
|
--option Beispieloption
|
||||||
|
YYYY-MM-DD Beispiel für Datumsargument
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Beispielausgabe
|
||||||
|
|
||||||
|
```
|
||||||
|
Hier ein Beispieloutput des Skripts.
|
||||||
|
```
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Setup-Hinweise
|
||||||
|
|
||||||
|
Falls notwendig, Alias in `~/.bashrc` setzen:
|
||||||
|
```bash
|
||||||
|
alias <scriptname>='~/pfad/zum/repo/<legacy|wh20>/<scriptname>/<scriptname>'
|
||||||
|
```
|
||||||
|
|
||||||
|
Logger-spezifisch ggf. in `~/.profile` ergänzen:
|
||||||
|
```bash
|
||||||
|
cd /var/log/easyname/$(date +%Y)/$(date +%m)/
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
- Weitere Hinweise, Einschränkungen, Besonderheiten
|
||||||
|
- Ggf. bekannte Bugs oder ToDos
|
||||||
@@ -0,0 +1,70 @@
|
|||||||
|
#! /usr/bin/env bash
|
||||||
|
# Domainchecker für schnelle Prüfung der MX-Records
|
||||||
|
# Maintainer: peignerpausz
|
||||||
|
# Version: 1.2
|
||||||
|
|
||||||
|
set -eo pipefail
|
||||||
|
declare -a DOMAINS=()
|
||||||
|
declare -a RECORDS=()
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
cat <<USAGE
|
||||||
|
Verwendung:
|
||||||
|
$0 [OPTIONEN]
|
||||||
|
Oder interaktiv: $0
|
||||||
|
|
||||||
|
Optionen:
|
||||||
|
-d, --domains DOMAIN [DOMAINS...]
|
||||||
|
Zu prüfende Domains
|
||||||
|
-r, --records RECORD [RECORDS...]
|
||||||
|
Zu prüfende DNS-Records, z.B. A MX TXT
|
||||||
|
-h, --help
|
||||||
|
Diese Hilfe anzeigen
|
||||||
|
|
||||||
|
Beispiele:
|
||||||
|
$0 -d domain1.tld domain2.tld -r MX TXT
|
||||||
|
|
||||||
|
$0 --domains domain1.tld domain2.tld --records MX TXT
|
||||||
|
USAGE
|
||||||
|
}
|
||||||
|
|
||||||
|
while [[ $# -gt 0 ]]; do
|
||||||
|
case "$1" in
|
||||||
|
-d | --domains)
|
||||||
|
shift
|
||||||
|
while [[ $# -gt 0 && "$1" != -* ]]; do
|
||||||
|
DOMAINS+=("$1")
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
;;
|
||||||
|
-r | --records)
|
||||||
|
shift
|
||||||
|
while [[ $# -gt 0 && "$1" != -* ]]; do
|
||||||
|
RECORDS+=("$1")
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
;;
|
||||||
|
-h | --help)
|
||||||
|
usage
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
[[ ${#DOMAINS[@]} -eq 0 ]] && read -ra DOMAINS -p "Welche Domains sollen gesucht werden? " DOMAINS
|
||||||
|
[[ ${#RECORDS[@]} -eq 0 ]] && read -ra RECORDS -p "Welcher Records sollen gesucht werden? "
|
||||||
|
|
||||||
|
for domain in "${DOMAINS[@]}"; do
|
||||||
|
printf "\n==== %s ====\n" "$domain"
|
||||||
|
for record in "${RECORDS[@]}"; do
|
||||||
|
printf "++++ %s ++++\n" "$record"
|
||||||
|
|
||||||
|
result=$(dig +short "$record" "$domain")
|
||||||
|
if [[ -n "$result" ]]; then
|
||||||
|
printf "%s" "$result"
|
||||||
|
else
|
||||||
|
printf "Keine Einträge gefunden."
|
||||||
|
fi
|
||||||
|
echo
|
||||||
|
done
|
||||||
|
done
|
||||||
@@ -0,0 +1,80 @@
|
|||||||
|
# histodomain - historische DNS-Abfragen
|
||||||
|
|
||||||
|
Skript zur schnellen Abfrage historischer Domain-Records im json-Format. Zur Abfrage wird ein API-Key von Securitytrails.com benötigt.
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
- Abfrage historischer DNS-Records inklusive TTLs und Prioritäten
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
1. Repository klonen oder Skript kopieren:
|
||||||
|
```bash
|
||||||
|
git clone git.int.loki-net.at/esn-support-bash-snippets.git
|
||||||
|
cd esn-support-bash-snippets/domaintools/histodomain
|
||||||
|
chmod +x histodomain
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Nutzung
|
||||||
|
|
||||||
|
### Standardaufruf
|
||||||
|
```bash
|
||||||
|
./histodomain.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
### Beispiele
|
||||||
|
```bash
|
||||||
|
./<scriptname> --option foo
|
||||||
|
./<scriptname> 2025-09-08
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Optionen
|
||||||
|
|
||||||
|
```
|
||||||
|
Usage: ./<scriptname> [OPTIONS]
|
||||||
|
|
||||||
|
--help Zeigt diese Hilfe
|
||||||
|
--option Beispieloption
|
||||||
|
YYYY-MM-DD Beispiel für Datumsargument
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Beispielausgabe
|
||||||
|
|
||||||
|
Hier ein Beispieloutput des Skripts.
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
histodomain
|
||||||
|
> Welche Domain?
|
||||||
|
> domain.tld
|
||||||
|
> Welcher DNS-Typ?
|
||||||
|
> a
|
||||||
|
> API-Key für Securitytrails angeben:
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Setup-Hinweise
|
||||||
|
|
||||||
|
Falls notwendig, Alias in `~/.bashrc` setzen:
|
||||||
|
```bash
|
||||||
|
alias <scriptname>='~/pfad/zum/repo/domaintools/histodomain/histodomain.sh'
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
- Free-Version von Securitytrails ermöglicht bis zu 50 kostenlose Abpfragen über die API/Monat
|
||||||
|
- To-Do
|
||||||
|
- Non-interaktive Version bauen
|
||||||
Executable
+43
@@ -0,0 +1,43 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Domaintool zum Abfragen von historischen DNS-Einträgen über die Securitytrails-API
|
||||||
|
# Maintainer: peignerpausz
|
||||||
|
# Version: 1
|
||||||
|
set -eou pipefail
|
||||||
|
usage() {
|
||||||
|
cat <<USAGE
|
||||||
|
Verwendung:
|
||||||
|
histodomain
|
||||||
|
> Welche Domain? Domain ohne http oder https!
|
||||||
|
> domain.tld
|
||||||
|
> Welcher DNS-Typ? Eintrag in lower case!
|
||||||
|
> a/aaaa/txt/ns/soa/...
|
||||||
|
|
||||||
|
USAGE
|
||||||
|
}
|
||||||
|
echo "Welche Domain? Achtung: Domain ohne http oder https! "
|
||||||
|
read domain
|
||||||
|
if [[ -z "$domain" ]]; then
|
||||||
|
{
|
||||||
|
echo -e "Fehler: keine Domain angegeben. \n" >&2
|
||||||
|
usage
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
fi
|
||||||
|
echo "Welcher DNS-Typ? Achtung: Eintrag in lower case! "
|
||||||
|
read dnstype
|
||||||
|
if [[ -z "$dnstype" ]]; then
|
||||||
|
{
|
||||||
|
echo -e "Fehler: keinen DNS-Typ angegeben. \n" >&2
|
||||||
|
usage
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
fi
|
||||||
|
# Prüfung ob Securitytrails-API-Key übergeben wurde oder als Umgebungsvariable existiert.
|
||||||
|
if [[ -z "$SECURITYTRAILSAPI" ]]; then
|
||||||
|
read -rsp "API-Key für Securitytrails angeben: " SECURITYTRAILSAPI
|
||||||
|
echo
|
||||||
|
fi
|
||||||
|
# Hier folgt die eigentliche Abfrage über die Securitytrails-API.
|
||||||
|
curl --request GET --url \
|
||||||
|
https://api.securitytrails.com/v1/history/$domain/dns/$dnstype \
|
||||||
|
--include --header "APIKEY: $SECURITYTRAILSAPI" --header 'Accept: application/json'
|
||||||
@@ -0,0 +1,101 @@
|
|||||||
|
# SSLChecker
|
||||||
|
|
||||||
|
Skript zum schnellen Prüfen der Gültigkeit und des Typs von SSL-Certs
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
- Prüft Gültigkeit
|
||||||
|
- Prüft Typ (LE oder was anderes)
|
||||||
|
- Prüft Restgültigkeit des SSL-Certs
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
1. Repository klonen oder Skript kopieren:
|
||||||
|
```bash
|
||||||
|
git clone git.in.loki-net.at/esn-support-bash-snippets.git
|
||||||
|
cd esn-support-bash-snippets/domaintools/sslchecker
|
||||||
|
chmod +x sslchecker.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Abhängigkeiten (falls vorhanden) installieren:
|
||||||
|
- `curl`
|
||||||
|
- `openssl`
|
||||||
|
- beide auf der connect vorinstalliert
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Nutzung
|
||||||
|
|
||||||
|
### Standardaufruf
|
||||||
|
```bash
|
||||||
|
./sslchecker.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
### Beispiele
|
||||||
|
```bash
|
||||||
|
./sslchecker.sh -d domain1.tld domain2.tld domain3.tld -t le
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Optionen
|
||||||
|
|
||||||
|
```
|
||||||
|
Verwendung:
|
||||||
|
bash sslchecker.sh [OPTIONEN]
|
||||||
|
Oder interaktiv: bash sslchecker.sh
|
||||||
|
|
||||||
|
Optionen:
|
||||||
|
-d, --domains DOMAIN [DOMAINS...]
|
||||||
|
Zu prüfende Domains
|
||||||
|
-t, --type Typ
|
||||||
|
Prüft gegen erwarteten Issuer, etwa Let's Encrypt, Sectigo oder GlobalSign
|
||||||
|
-h, --help
|
||||||
|
Diese Hilfe anzeigen
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Beispielausgabe
|
||||||
|
|
||||||
|
```
|
||||||
|
bash sslchecker.sh -d ironsites.at myrealis.at orf.at -t le
|
||||||
|
|
||||||
|
+++SSLCHECKER v0.1+++
|
||||||
|
|
||||||
|
====== ironsites.at =========
|
||||||
|
OK valid SSL
|
||||||
|
OK SSL-Zertifikat gültig bis Nov 1 23:23:54 2026 GMT (46 Tage verbleibend)
|
||||||
|
OK Cert ist von Let's Encrypt
|
||||||
|
|
||||||
|
====== myrealis.at =========
|
||||||
|
OK valid SSL
|
||||||
|
OK SSL-Zertifikat gültig bis Nov 5 07:16:41 2026 GMT (49 Tage verbleibend)
|
||||||
|
OK Cert ist von Let's Encrypt
|
||||||
|
|
||||||
|
====== orf.at =========
|
||||||
|
OK valid SSL
|
||||||
|
OK SSL-Zertifikat gültig bis Jan 3 08:17:00 2027 GMT (108 Tage verbleibend)
|
||||||
|
X Cert ist nicht von Let's Encrypt (gefunden: GlobalSign nv-sa)
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Setup-Hinweise
|
||||||
|
|
||||||
|
Falls notwendig, Alias in `~/.bashrc` setzen:
|
||||||
|
```bash
|
||||||
|
alias sslchecker='~/esn-support-tools/domaintools/sslchecker/sslchecker.sh'
|
||||||
|
```
|
||||||
|
---
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
- To-Do:
|
||||||
|
Timeouts abfangen
|
||||||
|
eventuell Umbau auf `openssl` statt `curl`
|
||||||
|
Optionen ausbauen
|
||||||
@@ -0,0 +1,119 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Tool zum Prüfen von SSL-Gültigkeit mehrer Domains
|
||||||
|
# Maintainer: peignerpausz
|
||||||
|
|
||||||
|
set -o pipefail
|
||||||
|
RED="\033[31m"
|
||||||
|
GREEN="\033[32m"
|
||||||
|
YELLOW="\033[33m"
|
||||||
|
RESET="\033[0m"
|
||||||
|
declare -a DOMAINS
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
cat <<USAGE
|
||||||
|
Verwendung:
|
||||||
|
bash $0 [OPTIONEN]
|
||||||
|
Oder interaktiv: bash $0
|
||||||
|
|
||||||
|
Optionen:
|
||||||
|
-d, --domains DOMAIN [DOMAINS...]
|
||||||
|
Zu prüfende Domains
|
||||||
|
-t, --type
|
||||||
|
Prüft gegen erwarteten Issuer, etwa Let's Encrypt, Sectigo oder GlobalSign
|
||||||
|
-h, --help
|
||||||
|
Diese Hilfe anzeigen
|
||||||
|
|
||||||
|
Beispiele:
|
||||||
|
$0 -d domain1.tld domain2.tld -t le
|
||||||
|
|
||||||
|
$0 --domains domain1.tld domain2.tld --type le
|
||||||
|
USAGE
|
||||||
|
}
|
||||||
|
|
||||||
|
while [[ $# -gt 0 ]]; do
|
||||||
|
case "$1" in
|
||||||
|
-d | --domains)
|
||||||
|
shift
|
||||||
|
while [[ $# -gt 0 && "$1" != -* ]]; do
|
||||||
|
DOMAINS+=("$1")
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
;;
|
||||||
|
|
||||||
|
-t | --type)
|
||||||
|
ISSUER="$2"
|
||||||
|
|
||||||
|
case "$ISSUER" in
|
||||||
|
le)
|
||||||
|
EXPECTED_ISSUER="Let's Encrypt"
|
||||||
|
;;
|
||||||
|
digicert)
|
||||||
|
EXPECTED_ISSUER="DigiCert"
|
||||||
|
;;
|
||||||
|
sectigo)
|
||||||
|
EXPECTED_ISSUER="Sectigo"
|
||||||
|
;;
|
||||||
|
global)
|
||||||
|
EXPECTED_ISSUER="GlobalSign"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Fehler: Ungültiger Typ '$ISSUER'"
|
||||||
|
echo "Erlaubte Werte: le, digicert, sectigo, global"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
|
||||||
|
-h | --help)
|
||||||
|
usage
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
echo "Unbekannte Option: $1"
|
||||||
|
usage
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
printf "+++SSLCHECKER v0.1+++\n"
|
||||||
|
[[ ${#DOMAINS[@]} -eq 0 ]] && read -ra DOMAINS -p "Welche Domains sollen gesucht werden? " DOMAINS
|
||||||
|
for domain in "${DOMAINS[@]}"; do
|
||||||
|
printf "\n========= %s =========\n" "$domain"
|
||||||
|
VALIDITY=$(curl -vI https://$domain 2>&1 | grep -F "SSL certificate verify ok")
|
||||||
|
EXPIRE=$(echo | openssl s_client -connect $domain:443 -servername $domain 2>/dev/null | openssl x509 -noout -enddate | cut -d= -f2)
|
||||||
|
ISSUER=$(echo | openssl s_client -connect "$domain:443" -servername "$domain" 2>/dev/null |
|
||||||
|
openssl x509 -noout -issuer |
|
||||||
|
grep -o 'O *= *[^,]*' |
|
||||||
|
sed 's/O *= *//')
|
||||||
|
expire_ts=$(date -d "$EXPIRE" +%s)
|
||||||
|
now_ts=$(date +%s)
|
||||||
|
days_left=$(((expire_ts - now_ts) / 86400))
|
||||||
|
if [[ -n "$VALIDITY" ]]; then
|
||||||
|
printf "${GREEN}OK${RESET} valid SSL\n"
|
||||||
|
else
|
||||||
|
printf "${RED}X${RESET} not valid SSL\n"
|
||||||
|
fi
|
||||||
|
if [ "$days_left" -lt 0 ]; then
|
||||||
|
printf "${RED}CRITICAL${RESET} Zertifikat ist seit %d Tagen abgelaufen (%s)\n" "$((-days_left))" "$EXPIRE"
|
||||||
|
elif [ "$days_left" -lt 7 ]; then
|
||||||
|
printf "${RED}CRITICAL${RESET} Zertifikat läuft in %d Tagen ab (%s)\n" "$days_left" "$EXPIRE"
|
||||||
|
elif [ "$days_left" -lt 30 ]; then
|
||||||
|
printf "${YELLOW}WARNING${RESET} SSL-Zertifikat läuft in $days_left Tagen ab ($EXPIRE)\n"
|
||||||
|
else
|
||||||
|
printf "${GREEN}OK${RESET} SSL-Zertifikat gültig bis $EXPIRE ($days_left Tage verbleibend)\n"
|
||||||
|
fi
|
||||||
|
if [[ -n $EXPECTED_ISSUER ]]; then
|
||||||
|
if [[ "$ISSUER" == *"$EXPECTED_ISSUER"* ]]; then
|
||||||
|
printf "${GREEN}OK${RESET} Cert ist von %s" "$EXPECTED_ISSUER"
|
||||||
|
else
|
||||||
|
printf "${YELLOW}X${RESET} Cert ist nicht von %s (gefunden: %s)" "$EXPECTED_ISSUER" "$ISSUER"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
printf "${GREEN}INFO${RESET} Cert-Aussteller: %s" "$ISSUER"
|
||||||
|
fi
|
||||||
|
printf "\n"
|
||||||
|
done
|
||||||
@@ -190,6 +190,8 @@ else
|
|||||||
fi
|
fi
|
||||||
[[ -n "${CODES_REGEX// }" ]] || CODES_REGEX="S3150|S775|S7771[0-9]*"
|
[[ -n "${CODES_REGEX// }" ]] || CODES_REGEX="S3150|S775|S7771[0-9]*"
|
||||||
|
|
||||||
|
year="${DATE:0:4}"
|
||||||
|
month="${DATE:5:2}"
|
||||||
LOGFILE="${DATE}.log"
|
LOGFILE="${DATE}.log"
|
||||||
|
|
||||||
# --- Remote-Kommando ---
|
# --- Remote-Kommando ---
|
||||||
@@ -202,7 +204,7 @@ fi
|
|||||||
# --- Analyse (remote) ---
|
# --- Analyse (remote) ---
|
||||||
$REMOTE bash -s <<EOF
|
$REMOTE bash -s <<EOF
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
cd /var/log/easyname/\$(date +%Y/%m)
|
cd /var/log/easyname/$year/$month
|
||||||
|
|
||||||
if [ -f "$LOGFILE" ]; then SRC="cat \"$LOGFILE\""
|
if [ -f "$LOGFILE" ]; then SRC="cat \"$LOGFILE\""
|
||||||
elif [ -f "$LOGFILE.gz" ]; then SRC="zcat \"$LOGFILE.gz\""
|
elif [ -f "$LOGFILE.gz" ]; then SRC="zcat \"$LOGFILE.gz\""
|
||||||
@@ -211,6 +213,7 @@ $REMOTE bash -s <<EOF
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
echo "⚠️ Starte checkms für $DATE"
|
||||||
echo "Analysiere $LOGFILE"
|
echo "Analysiere $LOGFILE"
|
||||||
echo
|
echo
|
||||||
printf "%-8s %-16s %-8s\n" "COUNT" "IP" "CODE"
|
printf "%-8s %-16s %-8s\n" "COUNT" "IP" "CODE"
|
||||||
@@ -234,11 +237,17 @@ $REMOTE bash -s <<EOF
|
|||||||
{
|
{
|
||||||
code="NA"; ip="NA";
|
code="NA"; ip="NA";
|
||||||
for (i=1;i<=NF;i++) {
|
for (i=1;i<=NF;i++) {
|
||||||
if (\$i ~ /\(S[0-9]+\)/) { t=\$i; gsub(/[()]/,"",t); code=t }
|
if (\$i ~ /\(S[0-9]+\)/) { t=\$i; gsub(/[()]/,"",t); sub(/\\.$/,"",t); code=t }
|
||||||
else if (\$i ~ /^S[0-9]+/) { code=\$i }
|
else if (\$i ~ /^S[0-9]+/) { code=\$i; sub(/\\.$/,"",code) }
|
||||||
if (\$i ~ /^\[[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\]$/) {
|
if (\$i ~ /^\[[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/) {
|
||||||
ip=\$i; gsub(/[\[\]]/,"",ip)
|
ip=\$i; gsub(/^\[|\].*$/,"",ip)
|
||||||
}
|
}
|
||||||
|
else if (ip == "NA" && \$i ~ /^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$/) {
|
||||||
|
ip=\$i
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (ip ~ /^77\.244\.243\.(9|10|11|12)$/) {
|
||||||
|
next
|
||||||
}
|
}
|
||||||
print code, ip
|
print code, ip
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,76 @@
|
|||||||
|
# getIps.sh
|
||||||
|
|
||||||
|
A bash script that resolves hostnames to their IPv4 and IPv6 addresses using DNS lookups.
|
||||||
|
|
||||||
|
## Description
|
||||||
|
|
||||||
|
This script reads a list of hostnames from an input file and performs DNS lookups to find their corresponding IPv4 and IPv6 addresses. The results are written to an output file in a tab-separated format.
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./getIps.sh <input_file> <output_file>
|
||||||
|
```
|
||||||
|
|
||||||
|
### Arguments
|
||||||
|
|
||||||
|
- `input_file`: Path to a text file containing hostnames (one per line)
|
||||||
|
- `output_file`: Path where the results will be written
|
||||||
|
|
||||||
|
### Example
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./getIps.sh hosts.txt results.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
## Input Format
|
||||||
|
|
||||||
|
The input file should contain hostnames, one per line:
|
||||||
|
|
||||||
|
```
|
||||||
|
google.com
|
||||||
|
github.com
|
||||||
|
stackoverflow.com
|
||||||
|
```
|
||||||
|
|
||||||
|
## Output Format
|
||||||
|
|
||||||
|
The output file will contain tab-separated values with the following columns:
|
||||||
|
|
||||||
|
```
|
||||||
|
hostname IPv4_address IPv6_address
|
||||||
|
```
|
||||||
|
|
||||||
|
Example output:
|
||||||
|
```
|
||||||
|
google.com 142.250.191.14 2a00:1450:4001:80e::200e
|
||||||
|
github.com 140.82.112.4 N/A
|
||||||
|
stackoverflow.com 151.101.1.69 N/A
|
||||||
|
```
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
- Resolves both IPv4 (A records) and IPv6 (AAAA records) addresses
|
||||||
|
- Handles empty lines in input file gracefully
|
||||||
|
- Shows "N/A" for addresses that cannot be resolved
|
||||||
|
- Clears previous output file before writing new results
|
||||||
|
- Provides usage information if incorrect arguments are provided
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
- `dig` command (part of dnsutils package)
|
||||||
|
- Bash shell
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
Make the script executable:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
chmod +x getIps.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
## Error Handling
|
||||||
|
|
||||||
|
- The script will exit with an error if the wrong number of arguments is provided
|
||||||
|
- Empty lines in the input file are automatically skipped
|
||||||
|
- DNS resolution failures are handled gracefully (shows "N/A")
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Check if required arguments are provided
|
||||||
|
if [ $# -ne 2 ]; then
|
||||||
|
echo "Usage: $0 <input_file> <output_file>"
|
||||||
|
echo "Example: $0 hosts.txt output.txt"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Input and output files from command line arguments
|
||||||
|
INPUT_FILE="$1"
|
||||||
|
OUTPUT_FILE="$2"
|
||||||
|
|
||||||
|
# Clear previous output
|
||||||
|
> "$OUTPUT_FILE"
|
||||||
|
|
||||||
|
# Process each hostname
|
||||||
|
while read -r host; do
|
||||||
|
# Skip empty lines
|
||||||
|
[[ -z "$host" ]] && continue
|
||||||
|
|
||||||
|
ipv4=$(dig +short A "$host" | head -n 1)
|
||||||
|
ipv6=$(dig +short AAAA "$host" | head -n 1)
|
||||||
|
|
||||||
|
echo -e "$host\t${ipv4:-N/A}\t${ipv6:-N/A}" >> "$OUTPUT_FILE"
|
||||||
|
done < "$INPUT_FILE"
|
||||||
|
|
||||||
|
echo "Done. Results written to $OUTPUT_FILE"
|
||||||
+37
-5
@@ -1,24 +1,31 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# go - SSH-Shortcuts für easyname Server
|
# go improved - SSH-Shortcuts für easyname, WH20, adino und inname Server
|
||||||
# Maintainer: ljp
|
# Maintainer: ljp
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
LUSER="${LUSER:?Bitte LUSER setzen!}"
|
LUSER="${LUSER:?Bitte LUSER setzen!}"
|
||||||
|
WHUSER="${WHUSER:?Bitte WHUSER setzen!}"
|
||||||
usage() {
|
usage() {
|
||||||
cat <<USAGE
|
cat <<USAGE
|
||||||
Usage:
|
Usage:
|
||||||
go k|kinit
|
go k|kinit
|
||||||
go w|web <NR> [EUSER] [-- <REMOTE-CMD>...]
|
go w|web <NR> [EUSER] [-- <REMOTE-CMD>...]
|
||||||
go m|mx <NR> [-- <REMOTE-CMD>...]
|
go m|mx <NR> [-- <REMOTE-CMD>...]
|
||||||
go l|logger [-- <REMOTE-CMD>...]
|
go l|log|logger [-- <REMOTE-CMD>...]
|
||||||
go s|support [-- <REMOTE-CMD>...]
|
go s|support [-- <REMOTE-CMD>...]
|
||||||
|
go a|adino
|
||||||
|
go i|inname
|
||||||
|
go o|wh20
|
||||||
Beispiele:
|
Beispiele:
|
||||||
go web 42
|
go web 42
|
||||||
go web 42 e110604
|
go web 42 e110604
|
||||||
go mx 12 -- bash -lc 'hostname; uptime'
|
go mx 12 -- bash -lc 'hostname; uptime'
|
||||||
go logger -- bash -s # für Here-Doc
|
go logger -- bash -s # für Here-Doc
|
||||||
|
Serverliste:
|
||||||
|
Legacy-Server 01..26, 107, 114, 119, 501..532
|
||||||
|
WH20-Server 1..25
|
||||||
|
Adino-Server 212 237 244 251 252 268 272 279 280 285 307 327 353 358 395
|
||||||
|
inname-Server 20..30
|
||||||
USAGE
|
USAGE
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -57,7 +64,7 @@ case "$cmd" in
|
|||||||
exec ssh "$host" "$@"
|
exec ssh "$host" "$@"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
l|logger)
|
l|log|logger)
|
||||||
# go logger [-- REMOTE-CMD...]
|
# go logger [-- REMOTE-CMD...]
|
||||||
host="${LUSER}@logger.in.nessus.at"
|
host="${LUSER}@logger.in.nessus.at"
|
||||||
[[ $# -ge 1 && "$1" == "--" ]] && shift || true
|
[[ $# -ge 1 && "$1" == "--" ]] && shift || true
|
||||||
@@ -71,6 +78,31 @@ case "$cmd" in
|
|||||||
exec ssh "$host" "$@"
|
exec ssh "$host" "$@"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
o|wh20)
|
||||||
|
# go wh20 web NR
|
||||||
|
[[ $# -ge 1 ]] || { echo "Fehler: 'go wh20' benötigt <NR>." >&2; usage; exit 1; }
|
||||||
|
nr="$1"; shift || true
|
||||||
|
host="${WHUSER}@web${nr}.wh20.easyname.systems"
|
||||||
|
exec ssh "$host" "$@"
|
||||||
|
;;
|
||||||
|
|
||||||
|
|
||||||
|
a|adino)
|
||||||
|
# go adino srv NR
|
||||||
|
[[ $# -ge 1 ]] || { echo "Fehler: 'go adino' benötigt <NR>." >&2; usage; exit 1; }
|
||||||
|
nr="$1"; shift || true
|
||||||
|
host="${WHUSER}@srv${nr}.adino.at"
|
||||||
|
exec ssh "$host" "$@"
|
||||||
|
;;
|
||||||
|
|
||||||
|
i|inname)
|
||||||
|
# go adino srv NR
|
||||||
|
[[ $# -ge 1 ]] || { echo "Fehler: 'go inname' benötigt <NR>." >&2; usage; exit 1; }
|
||||||
|
nr="$1"; shift || true
|
||||||
|
host="${WHUSER}@ws${nr}.inname.net"
|
||||||
|
exec ssh "$host" "$@"
|
||||||
|
;;
|
||||||
|
|
||||||
*)
|
*)
|
||||||
usage; exit 1
|
usage; exit 1
|
||||||
;;
|
;;
|
||||||
|
|||||||
@@ -0,0 +1,89 @@
|
|||||||
|
# MYSQL Tool
|
||||||
|
|
||||||
|
Bashskript, das schnellere Datenbank-Downloads, Restore und sogar Backup-Restors vom BackupFTP ermöglicht.
|
||||||
|
---
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
- Datenbanken prüfen
|
||||||
|
- Datenbanken dumpen
|
||||||
|
- Datenbanken droppen
|
||||||
|
- Datenbanken aus SQL-File restoren
|
||||||
|
- Backups vom Backup-FTP direkt in das aktuelle Verzeichnis herunterladen
|
||||||
|
- Datenbanken aus einzelnen Tables und Schmemes mergen
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
1. Als easyuser einloggen
|
||||||
|
2. Skript herunterladen
|
||||||
|
```bash
|
||||||
|
git clone <gitea-url>/esn-support-bash-snippets.git
|
||||||
|
cd esn-support-bash-snippets/<legacy|wh20>/<scriptname>
|
||||||
|
chmod +x <scriptname>
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Skript ausführen
|
||||||
|
```bash
|
||||||
|
./mysqltool.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
4. Skript nach erfolgreicher Bearbeitung im Kundencontainer entfernen
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Nutzung
|
||||||
|
|
||||||
|
### Standardaufruf
|
||||||
|
```bash
|
||||||
|
./mysqltool.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
### Beispiele
|
||||||
|
```bash
|
||||||
|
./mysqltool.sh
|
||||||
|
./<scriptname> --option foo
|
||||||
|
./<scriptname> 2025-09-08
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Optionen
|
||||||
|
|
||||||
|
```
|
||||||
|
Usage: ./<scriptname> [OPTIONS]
|
||||||
|
|
||||||
|
--help Zeigt diese Hilfe
|
||||||
|
--option Beispieloption
|
||||||
|
YYYY-MM-DD Beispiel für Datumsargument
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Beispielausgabe
|
||||||
|
|
||||||
|
```
|
||||||
|
Hier ein Beispieloutput des Skripts.
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Setup-Hinweise
|
||||||
|
|
||||||
|
Falls notwendig, Alias in `~/.bashrc` setzen:
|
||||||
|
```bash
|
||||||
|
alias <scriptname>='~/pfad/zum/repo/<legacy|wh20>/<scriptname>/<scriptname>'
|
||||||
|
```
|
||||||
|
|
||||||
|
Logger-spezifisch ggf. in `~/.profile` ergänzen:
|
||||||
|
```bash
|
||||||
|
cd /var/log/easyname/$(date +%Y)/$(date +%m)/
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
- Derzeit muss das Skript als eUser ausgeführt werden
|
||||||
|
- To-Do: Skript anpassen, sodass es ohne eUser ausgeführt werden kann
|
||||||
@@ -0,0 +1,225 @@
|
|||||||
|
function mysql_tool ()
|
||||||
|
{
|
||||||
|
while :
|
||||||
|
do
|
||||||
|
PS3='Please enter your choice: '
|
||||||
|
echo "Press (1) fuer Datenbank Pruefung."
|
||||||
|
echo "Press (2) fuer Datenbank Dump."
|
||||||
|
echo "Press (3) fuer Datenbank Drop."
|
||||||
|
echo "Press (4) fuer Datenbank Restore."
|
||||||
|
echo "Press (5) fuer Backup download."
|
||||||
|
echo "Press (6) fuer Datenbank zusammen mergen."
|
||||||
|
echo "Press (q) fuer QUIT."
|
||||||
|
read -n1 wahl
|
||||||
|
echo ""
|
||||||
|
if [ "$wahl" == "q" ]
|
||||||
|
then
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
case $wahl in
|
||||||
|
"1")
|
||||||
|
echo "Datenbank Name eingeben:"
|
||||||
|
read db_name
|
||||||
|
echo "Datenbank-Version MySQL 8:[y/n]:"
|
||||||
|
read -n1 db_ver
|
||||||
|
echo ""
|
||||||
|
db_host=localhost
|
||||||
|
read -s -p "Datenbank Passwort:" MYSQL_PWD
|
||||||
|
if [ "$db_ver" == "y" ]
|
||||||
|
then
|
||||||
|
db_host=$(awk '/mysql80.local/ {print $1}' /etc/hosts)
|
||||||
|
fi
|
||||||
|
echo [client] > $HOME/tmp/.my.cnf
|
||||||
|
echo "host=$db_host" >> $HOME/tmp/.my.cnf
|
||||||
|
echo "port=3307" >> $HOME/tmp/.my.cnf
|
||||||
|
echo "user=$db_name" >> $HOME/tmp/.my.cnf
|
||||||
|
echo "password=$MYSQL_PWD" >> $HOME/tmp/.my.cnf
|
||||||
|
echo ""
|
||||||
|
echo "Starte die Pruefung der Datenbank $db_name."
|
||||||
|
mysqlcheck --defaults-extra-file="$HOME/tmp/.my.cnf" -c --all-databases
|
||||||
|
rm $HOME/tmp/.my.cnf
|
||||||
|
;;
|
||||||
|
"2")
|
||||||
|
echo "Datenbank Name eingeben:"
|
||||||
|
read db_name
|
||||||
|
echo "Datenbank-Version MySQL 8:[y/n]:"
|
||||||
|
read -n1 db_ver
|
||||||
|
echo ""
|
||||||
|
db_host=localhost
|
||||||
|
read -s -p "Datenbank Passwort:" MYSQL_PWD
|
||||||
|
if [ "$db_ver" == "y" ]
|
||||||
|
then
|
||||||
|
db_host=$(awk '/mysql80.local/ {print $1}' /etc/hosts)
|
||||||
|
fi
|
||||||
|
echo [client] > $HOME/tmp/.my.cnf
|
||||||
|
echo "host=$db_host" >> $HOME/tmp/.my.cnf
|
||||||
|
echo "port=3307" >> $HOME/tmp/.my.cnf
|
||||||
|
echo "user=$(echo "$db_name"|awk -F/ '{print $NF}'|awk -F_ '{print $1}')" >> $HOME/tmp/.my.cnf
|
||||||
|
echo "password=$MYSQL_PWD" >> $HOME/tmp/.my.cnf
|
||||||
|
echo ""
|
||||||
|
echo "Zielverzeichnis eingeben:"
|
||||||
|
echo "Default = html"
|
||||||
|
read target_folder
|
||||||
|
if [ ! -n "target_folder" ]
|
||||||
|
then
|
||||||
|
target_folder=html
|
||||||
|
fi
|
||||||
|
echo "Starte einen Datenbank Dump fuer Datenbank $db_name nach $target_folder."
|
||||||
|
mysqldump --defaults-extra-file=$HOME/tmp/.my.cnf $db_name | gzip > "$HOME/$target_folder/$db_name$(date +_%M-%H-%d-%m-%Y).sql.gz"
|
||||||
|
rm $HOME/tmp/.my.cnf
|
||||||
|
;;
|
||||||
|
"3")
|
||||||
|
echo "Datenbank Name eingeben:"
|
||||||
|
read db_name
|
||||||
|
echo "Datenbank-Version MySQL 8:[y/n]:"
|
||||||
|
read -n1 db_ver
|
||||||
|
echo ""
|
||||||
|
db_host=localhost
|
||||||
|
read -s -p "Datenbank Passwort:" MYSQL_PWD
|
||||||
|
if [ "$db_ver" == "y" ]
|
||||||
|
then
|
||||||
|
db_host=$(awk '/mysql80.local/ {print $1}' /etc/hosts)
|
||||||
|
fi
|
||||||
|
echo [client] > $HOME/tmp/.my.cnf
|
||||||
|
echo "host=$db_host" >> $HOME/tmp/.my.cnf
|
||||||
|
echo "port=3307" >> $HOME/tmp/.my.cnf
|
||||||
|
echo "user=$db_name" >> $HOME/tmp/.my.cnf
|
||||||
|
echo "password=$MYSQL_PWD" >> $HOME/tmp/.my.cnf
|
||||||
|
echo ""
|
||||||
|
echo "Starte drop fuer Datenbank $db_name."
|
||||||
|
mysql --defaults-extra-file="$HOME/tmp/.my.cnf" -e "SHOW TABLES FROM $db_name"|grep -v "Tables_in_$db_name"|while read a
|
||||||
|
do
|
||||||
|
mysql --defaults-extra-file="$HOME/tmp/.my.cnf" -e "DROP TABLE $db_name"."$a"
|
||||||
|
done
|
||||||
|
rm $HOME/tmp/.my.cnf
|
||||||
|
;;
|
||||||
|
"4")
|
||||||
|
echo "Datenbank Name eingeben:"
|
||||||
|
read db_name
|
||||||
|
echo "Datenbank-Version MySQL 8:[y/n]:"
|
||||||
|
read -n1 db_ver
|
||||||
|
echo ""
|
||||||
|
db_host=localhost
|
||||||
|
read -s -p "Datenbank Passwort:" MYSQL_PWD
|
||||||
|
if [ "$db_ver" == "y" ]
|
||||||
|
then
|
||||||
|
db_host=$(awk '/mysql80.local/ {print $1}' /etc/hosts)
|
||||||
|
fi
|
||||||
|
echo [client] > $HOME/tmp/.my.cnf
|
||||||
|
echo "host=$db_host" >> $HOME/tmp/.my.cnf
|
||||||
|
echo "port=3307" >> $HOME/tmp/.my.cnf
|
||||||
|
echo "user=$(echo "$db_name"|awk -F/ '{print $NF}'|awk -F_ '{print $1}'|awk -F. '{print $1}')" >> $HOME/tmp/.my.cnf
|
||||||
|
echo "password=$MYSQL_PWD" >> $HOME/tmp/.my.cnf
|
||||||
|
echo ""
|
||||||
|
ndb_name=$(echo $db_name|awk -F/ '{print $NF}'|awk -F_ '{print $1}'|awk -F. '{print $1}')
|
||||||
|
echo "Starte Restore fuer Datenbank $ndb_name."
|
||||||
|
datend=$(echo $HOME/$db_name|awk -F. '{print $NF}')
|
||||||
|
if [ "$datend" == "gz" ]
|
||||||
|
then
|
||||||
|
zcat $HOME/$db_name|mysql --defaults-extra-file="$HOME/tmp/.my.cnf" $ndb_name
|
||||||
|
else
|
||||||
|
cat $HOME/$db_name|mysql --defaults-extra-file="$HOME/tmp/.my.cnf" $ndb_name
|
||||||
|
fi
|
||||||
|
rm $HOME/tmp/.my.cnf
|
||||||
|
;;
|
||||||
|
"5")
|
||||||
|
echo -n "Backupserver eingeben:"
|
||||||
|
read backup_serv
|
||||||
|
echo -n "Benutzername eingeben:"
|
||||||
|
read ftp_uname
|
||||||
|
read -s -p "FTP Passwort:" FTP_PWD
|
||||||
|
echo "machine $backup_serv" > $HOME/.netrc
|
||||||
|
echo "login $ftp_uname" >> $HOME/.netrc
|
||||||
|
echo "password $FTP_PWD" >> $HOME/.netrc
|
||||||
|
echo ""
|
||||||
|
wget_verz=""
|
||||||
|
while :
|
||||||
|
do
|
||||||
|
exec wget -O - ftp://"$backup_serv":21/"$wget_verz" 2>/dev/null|grep '^ '|sed 's/<a href="ftp:\/\/'$backup_serv':21//g'|awk -F\" '{print $1}'
|
||||||
|
echo "(Verzeichnis) oder (d) fuer Download listing. (q) fuer Quit."
|
||||||
|
read in_put
|
||||||
|
case $in_put in
|
||||||
|
"q")
|
||||||
|
rm $HOME/.netrc
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
"d")
|
||||||
|
wget_opt="-r"
|
||||||
|
wget -r -l 100 ftp://"$backup_serv":21/"$wget_verz"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
wget_verz=$(echo $in_put|sed 's/^\///g')
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
;;
|
||||||
|
"6")
|
||||||
|
while :
|
||||||
|
do
|
||||||
|
echo -n "Quell Ordner angeben:"
|
||||||
|
read infold
|
||||||
|
if [ -d "$infold" ]
|
||||||
|
then
|
||||||
|
break
|
||||||
|
else
|
||||||
|
echo "Quell Ordner $infold nicht gefunden."
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
while :
|
||||||
|
do
|
||||||
|
echo -n "Quell Datenbank angeben:"
|
||||||
|
read indb
|
||||||
|
testf=$(find $infold -maxdepth 1 -type f -name $indb\*.sql)
|
||||||
|
if [ "$testf" != "" ]
|
||||||
|
then
|
||||||
|
break
|
||||||
|
else
|
||||||
|
echo "Quell Datenbank $infold/$indb nicht gefunden"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
echo -n "Ziel Datenbank angeben:"
|
||||||
|
read targetdb
|
||||||
|
if [ -f "$targetdb" ]
|
||||||
|
then
|
||||||
|
echo "$targetdb ueberschreiben [y/n]:"
|
||||||
|
read userwrite
|
||||||
|
if [ $userwrite == y -o $userwrite == j ]
|
||||||
|
then
|
||||||
|
> "$targetdb"
|
||||||
|
find $infold -maxdepth 1 -type f -name $indb\*schema.sql|grep -v schema-post.sql|while read a
|
||||||
|
do
|
||||||
|
cat "$a" 2>/dev/null >> "$targetdb"
|
||||||
|
echo "$(basename "$a") zu $(basename "$targetdb") erfolgreich hinzugefuegt"
|
||||||
|
done
|
||||||
|
echo "# Schemas der Datenbank $indb zu $targetdb erfolgreich hinzugefuegt"
|
||||||
|
find $infold -maxdepth 1 -type f -name $indb\*00000.sql|grep -v schema-post.sql|while read a
|
||||||
|
do
|
||||||
|
cat "$a" 2>/dev/null >> "$targetdb"
|
||||||
|
echo "$(basename "$a") zu $(basename "$targetdb") erfolgreich hinzugefuegt"
|
||||||
|
done
|
||||||
|
echo "# Tables der Datenbank $indb erfolgreich in Datenbank $targetdb hinzugefuegt."
|
||||||
|
else
|
||||||
|
echo "Benutzer Abbruch"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
find $infold -maxdepth 1 -type f -name $indb\*schema.sql|grep -v schema-post.sql|while read a
|
||||||
|
do
|
||||||
|
cat "$a" 2>/dev/null >> "$targetdb"
|
||||||
|
echo "$(basename "$a") zu $(basename "$targetdb") erfolgreich hinzugefuegt"
|
||||||
|
done
|
||||||
|
echo "# Schemas der Datenbank $indb zu $targetdb erfolgreich hinzugefuegt"
|
||||||
|
find $infold -maxdepth 1 -type f -name $indb\*00000.sql|grep -v schema-post.sql|while read a
|
||||||
|
do
|
||||||
|
cat "$a" 2>/dev/null >> "$targetdb"
|
||||||
|
echo "$(basename "$a") zu $(basename "$targetdb") erfolgreich hinzugefuegt"
|
||||||
|
done
|
||||||
|
echo "# Tables der Datenbank $indb erfolgreich in Datenbank $targetdb hinzugefuegt."
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "invalid option $REPLY"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
# mail.sh – Remote Datei-Downloader für PINC-Mails
|
# mail.sh – Remote Datei-Downloader für E-Mail-Dateien
|
||||||
|
|
||||||
**Wichtig:**
|
**Wichtig:**
|
||||||
Bevor du das Skript verwendest, führe folgende Schritte aus:
|
Bevor du das Skript verwendest, führe folgende Schritte aus:
|
||||||
@@ -19,19 +19,33 @@ Bevor du das Skript verwendest, führe folgende Schritte aus:
|
|||||||
|
|
||||||
## Beschreibung
|
## Beschreibung
|
||||||
|
|
||||||
Dieses Skript lädt Dateien, die einem bestimmten Muster entsprechen, von einem Remote-Server herunter. Es sucht in allen Subdirectories unter `/Apps/easyname/run/pinc*/` nach Dateien, die mit der angegebenen Kundennummer beginnen.
|
Dieses Skript lädt E-Mail-Dateien (.eml), die einem bestimmten Muster entsprechen, von einem Remote-Server herunter. Es bietet ein interaktives Menü zur Auswahl des Projekts (pinc oder php-es-info) und sucht dann in allen Subdirectories unter `/Apps/easyname/run/<projekt>*/` nach Dateien, die mit der angegebenen Kundennummer beginnen.
|
||||||
|
|
||||||
## Nutzung
|
## Nutzung
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
./mail.sh <Kundennummer>
|
./mail.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Das Skript führt Sie interaktiv durch folgende Schritte:
|
||||||
|
|
||||||
|
1. **Kundennummer eingeben:** Das Skript fragt nach der Kundennummer, die nicht leer sein darf.
|
||||||
|
2. **Projekt auswählen:** Wählen Sie zwischen:
|
||||||
|
- `1` für **pinc**
|
||||||
|
- `2` für **php-es-info**
|
||||||
|
|
||||||
**Beispiel:**
|
**Beispiel:**
|
||||||
```bash
|
```bash
|
||||||
./mail.sh 123
|
./mail.sh
|
||||||
|
Bitte geben Sie eine Kundennummer ein:
|
||||||
|
Kundennummer: 123
|
||||||
|
Bitte wählen Sie ein Projekt:
|
||||||
|
1) pinc
|
||||||
|
2) php-es-info
|
||||||
|
Ihre Auswahl (1 oder 2): 1
|
||||||
```
|
```
|
||||||
Das Skript sucht dann nach allen Dateien, die mit `123-` beginnen, und lädt sie in ein lokales Verzeichnis `./123/` herunter.
|
|
||||||
|
Das Skript sucht dann nach allen `.eml`-Dateien, die mit `123` beginnen, und lädt sie in ein lokales Verzeichnis `./123/` herunter.
|
||||||
|
|
||||||
## Voraussetzungen
|
## Voraussetzungen
|
||||||
|
|
||||||
@@ -41,10 +55,11 @@ Das Skript sucht dann nach allen Dateien, die mit `123-` beginnen, und lädt sie
|
|||||||
|
|
||||||
## Ablauf
|
## Ablauf
|
||||||
|
|
||||||
1. Das Skript prüft, ob eine Nummer als Argument übergeben wurde.
|
1. Das Skript fragt interaktiv nach der Kundennummer (darf nicht leer sein).
|
||||||
2. Es verbindet sich per SSH mit dem Server und sucht in allen passenden Subdirectories nach Dateien, die mit `<Kundennummer>-` beginnen.
|
2. Das Skript zeigt ein Menü zur Auswahl des Projekts (pinc oder php-es-info).
|
||||||
3. Gefundene Dateien werden in ein lokales Verzeichnis mit dem Namen der Nummer heruntergeladen (z.B. `./123/`).
|
3. Es verbindet sich per SSH mit dem Server und sucht in allen passenden Subdirectories unter `/Apps/easyname/run/<projekt>*/` nach `.eml`-Dateien, die mit der eingegebenen Kundennummer beginnen.
|
||||||
4. Das lokale Verzeichnis wird automatisch erstellt, falls es noch nicht existiert.
|
4. Gefundene Dateien werden in ein lokales Verzeichnis mit dem Namen der Kundennummer heruntergeladen (z.B. `./123/`).
|
||||||
|
5. Das lokale Verzeichnis wird automatisch erstellt, falls es noch nicht existiert.
|
||||||
|
|
||||||
## Fehlerbehandlung
|
## Fehlerbehandlung
|
||||||
|
|
||||||
|
|||||||
Regular → Executable
+45
-12
@@ -1,26 +1,55 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# Überprüfen, ob ein Parameter übergeben wurde
|
# Kundennummer eingeben
|
||||||
if [ -z "$1" ]; then
|
while true; do
|
||||||
echo "Bitte geben Sie eine Nummer als Argument an. Beispiel: $0 123"
|
echo "Bitte geben Sie eine Kundennummer ein:"
|
||||||
exit 1
|
read -p "Kundennummer: " customerNumber
|
||||||
|
if [ -z "$customerNumber" ]; then
|
||||||
|
echo "Kundennummer darf nicht leer sein."
|
||||||
|
echo ""
|
||||||
|
else
|
||||||
|
break
|
||||||
fi
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
# Definieren Sie die Verbindungsdetails
|
# Server und LUSER definieren
|
||||||
server="appdb02.in.easyname.com"
|
server="appdb02.in.easyname.com"
|
||||||
LUSER="${LUSER:?Bitte LUSER setzen!}" # Setzen Sie hier Ihren Benutzernamen ein, wenn LUSER nicht als Umgebungsvariable gesetzt ist
|
LUSER="${LUSER:?Bitte LUSER setzen!}" # Setzen Sie hier Ihren Benutzernamen ein, wenn LUSER nicht als Umgebungsvariable gesetzt ist
|
||||||
|
|
||||||
|
# Menu zur Auswahl des Remote-Directories
|
||||||
|
while true; do
|
||||||
|
echo "Bitte wählen Sie ein Projekt:"
|
||||||
|
echo "1) pinc"
|
||||||
|
echo "2) php-es-info"
|
||||||
|
read -p "Ihre Auswahl (1 oder 2): " choice
|
||||||
|
|
||||||
|
case $choice in
|
||||||
|
1)
|
||||||
|
remoteDir="pinc"
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
2)
|
||||||
|
remoteDir="php-es-info"
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Ungültige Auswahl. Bitte wählen Sie 1 oder 2."
|
||||||
|
echo ""
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
# Remote-Directory überprüfen und Subdirectories auflisten, unter Verwendung von bash
|
# Remote-Directory überprüfen und Subdirectories auflisten, unter Verwendung von bash
|
||||||
remoteDirectories=$(ssh "$LUSER@$server" "bash -c 'ls -d /Apps/easyname/run/pinc*/*/'")
|
remoteDirectories=$(ssh "$LUSER@$server" "bash -c 'ls -d /Apps/easyname/run/${remoteDir}*/*/'")
|
||||||
|
|
||||||
# Wenn keine Verzeichnisse gefunden wurden, Skript beenden
|
# Wenn keine Verzeichnisse gefunden wurden, Skript beenden
|
||||||
if [ -z "$remoteDirectories" ]; then
|
if [ -z "$remoteDirectories" ]; then
|
||||||
echo "Keine Subdirectories in /Apps/easyname/run/pinc/ gefunden."
|
echo "Keine Subdirectories in /Apps/easyname/run/${remoteDir}/ gefunden."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
localSavePath="$PWD/$1" # Setzt den lokalen Speicherpfad relativ zum aktuellen Verzeichnis
|
localSavePath="$PWD/$customerNumber" # Setzt den lokalen Speicherpfad relativ zum aktuellen Verzeichnis
|
||||||
filePattern="$1-*"
|
filePattern="$customerNumber*.eml"
|
||||||
|
|
||||||
# Schleife über die gefundenen Verzeichnisse und in jedem Verzeichnis nach Dateien suchen
|
# Schleife über die gefundenen Verzeichnisse und in jedem Verzeichnis nach Dateien suchen
|
||||||
fileList=""
|
fileList=""
|
||||||
@@ -52,14 +81,18 @@ if [ ! -d "$localSavePath" ]; then
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Herunterladen der Dateien vom Remote-Server
|
# Herunterladen der Dateien vom Remote-Server (mit Nummernpräfix gegen Überschreiben gleicher Namen aus verschiedenen Unterordnern)
|
||||||
|
counter=1
|
||||||
for file in $fileList; do
|
for file in $fileList; do
|
||||||
scp "$LUSER@$server:$file" "$localSavePath/"
|
basename=$(basename "$file")
|
||||||
|
localFile="${localSavePath}/${counter}_${basename}"
|
||||||
|
scp "$LUSER@$server:$file" "$localFile"
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
echo "Fehler beim Herunterladen der Datei $file."
|
echo "Fehler beim Herunterladen der Datei $file."
|
||||||
else
|
else
|
||||||
echo "Datei $file erfolgreich heruntergeladen."
|
echo "Datei $file erfolgreich heruntergeladen als ${counter}_${basename}."
|
||||||
fi
|
fi
|
||||||
|
((counter++))
|
||||||
done
|
done
|
||||||
|
|
||||||
echo "Alle Dateien wurden im Verzeichnis $localSavePath gespeichert."
|
echo "Alle Dateien wurden im Verzeichnis $localSavePath gespeichert."
|
||||||
@@ -0,0 +1,99 @@
|
|||||||
|
# wpchecker
|
||||||
|
|
||||||
|
Tool zum Schnellen prüfen mehrerer WordPress-Installationen
|
||||||
|
---
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
- Prüfen der Coreversion
|
||||||
|
- Prüfen der Core Checksums
|
||||||
|
- Prüfen der Plugin Checksums
|
||||||
|
- Prüfen der Adminnutzer
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
1. Repository klonen oder Skript kopieren:
|
||||||
|
```bash
|
||||||
|
git clone git.int.loki-net.at/esn-support-bash-snippets.git
|
||||||
|
cd esn-support-bash-snippets/legacy/wpchecker
|
||||||
|
chmod +x wpchecker.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Abhängigkeiten (falls vorhanden) installieren:
|
||||||
|
- [`wp-cli`](https://group-one.atlassian.net/wiki/spaces/EASYNAME/pages/33673314407/WP-CLI-Mastery)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Nutzung
|
||||||
|
|
||||||
|
Skript kann im Prinzip von überall aus dem Usercontainer abgesetzt werden, da es über die $HOME-Variable direkt das html-Verzeichnis prüft.
|
||||||
|
|
||||||
|
### Standardaufruf
|
||||||
|
```bash
|
||||||
|
./wpchecker.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
### Beispiele
|
||||||
|
```bash
|
||||||
|
./wpchecker.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Optionen
|
||||||
|
|
||||||
|
```
|
||||||
|
Usage: ./<scriptname> [OPTIONS]
|
||||||
|
|
||||||
|
--help Zeigt diese Hilfe
|
||||||
|
--option Beispieloption
|
||||||
|
YYYY-MM-DD Beispiel für Datumsargument
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Beispielausgabe
|
||||||
|
|
||||||
|
```bash
|
||||||
|
bash wpchecker
|
||||||
|
WPChecker wird gestartet...
|
||||||
|
|
||||||
|
Führe zu prüfenden Usernamen an: yun
|
||||||
|
yun
|
||||||
|
Führe Stammverzeichnis der zu prüfenden WordPress-Installationen an: html
|
||||||
|
html
|
||||||
|
Beginne Prüfung der WordPress-Installationen
|
||||||
|
++++++++++++++++++++
|
||||||
|
|
||||||
|
Prüfe html/pbtest/classicp
|
||||||
|
+++++++++++++++++
|
||||||
|
6.2.9
|
||||||
|
X Coresum-Fehler!
|
||||||
|
OK Kein eindeutiger Hinweis auf wp2shell!
|
||||||
|
OK Plugins okay!
|
||||||
|
|
||||||
|
Prüfe html/apps/wordpress-134151
|
||||||
|
+++++++++++++++++
|
||||||
|
7.1
|
||||||
|
OK Kein eindeutiger Hinweis auf wp2shell!
|
||||||
|
OK Plugins okay!
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Setup-Hinweise
|
||||||
|
|
||||||
|
Falls notwendig, Alias in `~/.bashrc` des Kunden setzen:
|
||||||
|
```bash
|
||||||
|
alias wpchecker='~/bin/wpchecker.sh'
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
- WP-CLI muss unter /data/web/eUser/bin abgelegt und ausführbar sein
|
||||||
|
- ToDos
|
||||||
|
- non-interaktive Version bauen
|
||||||
@@ -0,0 +1,66 @@
|
|||||||
|
#! /usr/bin/env bash
|
||||||
|
# Tool zum Schnellen prüfen mehrerer WordPress-Installationen
|
||||||
|
# Maintainer: peignerpausz
|
||||||
|
set -ou pipefail
|
||||||
|
|
||||||
|
RED="\033[31m"
|
||||||
|
GREEN="\033[32m"
|
||||||
|
YELLOW="\033[33m"
|
||||||
|
RESET="\033[0m"
|
||||||
|
declare -a wpuser
|
||||||
|
declare wppath
|
||||||
|
declare uploads
|
||||||
|
|
||||||
|
printf "WPChecker wird gestartet...\n\n"
|
||||||
|
printf "Führe zu prüfenden Usernamen an: "
|
||||||
|
read -a wpuser
|
||||||
|
echo "${wpuser[@]}"
|
||||||
|
printf "Führe Stammverzeichnis der zu prüfenden WordPress-Installationen an: "
|
||||||
|
read wppath
|
||||||
|
echo "$wppath"
|
||||||
|
printf "Beginne Prüfung der WordPress-Installationen\n++++++++++++++++++++\n"
|
||||||
|
for wordpress in $(find $wppath -type f -name "wp-config.php" -exec dirname {} \;); do
|
||||||
|
[[ -d "$wordpress" ]] || continue
|
||||||
|
# Setzt Prüfung nur für alle Verzeichnisse mit einer vorhandenen wp-config.php fort.
|
||||||
|
# Wenn viele Verzeichnisse geprüft werden ist für die Übersichtlichkeit die Unterdrückung von Fehlern mittels 2>/dev/null empfehlenswert.
|
||||||
|
printf "\nPrüfe $wordpress\n+++++++++++++++++\n"
|
||||||
|
corev=$(php ~/bin/wp-cli.phar core version --path="$wordpress")
|
||||||
|
printf "${YELLOW}%s${RESET}\n" "$corev"
|
||||||
|
coresum=$(php ~/bin/wp-cli.phar core verify-checksums --path="$wordpress" 2>/dev/null)
|
||||||
|
if [[ $? > 0 ]]; then
|
||||||
|
printf "${RED}X${RESET} Coresum-Fehler!\n"
|
||||||
|
else
|
||||||
|
printf="${GREEN}OK${RESET} Coresum okay!\n"
|
||||||
|
fi
|
||||||
|
userlist=$(php ~/bin/wp-cli.phar user list --role=administrator --path="$wordpress")
|
||||||
|
for a in "${wpuser[@]}"; do
|
||||||
|
if printf "%s" "$userlist" | grep -Fq -- $a; then
|
||||||
|
printf "${RED}X${RESET} Hinweis auf wp2hsell gefunden! Username: %s\n Rate zur Prüfung von wp-content/uploads auf .htaccess und php-Files.\n" "$a"
|
||||||
|
else
|
||||||
|
printf "${GREEN}OK${RESET} Kein eindeutiger Hinweis auf wp2shell!\n"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
plugincheck=$(php ~/bin/wp-cli.phar plugin verify-checksums --all --path="$wordpress" 2>/dev/null)
|
||||||
|
if [[ $? > 0 ]]; then
|
||||||
|
printf "${RED}X${RESET} Plugins prüfen!\n Rate zur Prüfung von wp-content/uploads auf .htaccess- und .php-Files\n"
|
||||||
|
else
|
||||||
|
printf "${GREEN}OK${RESET} Plugins okay!\n"
|
||||||
|
fi
|
||||||
|
for uploads in $(find $wppath -type d -wholename "wp-content/uploads" -exec dirname {} \;); do
|
||||||
|
[[ -d "$uploads" ]] || continue
|
||||||
|
printf "Prüfe Upload-Folder auf verdächtige .htaccess-Files\n"
|
||||||
|
htaccesschecker=$(find "$uploads" -type f -name ".htaccess")
|
||||||
|
if printf "%s" "$htaccesschecker" | grep "*.php"; then
|
||||||
|
printf "${RED}X${RESET} .htaccess im Uploadfolder gefunden: %s\n" "$htaccesschecker"
|
||||||
|
else
|
||||||
|
printf"${GREEN}OK${RESET} keine .htaccess im Uploadfolder gefunden!\n"
|
||||||
|
fi
|
||||||
|
printf "Prüfe Upload-Folder auf verdächtige php-Files\n"
|
||||||
|
phpchecker=$(find "$uploads" -type f -name "*.php" | wc -l)
|
||||||
|
if [[ "$phpchecker" > 0 ]]; then
|
||||||
|
printf "${RED}X${RESET} PHP-Files im Uploadfolder gefunden: %s\n" "$phpchecker"
|
||||||
|
else
|
||||||
|
printf "${GREEN}OK${RESET} keine PHP-Files im Uploadfolder gefunden!\n"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
done
|
||||||
+15
-1
@@ -20,9 +20,23 @@ Die Dokumentationen werden in Unterordnern zu den jeweiligen Skripten gepflegt.
|
|||||||
|
|
||||||
### [`plesk`](./plesk)
|
### [`plesk`](./plesk)
|
||||||
Dieses Skript stellt eine SSH-Verbindung zu einem angegebenen Webserver her und generiert so einen einmaligen Login-Link für das Plesk Admin Panel des gewünschten Servers.
|
Dieses Skript stellt eine SSH-Verbindung zu einem angegebenen Webserver her und generiert so einen einmaligen Login-Link für das Plesk Admin Panel des gewünschten Servers.
|
||||||
|
|
||||||
- [Dokumentation & Beispiele](./plesk/README.md)
|
- [Dokumentation & Beispiele](./plesk/README.md)
|
||||||
|
|
||||||
|
### [`wh20`](./wh20)
|
||||||
|
Dieses Skript verbindet zum angegbenen Webserver via SSH
|
||||||
|
- [Dokumentation & Beispiele](./wh20/README.md)
|
||||||
|
|
||||||
|
### [`spamcheck`](./spamcheck)
|
||||||
|
Dieses Skript ermöglicht den schnellen Check nach MS365-Fehlercodes, sowie für Spamhaus-Blockmeldungen.
|
||||||
|
- [Dokumentation & Beispiele](./spamcheck/README.md)
|
||||||
|
|
||||||
|
### [`adspam`](./adspam)
|
||||||
|
Dieses Skript ermöglicht den schnellen Check nach MS365-Fehlercodes, sowie für Spamhaus-Blockmeldungen auf Adino-Server direkt von der Connect aus.
|
||||||
|
- [Dokumentation & Beispiele](./adspam/README.md)
|
||||||
|
|
||||||
|
### [`donaspam`](./donaspam)
|
||||||
|
Dieses Skript ermöglicht den schnellen Check nach MS365-Fehlercodes, sowie für Spamhaus-Blockmeldungen auf DONA-Server direkt von der Connect aus.
|
||||||
|
- [Dokumentation & Beispiele](./donaspam/README.md)
|
||||||
|
|
||||||
## Lizenz / Sichtbarkeit
|
## Lizenz / Sichtbarkeit
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,64 @@
|
|||||||
|
# adspam - schneller Spamcheck für MS365 und Spamhaus auf Adino-Server
|
||||||
|
|
||||||
|
## Funktion
|
||||||
|
|
||||||
|
Dieses Skript führt am jeweiligen adino-Host ein grep für geläufige MS365-Fehlercodes sowie Spamhaus auf /var/log/maillog durch und gibt die Anzahl der Treffer für dieses an.
|
||||||
|
Sofern keine Ergebnisse für den jeweiligen Tag gefunden werden, werden nur die Beginn- und Endzeile des Checks ausgegeben.
|
||||||
|
|
||||||
|
## Voraussetzungen
|
||||||
|
|
||||||
|
- SSH-Zugriff auf den Zielserver
|
||||||
|
- Das [`spamcheck`](../spamcheck/spamcheck.sh)-Skript muss auf den Zielservern installiert und ausführbar sein.
|
||||||
|
- Das [`adspam`](./adspam.sh)-Skript ist korrekt auf der connect installiert und ausführbar.
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd
|
||||||
|
mkdir bin && cd bin
|
||||||
|
vi adspam
|
||||||
|
chmod +x adspam
|
||||||
|
```
|
||||||
|
|
||||||
|
## Verwendung
|
||||||
|
|
||||||
|
```bash
|
||||||
|
USER@connect-lej ~ $ adspam
|
||||||
|
```
|
||||||
|
|
||||||
|
## Syntax
|
||||||
|
|
||||||
|
```bash
|
||||||
|
adspam
|
||||||
|
```
|
||||||
|
|
||||||
|
## Beispiele
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Von der Connect aus abgesetzt.
|
||||||
|
USER@connect-lej ~ $ adspam
|
||||||
|
=== Todays Spamcheck on Wed Apr 15 13:13:22 CEST 2026 ===
|
||||||
|
|
||||||
|
=== srv244.adino.at Spamcheck ===
|
||||||
|
✅ All systems green.
|
||||||
|
=== srv251.adino.at Spamcheck ===
|
||||||
|
✅ All systems green.
|
||||||
|
=== srv252.adino.at Spamcheck ===
|
||||||
|
✅ All systems green.
|
||||||
|
=== srv268.adino.at Spamcheck ===
|
||||||
|
✅ All systems green.
|
||||||
|
=== srv272.adino.at Spamcheck ===
|
||||||
|
✅ All systems green.
|
||||||
|
```
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
# zu hohe Anzahl an S3150
|
||||||
|
Am jeweiligen adino-Webserver prüfen durch gezieltes grep nach `S3150`, ob es sich hierbei um einen anderen String handelt, da Plesk leider auch den String verwendet. -->
|
||||||
|
```bash
|
||||||
|
sudo grep -F 'S3150' /var/log/maillog
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*Maintainer: peignerpausz*
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
#! /usr/bin/env bash
|
||||||
|
# Automatisierter Spamcheck für MS365 error-codes und Spamhaus rejections auf Adino-Server
|
||||||
|
# Maintainer: peignerpausz
|
||||||
|
|
||||||
|
printf '⚠️ Initiating Spamcheck for adino-servers! ⚠️ \n \n'
|
||||||
|
for a in 244 251 252 268 272
|
||||||
|
do ssh srv$a.adino.at -- bash -lc '~/bin/spamcheck'
|
||||||
|
done
|
||||||
|
echo
|
||||||
@@ -0,0 +1,144 @@
|
|||||||
|
# damagereport - 📬 your daily dose of mail-damage
|
||||||
|
|
||||||
|
Kurzbeschreibung des Skripts:
|
||||||
|

|
||||||
|
Am besten in die .bashrc packen, damit es bei jedem Systemstart einem Schlecht wird. 🥴
|
||||||
|
---
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
- Kombinierte Abfrage von checkms, adspam und donaspam
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
1. Repository klonen oder Skript kopieren:
|
||||||
|
```bash
|
||||||
|
git clone <gitea-url>/esn-support-bash-snippets.git
|
||||||
|
cd esn-support-bash-snippets/wh20/damagereport.sh
|
||||||
|
chmod +x damagereport.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Abhängigkeiten installieren:
|
||||||
|
- [`checkms`](../../legacy/checkms/checkms.sh)
|
||||||
|
- [`adspam`](../adspam/adspam.sh)
|
||||||
|
- [`donaspam`](../donaspam/donaspam.sh)
|
||||||
|
- [`spamcheck`](../spamcheck/spamcheck.sh) --> muss auf jedem zu prüfenden Server unter `~/bin/spamcheck` hinterlegt sein. Siehe [Serverliste](./serverliste.md)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Nutzung
|
||||||
|
|
||||||
|
### Standardaufruf
|
||||||
|
```bash
|
||||||
|
./damagereport.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
### Beispiele
|
||||||
|
```bash
|
||||||
|
./damagereport.sh
|
||||||
|
./damagereport.sh 2025-09-08 # Variable Logabfrage muss erst in adspam, donaspam und spamcheck implementiert werden
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Optionen
|
||||||
|
|
||||||
|
```bash
|
||||||
|
Usage: ./damagereport.sh [OPTIONS]
|
||||||
|
|
||||||
|
--help Zeigt diese Hilfe
|
||||||
|
--option Beispieloption
|
||||||
|
YYYY-MM-DD Beispiel für Datumsargument
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Beispielausgabe
|
||||||
|
|
||||||
|
```bash
|
||||||
|
eign01@connect-lej ~ $ damagereport
|
||||||
|
Bridge, give me Fri Apr 17 12:49:51 CEST 2026 damagereport!
|
||||||
|
🚨 Initiating damagereport for mailservices!
|
||||||
|
|
||||||
|
Starte checkms fuer 2026-04-17
|
||||||
|
Analysiere 2026-04-17.log
|
||||||
|
|
||||||
|
COUNT IP CODE
|
||||||
|
----- ---------------- ------
|
||||||
|
|
||||||
|
⚠️ Initiating Spamcheck for adino-servrs ⚠️
|
||||||
|
🚀 srv212.adino.at Spamcheck 🛠️
|
||||||
|
✅ All systems green.
|
||||||
|
🚀 srv237.adino.at Spamcheck 🛠️
|
||||||
|
✅ All systems green.
|
||||||
|
🚀 srv244.adino.at Spamcheck 🛠️
|
||||||
|
✅ All systems green.
|
||||||
|
🚀 srv251.adino.at Spamcheck 🛠️
|
||||||
|
❌ Anzahl S7772: 6
|
||||||
|
🚀 srv252.adino.at Spamcheck 🛠️
|
||||||
|
✅ All systems green.
|
||||||
|
🚀 srv268.adino.at Spamcheck 🛠️
|
||||||
|
❌ Anzahl S7772: 6
|
||||||
|
🚀 srv272.adino.at Spamcheck 🛠️
|
||||||
|
✅ All systems green.
|
||||||
|
🚀 srv279.adino.at Spamcheck 🛠️
|
||||||
|
✅ All systems green.
|
||||||
|
🚀 srv280.adino.at Spamcheck 🛠️
|
||||||
|
✅ All systems green.
|
||||||
|
🚀 srv285.adino.at Spamcheck 🛠️
|
||||||
|
✅ All systems green.
|
||||||
|
🚀 srv307.adino.at Spamcheck 🛠️
|
||||||
|
✅ All systems green.
|
||||||
|
🚀 srv327.adino.at Spamcheck 🛠️
|
||||||
|
✅ All systems green.
|
||||||
|
🚀 srv353.adino.at Spamcheck 🛠️
|
||||||
|
✅ All systems green.
|
||||||
|
🚀 srv358.adino.at Spamcheck 🛠️
|
||||||
|
✅ All systems green.
|
||||||
|
🚀 srv395.adino.at Spamcheck 🛠️
|
||||||
|
✅ All systems green.
|
||||||
|
⚠️ Initiating spamcheck on inname-servers
|
||||||
|
|
||||||
|
=== ws20.inname.net Spamcheck ===
|
||||||
|
✅ All systems green.
|
||||||
|
=== ws21.inname.net Spamcheck ===
|
||||||
|
✅ All systems green.
|
||||||
|
=== ws22.inname.net Spamcheck ===
|
||||||
|
✅ All systems green.
|
||||||
|
=== ws23.inname.net Spamcheck ===
|
||||||
|
✅ All systems green.
|
||||||
|
=== ws24.inname.net Spamcheck ===
|
||||||
|
✅ All systems green.
|
||||||
|
=== ws25.inname.net Spamcheck ===
|
||||||
|
✅ All systems green.
|
||||||
|
=== ws26.inname.net Spamcheck ===
|
||||||
|
✅ All systems green.
|
||||||
|
=== ws27.inname.net Spamcheck ===
|
||||||
|
❌ Anzahl S3150: 5
|
||||||
|
=== ws28.inname.net Spamcheck ===
|
||||||
|
✅ All systems green.
|
||||||
|
=== ws29.inname.net Spamcheck ===
|
||||||
|
✅ All systems green.
|
||||||
|
=== ws30.inname.net Spamcheck ===
|
||||||
|
✅ All systems green.
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Setup-Hinweise
|
||||||
|
|
||||||
|
Falls notwendig, Alias in `~/.bashrc` setzen:
|
||||||
|
```bash
|
||||||
|
alias damagereport='~/pfad/zum/repo/wh20/damagereport/damagereport.sh'
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
- Derzeit kombiniert dieses Skript wirklich nur die Standardausgaben von checkms, adspam und donaspam in einen zusammenhängenden Bericht.
|
||||||
|
- ToDos
|
||||||
|
- `spamcheck` - und damit `adspam` und `donaspam` - auch auf andere Logs als `/var/log/maillog` zugreifen lassen
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
#! /usr/bin/env bash
|
||||||
|
# Damagereport - kombinierte Ausgabe von checkms, adspam und donaspam
|
||||||
|
# Maintainer: peignerpausz
|
||||||
|
|
||||||
|
# --- Funktionen ---
|
||||||
|
usage() {
|
||||||
|
cat <<USAGE
|
||||||
|
Usage: $0 [OPTIONS] [YYYY-MM-DD]
|
||||||
|
|
||||||
|
kombinierte Ausgabe von checkms, adspam und donaspam
|
||||||
|
|
||||||
|
Konfig-Optionen:
|
||||||
|
--help Diese Hilfe
|
||||||
|
USAGE
|
||||||
|
}
|
||||||
|
# --- Argumente parsen ---
|
||||||
|
while [[ $# -gt 0 ]]; do
|
||||||
|
case "$1" in
|
||||||
|
--help) usage; exit 0 ;;
|
||||||
|
*) echo "Unbekannte Option: $1" >&2; usage; exit 1 ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
printf "Bridge, give me %s damagereport! \n \n" "$(date)"
|
||||||
|
printf "⚠️ Initiating damagereport for our mailservers! \n"
|
||||||
|
bash ~/bin/checkms && ~/bin/adspam && ~/bin/donaspam
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
# Serverliste
|
||||||
|
|
||||||
|
# Legacy-Server
|
||||||
|

|
||||||
|
|
||||||
|
- web01.in.easyname.com..web26.in.easyname.com
|
||||||
|
- web107
|
||||||
|
- web114
|
||||||
|
- web119
|
||||||
|
- web501.in.easyname.com..web532.in.easyname.com
|
||||||
|
|
||||||
|
# WH20-Server
|
||||||
|

|
||||||
|
|
||||||
|
- web1.wh20.easyname.systems .. web25.wh20.easyname.systems
|
||||||
|
|
||||||
|
## inname
|
||||||
|

|
||||||
|
- ws20.inname.net
|
||||||
|
- ws21.inname.net
|
||||||
|
- ws22.inname.net
|
||||||
|
- ws23.inname.net
|
||||||
|
- ws24.inname.net
|
||||||
|
- ws25.inname.net
|
||||||
|
- ws26.inname.net
|
||||||
|
- ws27.inname.net
|
||||||
|
- ws28.inname.net
|
||||||
|
- ws29.inname.net
|
||||||
|
- ws30.inname.net
|
||||||
|
|
||||||
|
## adino
|
||||||
|

|
||||||
|
- srv212.adino.at
|
||||||
|
- srv237.adino.at
|
||||||
|
- srv244.adino.at
|
||||||
|
- srv251.adino.at
|
||||||
|
- srv252.adino.at
|
||||||
|
- srv268.adino.at
|
||||||
|
- srv272.adino.at
|
||||||
|
- srv279.adino.at
|
||||||
|
- srv280.adino.at
|
||||||
|
- srv285.adino.at
|
||||||
|
- srv307.adino.at
|
||||||
|
- srv327.adino.at
|
||||||
|
- srv353.adino.at
|
||||||
|
- srv358.adino.at
|
||||||
|
- srv395.adino.at
|
||||||
@@ -0,0 +1,76 @@
|
|||||||
|
# adspam - schneller Spamcheck für MS365 und Spamhaus auf inname-Server
|
||||||
|
|
||||||
|
## Funktion
|
||||||
|
|
||||||
|
Dieses Skript führt am jeweiligen inname-Host ein grep für geläufige MS365-Fehlercodes sowie Spamhaus auf /var/log/maillog durch und gibt die Anzahl der Treffer für dieses an.
|
||||||
|
Sofern keine Ergebnisse für den jeweiligen Tag gefunden werden, werden nur die Beginn- und Endzeile des Checks ausgegeben.
|
||||||
|
|
||||||
|
## Voraussetzungen
|
||||||
|
|
||||||
|
- SSH-Zugriff auf den Zielserver
|
||||||
|
- Das [`spamcheck`](../spamcheck/spamcheck.sh)-Skript muss auf den Zielservern installiert und ausführbar sein.
|
||||||
|
- Das [`donaspam`](./donaspam.sh)-Skript ist korrekt auf der connect installiert und ausführbar.
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd
|
||||||
|
mkdir bin && cd bin ## nur wenn der Folder nicht bereits vorhanden ist
|
||||||
|
vi donaspam
|
||||||
|
chmod +x donaspam
|
||||||
|
```
|
||||||
|
|
||||||
|
## Verwendung
|
||||||
|
|
||||||
|
```bash
|
||||||
|
USER1@connect-lej ~ $ donaspam
|
||||||
|
```
|
||||||
|
|
||||||
|
## Syntax
|
||||||
|
|
||||||
|
```bash
|
||||||
|
donaspam
|
||||||
|
```
|
||||||
|
|
||||||
|
## Beispiele
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Von der Connect aus abgesetzt.
|
||||||
|
USER@connect-lej ~ $ donaspam
|
||||||
|
=== Todays Spamcheck on Wed Apr 15 13:23:04 CEST 2026 ===
|
||||||
|
|
||||||
|
=== ws20.inname.net Spamcheck ===
|
||||||
|
✅ All systems green.
|
||||||
|
=== ws21.inname.net Spamcheck ===
|
||||||
|
✅ All systems green.
|
||||||
|
=== ws22.inname.net Spamcheck ===
|
||||||
|
✅ All systems green.
|
||||||
|
=== ws23.inname.net Spamcheck ===
|
||||||
|
✅ All systems green.
|
||||||
|
=== ws24.inname.net Spamcheck ===
|
||||||
|
✅ All systems green.
|
||||||
|
=== ws25.inname.net Spamcheck ===
|
||||||
|
✅ All systems green.
|
||||||
|
=== ws26.inname.net Spamcheck ===
|
||||||
|
❌ Anzahl S3150: 24
|
||||||
|
=== ws27.inname.net Spamcheck ===
|
||||||
|
✅ All systems green.
|
||||||
|
=== ws28.inname.net Spamcheck ===
|
||||||
|
❌ Anzahl S775: 5
|
||||||
|
=== ws29.inname.net Spamcheck ===
|
||||||
|
✅ All systems green.
|
||||||
|
=== ws30.inname.net Spamcheck ===
|
||||||
|
✅ All systems green.
|
||||||
|
```
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
# zu hohe Anzahl an S3150
|
||||||
|
Am jeweiligen inname-Webserver prüfen durch gezieltes grep nach `S3150`, ob es sich hierbei um einen anderen String handelt, da Plesk leider auch den String verwendet. -->
|
||||||
|
```bash
|
||||||
|
sudo grep -F 'S3150' /var/log/maillog
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*Maintainer: peignerpausz*
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
#! /usr/bin/env bash
|
||||||
|
# Automatisierter Spamcheck für MS365 error-codes und Spamhaus rejections auf inname-Server
|
||||||
|
# Maintainer: peignerpausz
|
||||||
|
|
||||||
|
printf '⚠️ Initiating Spamcheck for inname-servers! ⚠️ \n \n'
|
||||||
|
for a in {20..30}
|
||||||
|
do ssh ws$a.inname.net -- bash -lc '~/bin/spamcheck'
|
||||||
|
done
|
||||||
@@ -0,0 +1,52 @@
|
|||||||
|
# spamcheck - schneller Spamcheck für MS365 und Spamhaus
|
||||||
|
|
||||||
|
## Funktion
|
||||||
|
|
||||||
|
Dieses Skript führt am jeweiligen Plesk-Host ein grep für geläufige MS365-Fehlercodes sowie Spamhaus auf /var/log/maillog durch und gibt die Anzahl der Treffer für dieses an.
|
||||||
|
|
||||||
|
## Voraussetzungen
|
||||||
|
|
||||||
|
- SSH-Zugriff auf den Zielserver
|
||||||
|
- Das Skript muss am Zielserver unter `$HOME/bin` oder `$HOME/spamcheck.sh` abgelegt werden.
|
||||||
|
- Das Skript muss ausführbar sein (`chmod +x spamcheck` oder `chmod +x spamcheck.sh`)
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
tba.
|
||||||
|
|
||||||
|
## Verwendung
|
||||||
|
|
||||||
|
```bash
|
||||||
|
spamcheck
|
||||||
|
```
|
||||||
|
|
||||||
|
## Syntax
|
||||||
|
|
||||||
|
```bash
|
||||||
|
spamcheck
|
||||||
|
```
|
||||||
|
|
||||||
|
## Beispiele
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# random Plesk-Server
|
||||||
|
eign01_easyname.at@ws25 ~ $ spamcheck
|
||||||
|
=== ws25.inname.net Spamcheck ===
|
||||||
|
✅ All systems green.
|
||||||
|
|
||||||
|
eign01_easyname.at@ws26 ~ $ spamcheck
|
||||||
|
=== ws26.inname.net Spamcheck ===
|
||||||
|
❌ Anzahl S3150: 24
|
||||||
|
```
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
# zu hohe Anzahl an S3150
|
||||||
|
Prüfen durch gezieltes grep nach `S3150`, ob es sich hierbei um einen anderen String handelt. -->
|
||||||
|
```bash
|
||||||
|
sudo grep -F 'S3150' /var/log/maillog
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*Maintainer: peignerpausz*
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
#! /usr/bin/env bash
|
||||||
|
# Spamcheck für MS365 error-codes und Spamhaus rejections
|
||||||
|
# Maintainer: peignerpausz
|
||||||
|
|
||||||
|
printf '🚀 %s Spamcheck 🛠️ \n' "$(hostname)"
|
||||||
|
found_errors=0
|
||||||
|
for a in S3150 S775 S7771 S7772 S7773 S7774 S7775 S7776 S7777 S7778 S7779 Spamhaus
|
||||||
|
do
|
||||||
|
count=$(sudo grep -c "\($a\)" /var/log/maillog 2>/dev/null)
|
||||||
|
count=${count//$'\r'/}
|
||||||
|
count=${count//[^0-9]/}
|
||||||
|
count=${count:-0}
|
||||||
|
if [ "$count" -gt 0 ]; then
|
||||||
|
printf "❌ Anzahl %s: %s\n" "$a" "$count"
|
||||||
|
found_errors=1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
if [ "$found_errors" -eq 0 ]; then
|
||||||
|
printf "✅ All systems green.\n"
|
||||||
|
fi
|
||||||
@@ -0,0 +1,107 @@
|
|||||||
|
# wh20 - SSH-Shortcuts für easyname WH20 Webserver
|
||||||
|
|
||||||
|
## Funktion
|
||||||
|
|
||||||
|
Dieses Skript stellt eine SSH-Verbindung zu einem angegebenen WH20 Webserver her. Optional kann über den Parameter `--tenant` die Domain angepasst werden, um auf Server in verschiedenen Tenant-Umgebungen zuzugreifen.
|
||||||
|
|
||||||
|
## Voraussetzungen
|
||||||
|
|
||||||
|
- SSH-Zugriff auf den Zielserver
|
||||||
|
- Der Benutzername muss als Umgebungsvariable `WHUSER` gesetzt sein
|
||||||
|
- Das Skript muss ausführbar sein (`chmod +x wh20.sh`)
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
1. **WHUSER Variable setzen** (in `~/.bashrc` oder `~/.bash_env`):
|
||||||
|
```bash
|
||||||
|
export WHUSER="deinusername"
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Installation über Installer**:
|
||||||
|
```bash
|
||||||
|
# Im Repository-Hauptverzeichnis
|
||||||
|
./install.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
## Verwendung
|
||||||
|
|
||||||
|
### Standard-Verbindung (easyname.systems)
|
||||||
|
```bash
|
||||||
|
wh20 web15
|
||||||
|
```
|
||||||
|
→ Verbindet zu `web15.wh20.easyname.systems`
|
||||||
|
|
||||||
|
### Mit Tenant adino
|
||||||
|
```bash
|
||||||
|
wh20 web15 --tenant adino
|
||||||
|
```
|
||||||
|
→ Verbindet zu `web15.adino.at`
|
||||||
|
|
||||||
|
### Mit Tenant dona
|
||||||
|
```bash
|
||||||
|
wh20 web15 --tenant dona
|
||||||
|
```
|
||||||
|
→ Verbindet zu `web15.inname.net`
|
||||||
|
|
||||||
|
## Syntax
|
||||||
|
|
||||||
|
```bash
|
||||||
|
wh20 <webserver> [--tenant adino|dona]
|
||||||
|
```
|
||||||
|
|
||||||
|
### Parameter
|
||||||
|
|
||||||
|
- `<webserver>`: Name des Webservers (z.B. `web15`, `srv272`, `ws12`)
|
||||||
|
- `--tenant`: Optional. Bestimmt die Domain-Endung:
|
||||||
|
- `adino` → `<webserver>.adino.at`
|
||||||
|
- `dona` → `<webserver>.inname.net`
|
||||||
|
- Ohne Angabe → `<webserver>.wh20.easyname.systems`
|
||||||
|
|
||||||
|
## Domain-Mapping
|
||||||
|
|
||||||
|
| Tenant | Domain-Pattern |
|
||||||
|
|--------|----------------|
|
||||||
|
| (kein) | `<webserver>.wh20.easyname.systems` |
|
||||||
|
| `adino` | `<webserver>.adino.at` |
|
||||||
|
| `dona` | `<webserver>.inname.net` |
|
||||||
|
|
||||||
|
## Beispiele
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Standard WH20 Server
|
||||||
|
wh20 web15
|
||||||
|
wh20 srv272
|
||||||
|
|
||||||
|
# Adino Tenant
|
||||||
|
wh20 web15 --tenant adino
|
||||||
|
wh20 ws12 --tenant adino
|
||||||
|
|
||||||
|
# Dona Tenant
|
||||||
|
wh20 web15 --tenant dona
|
||||||
|
wh20 srv272 --tenant dona
|
||||||
|
```
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
### WHUSER nicht gesetzt
|
||||||
|
```
|
||||||
|
Fehler: Bitte WHUSER setzen!
|
||||||
|
```
|
||||||
|
**Lösung**: `export WHUSER="deinusername"` in ~/.bashrc hinzufügen
|
||||||
|
|
||||||
|
### Unbekannter Tenant
|
||||||
|
```
|
||||||
|
Unbekannter Tenant: <tenant>
|
||||||
|
```
|
||||||
|
**Lösung**: Nur `adino` oder `dona` als Tenant-Wert verwenden
|
||||||
|
|
||||||
|
### Webserver-Name fehlt
|
||||||
|
```
|
||||||
|
Usage: wh20 <webserver> [--tenant adino|dona]
|
||||||
|
```
|
||||||
|
**Lösung**: Webserver-Namen als erstes Argument angeben
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*Maintainer: ado*
|
||||||
|
|
||||||
Executable
+47
@@ -0,0 +1,47 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# wh20 - SSH-Shortcuts für easyname WH20 Webserver
|
||||||
|
# Maintainer: ado
|
||||||
|
|
||||||
|
servername=""
|
||||||
|
tenant=""
|
||||||
|
|
||||||
|
while [[ $# -gt 0 ]]; do
|
||||||
|
case "$1" in
|
||||||
|
--tenant)
|
||||||
|
tenant="$2"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
servername="$1"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ -z "$servername" ]; then
|
||||||
|
echo "Usage: $0 <webserver> [--tenant adino|dona]"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Set domain based on tenant
|
||||||
|
case "$tenant" in
|
||||||
|
adino)
|
||||||
|
fqdn="$servername.adino.at"
|
||||||
|
;;
|
||||||
|
dona)
|
||||||
|
fqdn="$servername.inname.net"
|
||||||
|
;;
|
||||||
|
"")
|
||||||
|
fqdn="$servername.wh20.easyname.systems"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Unbekannter Tenant: $tenant"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Define the username
|
||||||
|
username="${WHUSER:?Bitte WHUSER setzen!}" # Wenn WHUSER als Umgebungsvariable gesetzt ist, wird dieser verwendet. Sonst Username eintragen.
|
||||||
|
|
||||||
|
# Open an SSH connection
|
||||||
|
exec ssh $username@$fqdn "$@"
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
#! /usr/bin/env bash
|
||||||
|
# Tool zum Schnellen prüfen mehrerer WordPress-Installationen
|
||||||
|
# Maintainer: peignerpausz
|
||||||
|
|
||||||
|
declare -a WORDPRESS=()
|
||||||
|
WORDPRESS="$(ls | grep wordpress)"
|
||||||
|
printf "Beginne Prüfung der Adminnutzer\n\n"
|
||||||
|
for wordpress in wordpress*/; do
|
||||||
|
[[ -d "$wordpress" ]] || continue
|
||||||
|
echo "Prüfe $wordpress"
|
||||||
|
userlist=$(php ~/bin/wp-cli.phar user list --role=administrator --path="$wordpress" 2>/dev/null)
|
||||||
|
if [[ -n "$userlist" ]]; then
|
||||||
|
printf "%s\n\n" "$userlist"
|
||||||
|
else
|
||||||
|
printf "Fehler bei %s\n\n" "$wordpress"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
for uneasy in $(find html/. -type f -name "wp-config.php" -exec dirname {} \;); do
|
||||||
|
[[ -f "$uneasy" ]] || continue
|
||||||
|
echo "Prüfe $uneasy"
|
||||||
|
userlist2=$(php ~/bin/wp-cli.phar user list --role=administrator --path="$uneasy")
|
||||||
|
echo $userlist2
|
||||||
|
if [[ -n "$userlist2" ]]; then
|
||||||
|
printf "%s\n\n" "$userlist2"
|
||||||
|
else
|
||||||
|
printf "Fehler bei %s\n\n" "$uneasy"
|
||||||
|
fi
|
||||||
|
done
|
||||||
Reference in New Issue
Block a user