TinyAdmin: Paralleles Administrieren Un*x (-ähnlicher) Systeme

Trevanian

New Member
UPDATE: Mitlerweile in v0.3-2 - Stand: 19. Juni 2011

Hallo alle zusammen,

ich möchte euch heute mal mein Tool zum administrieren mehrere Server gleichzeitig vorstellen.

Vorgeschichte:
Eines Abends, als ich gerade wieder dabei war, auf meinen Servern und sonstigen Computern Sicherheitsupdates einzuspielen, ist mir etwas aufgefallen:

  • a) Ich führe immer die gleiche Tätigkeit aus, auch wenn sich der Befehl je nach Betriebssystem unterscheidet.
  • b) Alle Geräte sind Un*x-ähnlich und verfügen über einen SSH Server.

Ich habe dann eine Software gesucht, mit der ich gleichzeitig mehrere Un*x-ähnliche Systeme (z.B. Linux oder MacOSX) administrieren und steuern kann. Leider wurde ich nicht fündig. Mein Debian-System nutzt apt, MacOSX nutzt softwareupdate, CentOS nutzt yum usw. - auch andere Befehle, die zwar semantisch die gleiche Bedeutung haben, unterscheiden sich leider syntaktisch. Der SSH-Login bleibt jedoch immer gleich.

Ich habe daraufhin meine eigene Software in Java geschrieben: TinyAdmin.

Info:

TinyAdmin ist ein freies Open-Source-Programm zum schnellen ausführen administrativer Tätigkeiten und Befehlen auf tausenden von Servern (Computern) gleichzeitig, also parallel.
Natürlich kann die Software auch nur zum schnellen administrieren eines einzelnen Servers genutzt werden.
Dabei müssen die fremden Server nicht zwangsläufig das gleiche Betriebssystem haben, der auszuführende Befehl wird einfach für jedes Betriebssystem korrekt angepasst.

Zusätzlich lassen sich Hosts auch pingen, oder deren Erreichbarkeit prüfen.
Auf Wunsch versendet die Software auch Magic-Packets (Wake-On-LAN).

Selbst bei nur einem Host lässt sich die Zeit für administrative Tätigkeiten deutlich verkürzen. Natürlich kann man damit auch einfach mal seinen HTPC per Wake-On-Lan aufwecken, sein Smartphone ausschalten oder sich schnell die Auslastung aller Nodes eines Superclusters ansehen.

Hinweis: Das Programm steht unter der GNU GPLv2.

Features:
  • Verwalten Sie mehrere Server gleichzeitig und Verteilen Sie Ihre Aufgabe dabei auf bis zu 10 parallele Prozesse.
  • Erstellen Sie eigene Kommandos: Passen Sie den auszuführenden Befehl für jedes unterstützte Betriebssystem selbst an und speichern Sie Ihre erstellten Kommandos.
  • Schnell-Kommandos: Führen sie schnell und unkompliziert eigene, nicht os-spezifische, Befehle aus.
  • Führen Sie alle Befehle wahlweise als root oder normaler Benutzer aus: Ihr Kommando wird dementsprechend automatisch für Sie angepasst.
  • Standardkommandos: Führen Sie Softwareupdates auf vielen Hostcomputern parallel mit nur einem Klick durch, fahren Sie diese herunter, oder rebooten sie: All dies ohne selbst Befehle definieren zu müssen. Die Software arbeitet dabei automatisch mit dem Paketmanager des jeweiligen Hosts zusammen.
  • Weckt fremde Hosts auf bzw. startet diese durch Versand eines Magic-Packets (Wake-On-LAN).
  • Testen der Erreichbarkeit fremder Hosts, oder Sammeln von Pingstatistiken über diese.
  • Unterstützt viele verschiedene Fremdrechner-Betriebssysteme (Mac OS X, Debian, Fedora, RedHat, CentOS, Mandriva).
  • Sicheres Aufbewahren ihrer Passwörter auf der Festplatte durch effektive Verschlüsselung.
  • Eigene SSH2-Implementierung: Es wird keine weitere Software benötigt. Das Programm arbeitet also auch unter Windows, obwohl dort kein SSH verfügbar ist.
  • NEU IN V0.3: Erlaubt die freie Wahl des SSH-Ports für jeden Host und die Verwendung von Public Keyfiles.
  • NEU IN v0.3: Schnell-Zugriff auf alle Funktionen und Befehle per TrayIcon.

Systemvoraussetzungen:
  • JavaSE >=1.6
  • Ein Betriebssystem mit grafischer Oberfläche

DOWNLOAD:HIER CLICKEN

Hinweis: Falls jemand die Software ausprobieren sollte, wäre ein ganz kurzes Feedback mit Hinweis auf das verwendete Betriebssystem wirklich nett. Zudem werde ich jeden Vorschlag (falls er Sinn macht) gerne in die nächste Version aufnehmen.

