Page 1 of 1
Bastelsnippets für Listen von Usern, Datenbanken, Domains, Emails
Posted: Sat 2. Oct 2021, 00:00
by superjogi
Hallo,
Kann man mit einem Bashscript folgende Infos auf elegante Weise (zB. direkt über KeyHelp cli) auslesen?
Brauchbar für eine Schleife von Backups, Wartung, Cronjobtriggern etc.
Schöne Grüße
Re: Bastelsnippets für Listen von Usern, Datenbanken, Domains, Emails
Posted: Sat 2. Oct 2021, 01:41
by Alexander
Hallo,
Das geht, in dem du dich entweder direkt über die Datenbank einloggst und die Daten aus der KeyHelp Datenbank ausliest. Oder dich lokal über die API verbindest und die Daten darüber holst.
Letzteres wäre empfehlenswerter, aber sicher auch etwas aufwendiger.
Re: Bastelsnippets für Listen von Usern, Datenbanken, Domains, Emails
Posted: Sat 2. Oct 2021, 09:47
by space2place
Alexander wrote: ↑Sat 2. Oct 2021, 01:41
Oder dich lokal über die API verbindest und die Daten darüber holst.
Letzteres wäre empfehlenswerter, aber sicher auch etwas aufwendiger.
Funktioniert einwandfrei.. Nutze das auch bei meinem Migrationsscript
Re: Bastelsnippets für Listen von Usern, Datenbanken, Domains, Emails
Posted: Sat 2. Oct 2021, 23:41
by superjogi
Alexander wrote: ↑Sat 2. Oct 2021, 01:41
Hallo,
Das geht, in dem du dich entweder direkt über die Datenbank einloggst und die Daten aus der KeyHelp Datenbank ausliest. Oder dich lokal über die API verbindest und die Daten darüber holst.
Letzteres wäre empfehlenswerter, aber sicher auch etwas aufwendiger.
Danke das ist sehr hilfreich.
>Oder dich lokal über die API verbindest und die Daten darüber holst.
Genau das würde ich gerne machen.
Ich starte mal meine Erkenntnisse zu posten..
Re: Bastelsnippets für Listen von Usern, Datenbanken, Domains, Emails
Posted: Sat 2. Oct 2021, 23:41
by superjogi
space2place wrote: ↑Sat 2. Oct 2021, 09:47
Alexander wrote: ↑Sat 2. Oct 2021, 01:41
Oder dich lokal über die API verbindest und die Daten darüber holst.
Letzteres wäre empfehlenswerter, aber sicher auch etwas aufwendiger.
Funktioniert einwandfrei.. Nutze das auch bei meinem Migrationsscript
Danke für die Info. Würde mich über ein Bash API Beispiel freuen für z.B. User und Domain Liste. : )
Re: Bastelsnippets für Listen von Usern, Datenbanken, Domains, Emails
Posted: Sat 2. Oct 2021, 23:44
by superjogi
Hier ein Bash Skript für die Liste der Datenbanken über Verbindung mit mysql
- Auslesen der Datenbankliste
- Optionale Filterung (Prefix des Datenbanknamens), aktuell auskommentiert
- Liste durchlaufen
- Backup der Datenbanken, gesammelt in einem nach Datum benannten Ordner
- Automatisches Löschen der Backups nach 31 Tagen
Code: Select all
#!/bin/bash
DATE=`date +%Y-%m-%d`
BACKUPPATHBASE=""/__databasebackup""
BACKUPPATH=""${BACKUPPATHBASE}/${DATE}""
#DBNAME_STARTS_WITH=""HIER DBPREFIX""
MHOST=""HIER DATENBANKSERVER IP""
MUSER=""HIER USERNAME""
MPWD=""HIER PASSWORT""
MYSQL=""mysql""
mkdir -p ${BACKUPPATH}
DBS="$($MYSQL -h${MHOST} -u$MUSER -p$MPWD -Bse 'show databases')"
for dbname in $DBS; do
#if [[ "${dbname}" =~ ^"${DBNAME_STARTS_WITH}".* ]]; then
echo "Preparing dump for ${dbname}"
mysqldump --default-character-set=utf8 --no-tablespaces -h${MHOST} ${dbname} -u${MUSER} -p${MPWD} > ${BACKUPPATH}/${dbname}.sql
#fi
done
find /__databasebackup/* -mtime +30 -exec rm {} \;
Re: Bastelsnippets für Listen von Usern, Datenbanken, Domains, Emails
Posted: Sun 3. Oct 2021, 00:16
by superjogi
Hier eine Querverlinkung zu einem Bash Skript zum Auffinden der Userordner
viewtopic.php?p=30858#p30858
Wäre interessanter und schöner dies mit API abzulösen.
Re: Bastelsnippets für Listen von Usern, Datenbanken, Domains, Emails
Posted: Sun 3. Oct 2021, 23:41
by OlliTheDarkness
superjogi wrote: ↑Sun 3. Oct 2021, 00:16
Hier eine Querverlinkung zu einem Bash Skript zum Auffinden der Userordner
viewtopic.php?p=30858#p30858
Wäre interessanter und schöner dies mit API abzulösen.
Kannst du doch ?!
Über den /clients bekommst alle Nutzer.
Da die Struktur immer die selbe ist, ist es logisch das alle angezeigten Clients unter /home/users/CLIENTNAME liegen.
Bzw. das ergebnis sagt dir sogar wo der homepath ist mit "document_root": "/home/users/alex/",
Vollständige Ausgabe:
Code: Select all
[
{
"id": 8,
"status": 1,
"username": "alex",
"language": "de",
"email": "me@example.com",
"notes": "Any comments about this client account.",
"created_at": "2019-08-15T11:29:13+02:00",
"document_root": "/home/users/alex/",
"is_suspended": false,
"suspend_on": null,
"delete_on": null,
"contact_data": {
"first_name": "Alex",
"last_name": "Mahr",
"company": "Keyweb AG",
"telephone": "555-Nase",
"address": "Neuwerkstraße 45/46",
"city": "Erfurt",
"zip": "99084",
"state": "Thuringia",
"country": "DE",
"client_id": "ID-12345"
},
"password_hash": "$2a$10$fF3npQ.jS/KL8Nr6zecPke8IUsuB1oGXxY7w4aa...\"",
"password_hash_os": "$6$rounds=100000$tn0.24Y/EWkV8gjA$VkYdo/1X23dW...\""
}
]
Der KH Api Doc entnommen.
Re: Bastelsnippets für Listen von Usern, Datenbanken, Domains, Emails
Posted: Mon 4. Oct 2021, 12:48
by superjogi
Danke!
Ich sehe du beziehst dich auf:
https://app.swaggerhub.com/apis-docs/ke ... .1#/client
Super.. ich bin dran.
Probiere es mal mit diesem REST Tutorial zu kombinieren:
https://auth0.com/blog/developing-restf ... ith-lumen/
Re: Bastelsnippets für Listen von Usern, Datenbanken, Domains, Emails
Posted: Mon 4. Oct 2021, 13:03
by Tobi
Der Anfang ist bereits gemacht
viewtopic.php?t=8715
Re: Bastelsnippets für Listen von Usern, Datenbanken, Domains, Emails [GELÖST]
Posted: Mon 4. Oct 2021, 23:35
by superjogi
Hier ein PHP Skript für die Liste der User, Domains, Datenbanken mittels Verwendung der API
- Generierung der Listen mittels jeweils einem statischen Funktionsaufruf
- Nur GET um die Listen zu bekommen
- Einfach anzupassendes Ergebnis z.B. mittels übersichtlichem Code und Debugausgabe in Console, oder Browser
- Caching von den Daten jeweils als Textfiles pro Endpoint (siehe Bild)
Code: Select all
<?php
//https://app.swaggerhub.com/apis-docs/keyhelp/api/2.1#/client
KeyHelpAPI::listKeyHelpObjects("clients"); print KeyHelpAPI::$newLine;
KeyHelpAPI::listKeyHelpObjects("domains"); print KeyHelpAPI::$newLine;
KeyHelpAPI::listKeyHelpObjects("databases"); print KeyHelpAPI::$newLine;
class KeyHelpAPI
{
public static $apiUrl="https://184.111.111.211/api/v2/";
public static $apiKey="kR8asdf.sBd3eK7F439ijfkmilkjmdioj09fujdsfjkdsf90u430rjhfoldjü09432u5rfjadlskfjklsdfjkasjdflksafd";
public static $apiMethod="GET";
public static $genFile="/home/users/pm/www/testdomain.de/cachedApiResults";
public static $newLine="\n";
public static function listKeyHelpObjects($objectEndpoint){
$arrObjects = json_decode(self::CallAPI($objectEndpoint,$data = false), true);
//use this to understand what data there is!
//print_r($arrObjects);
switch ($objectEndpoint)
{
case "clients":
//print $object[0]["username"];
self::initializeCachedAPICalls($objectEndpoint);
foreach ($arrObjects as $object) {
print $object["username"]. self::$newLine;
self::writeCachedAPICalls($objectEndpoint,$object["username"]);
}
break;
case "domains":
self::initializeCachedAPICalls($objectEndpoint);
foreach ($arrObjects as $object) {
print $object["domain"]. self::$newLine;
self::writeCachedAPICalls($objectEndpoint,$object["domain"]);
}
break;
case "databases":
self::initializeCachedAPICalls($objectEndpoint);
foreach ($arrObjects as $object) {
print $object["database_name"].":".$object["database_username"]. self::$newLine;
self::writeCachedAPICalls($objectEndpoint,$object["database_name"]);
}
break;
}
}
private static function initializeCachedAPICalls($objectEndpoint)
{
//Filename:
//print self::$genFile.'_'.$objectEndpoint.'.txt';
$h = fopen(self::$genFile.'_'.$objectEndpoint.'.txt', 'w');
fwrite($h, "");
}
private static function writeCachedAPICalls($objectEndpoint,$txtData)
{
$h = fopen(self::$genFile.'_'.$objectEndpoint.'.txt', 'a+');
fwrite($h, $txtData.PHP_EOL);
//fwrite($h, var_export($arrData, true)); //in case you want to write array directly
}
private static function CallAPI($objectEndpoint, $data = false)
{
$curl = curl_init();
$url = self::$apiUrl.$objectEndpoint;
$method = self::$apiMethod;
switch ($method)
{
case "POST":
curl_setopt($curl, CURLOPT_POST, 1);
if ($data)
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
break;
case "PUT":
curl_setopt($curl, CURLOPT_PUT, 1);
break;
default:
if ($data)
$url = sprintf("%s?%s", $url, http_build_query($data));
}
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, '0'); // 1 on Live-Systems
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, '0'); // 1 on Live-Systems
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
'X-API-Key: '.self::$apiKey,
'accept: application/json',
'Content-Type: application/json',
));
$result = curl_exec($curl);
curl_close($curl);
return $result;
}
}
?>
Nicht vergessen die IP vom Server freizugeben in der API Konfiguration im KeyHelp Admin.
Und Aufruf einfach außerhalb vom Webverzeichnis mit "php scriptName.php"
Weiteres Verarbeiten der generierten Files dann z.B. direkt in Bash um 'langsame' API-Aufrufe zu sparen:
Code: Select all
#!/bin/bash
cat cachedApiResults_clients.txt | while read line || [[ -n $line ]];
do
# do something with $line here
done
Re: Bastelsnippets für Listen von Usern, Datenbanken, Domains, Emails
Posted: Mon 4. Oct 2021, 23:36
by superjogi
Danke. Das Skript mir geholfen die Recherche zu starten.
Ich benötigte aber nur ganz übersichtliche Generierung von Listen und keine weitere Interaktion mit der API.
Re: Bastelsnippets für Listen von Usern, Datenbanken, Domains, Emails
Posted: Mon 4. Oct 2021, 23:42
by ShortSnow
Ich würde in Deinem Beitrag im Script den Key noch anonymisieren
Gruß Arne
Re: Bastelsnippets für Listen von Usern, Datenbanken, Domains, Emails
Posted: Mon 4. Oct 2021, 23:48
by superjogi
ShortSnow wrote: ↑Mon 4. Oct 2021, 23:42
Ich würde in Deinem Beitrag im Script den Key noch anonymisieren
Gruß Arne
Danke, aber er ist schon anonymisiert. So sieht man gleich wie lang der Key ist und wo er hingehört.