bash-random-string-christian-doebler

Aug 03, 2024

Zufalls-Strings in Bash generieren

Ich verwalte eine Reihe von Systemen, auf denen Web- und API-Dienste aus Sicherheitsgründen nicht erlaubt sind. Dennoch müssen dort häufig lang laufende Prozesse von außen gestartet und überwacht werden. Ich löse das über einen unprivilegierten SSH-Account ohne interaktive Shell, der nach der Public-Key-Authentifizierung direkt ein einzelnes, erlaubtes Bash-Skript ausführt. Dieses Skript bietet nur folgende Aktionen:

  • Prozess starten
  • Prozessstatus übermitteln
  • Prozessausgabe übermitteln

Um die Prozesse verfolgen zu können, generiere ich beim Start eindeutige IDs. Es gibt viele Möglichkeiten, solche IDs in Bash zu erzeugen — hier sind meine zwei Favoriten:

1. Mit openssl generieren

Diese Methode erzeugt einen 20-stelligen hexadezimalen Zufalls-String mit den Zeichen a-f 0-9. Da jedes "Zeichen" 8 Bit umfasst (Kombinationen 00 bis ff), muss die gewünschte Länge durch zwei geteilt werden. Für 20 Zeichen verwenden wir Länge 10:

$ openssl rand -hex 10
eec3da9e849fdc383d75

2. Aus /dev/urandom lesen

Diese Methode erzeugt einen 20-stelligen Zufalls-String mit den Zeichen -_#% A-Z a-z 0-9. Das Minuszeichen muss beim tr-Filter mit einem Backslash escaped werden:

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

Bei der Generierung von Zufalls-Strings ist auf eine gesicherte Zufälligkeit zu achten. Aus diesem Grund verwende ich openssl oder /dev/urandom.

Viel Spaß beim Generieren!