Wer sein Betriebssystem vermisst: Gebt mir kurz Bescheid und schon am nächsten Tag wird euer System von der Anwendung unterstützt, das ist eine Sache von wenigen Minuten.

SCREENSHOTS:
 

Attachments

  • main.png
    main.png
    99.1 KB · Views: 192
  • settings.png
    settings.png
    69.6 KB · Views: 199
  • settings2.png
    settings2.png
    77.4 KB · Views: 200
  • customC.png
    customC.png
    96 KB · Views: 169
  • addHost.png
    addHost.png
    157 KB · Views: 199
Last edited by a moderator:
Das sieht doch schonmal gut aus ;)
Werde ich übers Wochenende mal ausgiebig testen, und Dir dann eine Rückmeldung geben!

Grüsse
Basti
 
MOD: Full-Quote entfernt!
Freut mich dass Du Interesse an der Software hast oder ich zumindest deine Neugier wecken konnte. Falls Dir etwas fehlt, Du einen Bug findest, deine Lieblingsdistribution nicht dabei ist, oder Du einfach einen Verbesserungsvorschlag hast, dann sag einfach Bescheid und ich ändere es :)

Leider bin ich selbst kein Serveradministrator und kann daher nicht genau sagen, welche Features benötigt werden um die eigene Arbeit zu erleichtern: Anregungen sind also immer wilkommen.
Ich verwalte ja nur meine paar Kisten zu Hause :)

Gruß,

Trev
 
Last edited by a moderator:
zum schnellen ausführen administrativer Tätigkeiten und Befehlen auf tausenden von Servern (Computern) gleichzeitig

Marketing ist was schönes. Hast du das mal mit tausenden Servern ausprobiert? ;)
Allein wenn ich mir die Serverauswahl anschaue, möchte ich behaupten, dass ich mit einem Batch/Bash Script schneller bin, als ich dort 1500 von 2000 Hosts ausgewählt habe. :D

Ich habe zwar kein Bedarf an so einem Tool, aber ich würde dir empfehlen Gruppen für die Hosts zu implementieren. So dass man ganze Gruppen auswählen kann und nicht nur einzelne Hosts.
 
MOD: Full-Quote entfernt!
Das ist eine wirklich gute Idee mit den Gruppen. Du hast absolut recht: Bei einer solch großen Liste würde dann "entweder alles oder nichts" gelten. Einzelne Auswahl wäre wirklich ein ganz schönes Gefrickel. Die Sache mit den Gruppen wird für v0.3 vermerkt und dort implementiert.

Falls noch jemand solche Vorschläge hat: nur her damit. Die helfen wirklich weiter.

Ich werde auch für die nächste Version ein Tray-Icon implementieren, da hatte ich sowieso schon über Gruppen nachgedacht. Zudem wird es die Möglichkeit geben, Terminals zu den einzelnen Hosts zu öffnen :)

Gruß,

Trev
 
Last edited by a moderator:
1) was tun wenn ssh nicht auf port 22 läuft?
2) was tun wenn der login ueber key-file läuft?

Gute Argumente! Das mit Port 22 lässt sich schnell implementieren. Was die allgemeine SSH Unterstützung angeht, so bietet die Library die ich verwende, noch weit mehr. Ich habe lediglich noch nicht mit allen APIs gespielt, aber dort gibt es auch Möglichkeiten für keyfiles, known-hosts, proxy-support etc.

Also ich fasse zusammen: Es fehlt ein "Gruppen-Feature", mit dem sich Gruppen von Servern erstellen lassen und die SSH-Unterstützung ist mangelhaft.

Ich hoffe bald Neuigkeiten verkünden zu können. Sicher werde ich dieses Wochenende einiges schaffen :)

Gruß,

Trev
 
Das mit Port 22 hab ich gar ned gesehen :) Das doof, weil bei mir kein einziger Server noch den Standard SSH Port hat.
 
Man soll ja nicht unbedingt von der Konkurrenz abschauen...
Aber schau Dir mal PAC (und dessen Features) an, das ist imho ein ähnliches Tool. ;)

Vorteil von Deinem Tool: Es läuft auf mehreren Plattformen! Ich werd das mal antesten, sobald der SSH-Port frei einstellbar ist.
 
Last edited by a moderator:
Release von v0.3

Hallo nochmal alle zusammen,

ich möchte euch als Reaktion auf eure Kritik und der einiger anderer Leute nun v0.3 vorstellen und hoffe, so mehr Tester für meine Software gewinnen zu können.

