bash-random-string-christian-doebler

Zufalls-Strings in Bash generieren

Ich betreue eine Reihe an Systemem, auf denen aus Sicherheitsgründen Web- und somit auch API-Dienste in jeglicher Form untersagt sind. Nun müssen jedoch immer wieder lang laufende Prozesse von außerhalb gestartet und überwacht werden. Letztendlich sollen auch noch Ausgaben der Prozesse abgerufen werden können. Um diese Anforderungen umzusetzen, verwende ich auf den eingangs genannten Systemem ein unprivilegiertes SSH-Konto, dem keine interaktive Shell zur Verfügung steht und das ich auf ein erlaubtes Bash-Skript reduziert habe, welches direkt nach erfolgter Authentifizierung per public key, ausgeführt wird. Dieses Skript bietet nun lediglich folgende Aktionen an:

  • Prozess starten
  • Prozessstatus übermitteln
  • Prozessausgabe übermitteln

Um die Prozesse überwachen zu können, lasse ich beim Start eine ID generieren, die es mir erlaubt, mir Status und Ergebnisse über jeden der Prozesse abrufen zu können. Es gibt eine Fülle an Möglichkeiten, solche IDs in Bash-Skript zu generieren und ich möchte hier kurz meine zwei Favoriten vorstellen, da solche Anforderungen immer wieder auftreten und die IDs einzigartig sein sollen:

1. Mit openssl generieren

Der erste von mir präferierte Weg erzeugt eine 20 Zeichen lange, hexadezimale Zufallszeichenkette. Sie ist demnach auf die folgenden Zeichen begrenzt: a-f 0-9. Diese Begrenzung stellt aber, je nach Einsatzgebiet und Länge, überhaupt kein Problem dar. Zu beachten ist, dass pro "Zeichen" mit der Länge zwei zu rechnen ist, da es sich immer um eine Ausgabe von 8 Bit Länge, also Zeichenkombinationen 00 bis ff handelt. Demnach muss beim Setzen der erwünschten Länge eine gerade Zahl verwendet und anschließend durch zwei geteilt werden. Hier wollen wir 20 Zeichen und verwenden somit eine Länge von 10.

$ openssl rand -hex 10eec3da9e849fdc383d75

2. Von /dev/urandom auslesen

Mit der zweiten Methode erzeuge ich eine 20 Zeichen lange Zufallszeichenkette, unter Verwendung der willkürlich ausgewählten verfügbaren Zeichen -_#% A-Z a-z 0-9. Bitte beachten, dass ein Minuszeichen escaped werden muss. Deswegen stellen wir diesem, bei der Definition unseres Filter unter Verwedung des Befehls tr, hier einen Backslash voran.

$ cat /dev/urandom | tr -dc '\-_#%A-Za-z0-9' | head -c20NK%eezihVNC6qbz0-cFH

Es gibt, wie eingangs erwähnt, eine Fülle an Methoden, Zufallszeichenketten unter Verwendung von Bash zu erzeugen. Es sollte meines Erachtens unbedingt darauf geachtet werden, dass der Zufallsfaktor gesichert ist. Aus diesem Grund verwende ich /dev/urandom oder openssl.

Viel Spaß beim Generieren!