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!