Änderungen
  • Der SSH-Port ist nun für jeden Host selbst festlegbar.
  • Es kann nun für jeden Host auch ein Keyfile verwendet werden (ACHTUNG! Nur echte ssh-Keyfiles, keine Putty-Keyfiles)
  • Es wurde ein Tray-Icon implementiert. Dies ermöglicht den Schnellzugriff auf alle Funktionen und Kommandos, auch während die Anwendung minimiert ist.
  • Das Hinzufügen/Entfernen/Bearbeiten von Hosts wurde komplett überarbeitet und ist nun benutzerfreundlicher.
  • Einige Bugfixes.

Die Idee mit den Gruppen habe ich noch nicht implementiert, da dies den Rahmen für dieses Release gesprengt hätte. Ich verspreche aber, dies in v0.4 aufzunehmen.

Dies war das erste Release, in dem ich auschließlich Vorschläge von anderen Leuten aus dem Netz verwirklicht habe und das soll auch so bleiben:
Falls noch weitere Anregungen/Kritik etc. besteht, so würde ich mich freuen diese in v0.4 einfließen lassen zu dürfen, um die Software weiter zu verbessern.

Den Startbeitrag habe ich entsprechend editiert und auch neue Screenshots hinzugefügt.

DOWNLOAD: klick mich.
(Hinweis: Eventuell habt ihr noch die alte Page im Cache, falls ihr also "v0.3-1" nicht findet, ladet bitte die Seiten neu.)

Gruß,

Trev
 
Last edited by a moderator:
Ich fände es super, wenn beim programmstart ein passwort abgefragt wird.
am besten verschlüsselt man die datei tinyadmin.data damit, sodass die datei ohne passwort nicht verwendbar ist.

kriegt jemand falsches die datei in die hand, kann er sich ruckzuck zugriff auf alle server verschaffen und per knopfdruck auf allen servern z.B. Passwörter ändern oder DDOS starten.
 
... kriegt jemand falsches die datei in die hand, kann er sich ruckzuck zugriff auf alle server verschaffen ...

Daran habe ich selbstverständlich gedacht: Hast Du mal einen Blick in die tinyadmin.data geworfen? Alle Passwörter werden dort verschlüsselt abgelegt, lediglich die anderen Daten sind im Klartext gespeichert. Der geheime Schlüssel befindet sich in meiner persönlichen Obhut und wurde nicht mit dem Sourcecode veröffentlicht. Ich habe dem sogar eine extra Zeile in der Liste der Features auf der Hauptseite gewidmet :rolleyes:

Ich hatte auch erst überlegt, den User ein Passwort wählen zu lassen, ich halte dies jedoch für umständlich. Zudem wohin dann mit dem geheimen Schlüssel? Soll der User ihn sich aufschreiben? Speichern wird ja wohl eher schwierig: Ich kann die Datei, in der der Schlüssel dann liegt, ja nicht mit dem gleichen Schlüssel verschlüsseln.

Wer das Programm selbst kompilieren möchte, dem steht es frei in der Klasse IOHelfer.java selbst einen Schlüssel einzufügen. Dies ist auch in der API-Doku (sowie in der Klasse selbst) ausreichend dokumentiert.

Das Passwort, welches in der fertig kompilierten Version verwendet wird, hat über 60 Stellen (wie viele genau verrate ich nicht), wird mit einem Salt gemixt um dann über 19 Iterationen hinweg verschlüsselt. Wer sich genauer für die Implementierung interessiert, der darf gerne einen Blick in die Klassen KryptoHelfer.java und IOHelfer.java bzw. die API-Dokumentation werfen.

Du brauchst Dir also keine Sorgen um deine Passwörter machen, außer ich vergesse mal vor dem Sourcecode-Release den Schlüssel zu löschen und uploade ihn versehentlich mit hoch. Natürlich baue ich darauf, dass ein Hacker beim Stolpern über diese Datei sie nicht mit meinem Programm assoziiert, sonst könnte er in der Tat deine Daten abtippen, jedoch nicht automatisch verarbeiten lassen.

Was die DDOS Attacken etc. angeht, so sehe ich das wirklich als Problem: Eventuell sollte ich ALLE Einstellungen verschlüsseln und nicht nur die Passwörter, was meinst Du?

P.S. Freut mich, dass es Dir aufgefallen ist. Du bist bisher der Einzige, obwohl dies ja ein wirklich wichtiges Thema ist.

Gruß,

Trev
 
Last edited by a moderator:
Der geheime Schlüssel befindet sich in meiner persönlichen Obhut und wurde nicht mit dem Sourcecode veröffentlicht.
Du meinst "AA3F40126067DD3B9313B5424C5716CF89DDB35EDE85BE682582A11BCDD2935F"?

2 Minuten gesucht, 1 Minute gelacht, 1 Minute geweint. Fest kodierte Schlüssel für irgendwas zu verwenden ist unverantwortlich. Lass den Benutzer beim Starten sein Passwort eingeben und ver- und entschlüssle die Einstellungen damit.
 
