Liste auf Linux Appliance per Script ergänzen

Dan316

Lt. Junior Grade
Registriert
Jan. 2012
Beiträge
321
Hallo zusammen,

bei dieser Frage werden die Experten unter Euch sicherlich nur müde lächeln, ich würde mich über Tipps und Anregungen freuen.

Wir pflegen von unseren Windows Clients aus (Config-) Listen auf Linux Appliances, in diese Liste müssen regelmäßig Einträge hinzugefügt werden. Wir haben insgesamt 20 Appliances und müssen daher jede Liste einzeln auf jeder Appliance separat editieren. Das ist sehr zeitintensiv und nicht effizient.

Ich würde nun gerne ein Script benutzen, welches die Listen automatisch ergänzt. Die Appliances sind beispielsweise per SSH erreichbar, also sollte der Zugriff schon einmal gesichert sein.

Die Listen sind prinzipiell so aufgebaut:

Code:
[A]

123
456
789

[B]
abc
def
ghi

[C]
wsx
edc
rfv

Die Einträge, welche wir hinzufügen, müssen immer unter B gesetzt werden, die Reihenfolge ist egal.

Kann mir jemand einen Vorschlag machen, wie ich das von einem Windows Client aus automatisieren könnte? Ich denke da beispielsweise an ein vermeintlich 'simples' Script, welches sich einloggen kann (vma auch im Klartext), mit dem gewünschten Eintrag ergänzt und welches dann diesen Eintrag automatisch unter B hinzufügt.

In der Theorie über diesen Ablauf:
Login 10.0.0.1
User
Password
Edit /data/text.conf
Add Eintrag to B


Vielen Dank!
 
Schreib dir ein python script. Der Aufwand sollte ueberschaubar sein.
 
Die Liste ist doch für alle gleich? Kopier die einfach neu drüber per scp (secure copy over ssh)
 
  • Gefällt mir
Reaktionen: Hayda Ministral
Du musst dafür nicht unbedingt in Python selbst skripten. Das wäre ein guter Job für Ansible.
Du pflegst an einer Stelle die Liste und verteilst diese per Ansible auf die Linux-Server. Da Ansible keinen Agenten benötigt und nur per SSH arbeitet, sollte dies funktionieren wobei einige wenige Pakete auf den Zielsystemen vorhanden sein sollten, müsstest in die Ansible Doku schauen für Details.

Wenn ein neues System für die Liste hinzu kommt änderst du dies im Template und verteilst es danach.
Das passende Modul wäre vermutlich das file_copy: https://docs.ansible.com/ansible/latest/modules/copy_module.html#copy-module

Theoretisch kannst das verteilen in einen cronjob packen, dann brauchst nur die Liste aktualisieren und im gewünschten Intervall bzw. zu bestimmten Zeiten wird es dann verteilt oder eben per manuellem Aufruf wenn es sofort sein soll.

Die Lösung von @beig1 geht natürlich auch. Liste an einer Stelle erstellen, zusätzlich eine Liste aller Ziel-Linux-Appliances haben und dann grob folgendes:
for i in liste; scp $sourcefile $i:/$destination-path/file
 
  • Gefällt mir
Reaktionen: new Account()
Code:
#!/bin/bash
[[ -e ./liste.old ]] && rm ./liste.old # wenn liste.old existiert, löschen.
mv ./liste.txt ./liste.old; #Alte Datei sichern
ZEILE=$(sed "/[B]/=; d" ./liste.old); #Anzahl der Zeilen bis [B] inkl.
head -n ${ZEILE} ./liste.old > ./liste.txt; #liste bis inkl. [B] in neue Liste schreiben
ZEILE=$(expr ${ZEILE}+1); #Zeilennummer erhöhen um 1
cat ./neue_liste.txt >> ./liste.txt #neue Einträge an liste.txt anfügen (Beispiel)
tail -n +${ZEILE} ./liste.old >>liste.txt; #liste ab Zeile an neue Liste anhängen
exit 0

Nur ein Beispiel für ein shell-script. Hier werden die neuen Daten direkt unter dem [ B ] eingefügt (besser, dieser String taucht nur einmalig auf!) und sind bereits in einer Textdatei mit Namen neue_liste.txt im Arbeitsverzeichnis vorhanden. Die alte Datei ist dann noch als liste.old gesichert.
Ergänzung ()

Dan316 schrieb:
denke da beispielsweise an ein vermeintlich 'simples' Script, welches sich einloggen kann

In diesem Zusammenhang solltest Du über PubKeyAuth (einloggen mittels RSA-Schlüssel) nachdenken, erspart das Passwort.

Wenn Du win10 nutzt, denke mal über WSOL nach. Der ssh-Befehl (Client) ist zwar (mittlerweile) der windows-eigenen shell hinzugefügt worden, bash oder zsh ist imho jedoch immer noch komfortabler.
 
Zuletzt bearbeitet:
Ich bin zwischenzeitlich umgezogen und wollte mich zumindest noch für die Antworten bedanken. Ich habe die Methode per SCP gewählt, ich hatte wohl einfach zur kompliziert gedacht

beig1 schrieb:
Die Liste ist doch für alle gleich? Kopier die einfach neu drüber per scp (secure copy over ssh)

snaxilian schrieb:
Du musst dafür nicht unbedingt in Python selbst skripten. Das wäre ein guter Job für Ansible.
Du pflegst an einer Stelle die Liste und verteilst diese per Ansible auf die Linux-Server. Da Ansible keinen Agenten benötigt und nur per SSH arbeitet, sollte dies funktionieren wobei einige wenige Pakete auf den Zielsystemen vorhanden sein sollten, müsstest in die Ansible Doku schauen für Details.
Twostone schrieb:
Code:
#!/bin/bash
[[ -e ./liste.old ]] && rm ./liste.old # wenn liste.old existiert, löschen.
mv ./liste.txt ./liste.old; #Alte Datei sichern
ZEILE=$(sed "/[B]/=; d" ./liste.old); #Anzahl der Zeilen bis [B] inkl.
head -n ${ZEILE} ./liste.old > ./liste.txt; #liste bis inkl. [B] in neue Liste schreiben
ZEILE=$(expr ${ZEILE}+1); #Zeilennummer erhöhen um 1
cat ./neue_liste.txt >> ./liste.txt #neue Einträge an liste.txt anfügen (Beispiel)
tail -n +${ZEILE} ./liste.old >>liste.txt; #liste ab Zeile an neue Liste anhängen
exit 0

Nur ein Beispiel für ein shell-script. Hier werden die neuen Daten direkt unter dem [ B ] eingefügt (besser, dieser String taucht nur einmalig auf!) und sind bereits in einer Textdatei mit Namen neue_liste.txt im Arbeitsverzeichnis vorhanden. Die alte Datei ist dann noch als liste.old gesichert.
Ergänzung ()



In diesem Zusammenhang solltest Du über PubKeyAuth (einloggen mittels RSA-Schlüssel) nachdenken, erspart das Passwort.

Wenn Du win10 nutzt, denke mal über WSOL nach. Der ssh-Befehl (Client) ist zwar (mittlerweile) der windows-eigenen shell hinzugefügt worden, bash oder zsh ist imho jedoch immer noch komfortabler.

Wow, danke für die Mühe! Damit werde ich mich alleine schon aus Neugierde beschätigen.
 
Zurück
Oben