Habe da vielleicht ein Bug entdeckt:
Wenn man Prozess nur 1 auswählt und dann auf Update klickt hängt sich das Programm auf.

Könntest du bitte "Programm immer im vordergrund" weg machen?
 
Ups

Ich und meine vorlaute Klappe, jetzt ist genau er worst case eingetreten: ich habe den Schlüssel mit hochgeladen.
Ich hätte wohl wenigstens nochmal die Klasse überprüfen sollen, bevor ich hier die Trompeten blase :rolleyes:

Ich möchte mich daher in aller Form dafür entschuldigen: ich habe mir wirklich viel Mühe gegeben, aber bei dem ganzen Sourcecode gepacke und hochgelade, wohl einfach das letzte mal in der Hektik den Überblick verloren. Als Reaktion wird es (hoffentlich) morgen ein Update geben, in dem der User selbst sein Passwort wählen kann. Zudem werde ich natürlich das "im Vordergrund halten" der Anwendung deaktivieren.

Sobald die neue Version draußen ist, sage ich nochmal bescheid. Ich habe aber noch ein Anliegen:

Was den (angeblich) gefunden Bug angehet, falls nur ein Prozess ausgewählt wird: Ich kann den Bug leider nicht reproduzieren. Natürlich dauert es bei einem Prozess extrem lange, bis er alle Einträge abgearbeitet hat und da die Konsolenausgabe nicht 'live' ist, kann man den Eindruck gewinnen, das Programm hätte sich aufgehängt.
Ich habe nun wirklich lange rumprobiert, aber bei mir hängt sich nichts auf.

Könntest Du (chrismaden) bitte nochmals überprüfen, ob sich das Programm wirklich aufgehängt hat und wenn ja, alle Schritte angeben, die Du vorher ausgeführt hast. Starte es dann bitte über die Konsole/Terminal und beobachte, ob es eine Exception/Fehler etc. ausgibt wenn es abstürzt.
Es liegt mir wirklich viel daran, diesen Bug zu schließen, falls er existiert und ich wäre Dir daher sehr dankbar, falls Du Dir kurz die Zeit nehmen könntest.

Daher auch nochmal die Frage an alle Anderen: Stürzt bei jemandem das Programm ab, wenn er nur einen einzigen Prozess auswählt?

Gruß,

Trev
 
Du hast den Schlüssel ganz bewusst jedesmal mit hochgeladen. Denn der steht nun mal auch im kompilierten Code.
Mit wenigen Handgriffen lässt er sich dort binnen Sekunden extrahieren.
 
Du hast den Schlüssel ganz bewusst jedesmal mit hochgeladen. Denn der steht nun mal auch im kompilierten Code.
Mit wenigen Handgriffen lässt er sich dort binnen Sekunden extrahieren.

Ich habe den Schlüssel *NICHT* ganz bewusst hochgeladen: Vor jedem packen des Sourcecodes oder hochladen ins Git, habe ich den Key extra aus dem Quellcode gelöscht. Ich muss es nur das letzte mal vergessen haben :(

Was die kompilierte Version angeht: ich fiel gerade fast vom Stuhl, als ich meine Klasse durch einen Java Decompiler gejagt habe. Mir war absolut nicht bewusst, dass Java Bytecode so einfach und so perfekt dekompiliert werden kann. Naja, wieder etwas gelernt :rolleyes:

Ich werde mich dann gleich daran machen, die Software umzuarbeiten. Erstmal brauch ich aber noch einen Kaffee :)
Der Benutzer kann dann selbst ein Passwort festlegen, von dem lediglich der Hash gespeichert wird. Allerdings finde ich es etwas schade, jedesmal beim Start das Passwort eingeben zu müssen. Mein Vorschlag für eine Zusatzoption sieht daher wie folgt aus: Optional kann das Passwort im Klartext auf einem externen Datenträger (oder wo auch immer der User möchte) gespeichert werden und beim Start wird dann überprüft, ob der Pfad dorthin noch gültig ist. Ist er es nicht, erscheint wieder die Passworteingabe.

Ich z.B. habe keine SSH Server, die ich Attacken aussetzen würde, da sie nur im LAN verfügbar sind. Den Durchschnittsuser könnte es nerven, immer ein Passwort eingeben zu müssen, nachdem er eh schon auf das Laden der Java VM warten musste. Daher die Idee mit der Zusatzoption.

Gruß,

Trev
 
Ich habe den Schlüssel *NICHT* ganz bewusst hochgeladen
Ich meinte die kompilierte Anwendung und nicht den Sourcecode. Das der Schlüssel da auch irgendwann mal drin stand, war mir zumindest nicht aufgefallen.
Ein Text- oder Hex-Editor oder auch das nette Konsolen-Tool "strings" reicht im übrigen, um das Passwort auszulesen. ;)
 
Back
Top