So verwenden Sie verschlüsselte Passwörter in Bash-Skripten

Ein Linux-Laptop im Ubuntu-Stil.

Wenn Sie gezwungen sind, ein Linux-Skript zu verwenden, um eine Verbindung zu einer passwortgeschützten Ressource herzustellen, fühlen Sie sich wahrscheinlich unwohl, dieses Passwort in das Skript einzugeben. OpenSSL löst dieses Problem für Sie.

Passwörter und Skripte

Es ist keine gute Idee, Passwörter in Shell-Skripte zu schreiben. Tatsächlich ist es eine wirklich schlechte Idee. Wenn das Skript in die falschen Hände gerät, kann jeder, der es liest, das Passwort sehen. Aber was können Sie sonst noch tun, wenn Sie gezwungen sind, ein Skript zu verwenden?

Sie können das Kennwort manuell eingeben, wenn der Prozess diesen Punkt erreicht, aber wenn das Skript unbeaufsichtigt ausgeführt wird, funktioniert das nicht. Zum Glück gibt es eine Alternative zum Hartcodieren der Passwörter in das Skript. Kontraintuitiv verwendet es ein anderes Passwort, um dies zusammen mit einer starken Verschlüsselung zu erreichen.

In unserem Beispielszenario müssen wir von unserem Ubuntu-Computer aus eine Remote-Verbindung zu einem Fedora Linux-Computer herstellen. Wir verwenden ein Bash-Shell-Skript, um eine SSH-Verbindung zum Fedora-Computer herzustellen. Das Skript muss unbeaufsichtigt ausgeführt werden, und wir möchten nicht das Kennwort für das Remote-Konto in das Skript einfügen. Wir können in diesem Fall keine SSH-Schlüssel verwenden, da wir so tun, als hätten wir keine Kontrolle oder keine Administratorrechte über den Fedora-Computer.

Wir nutzen das bekannte OpenSSL-Toolkit um die Verschlüsselung zu handhaben und ein Dienstprogramm namens sshpass um das Passwort in den SSH-Befehl einzugeben.

VERBUNDEN: So erstellen und installieren Sie SSH-Schlüssel aus der Linux-Shell

OpenSSL und sshpass installieren

Da viele andere Verschlüsselungs- und Sicherheitstools OpenSSL verwenden, ist es möglicherweise bereits auf Ihrem Computer installiert. Ist dies jedoch nicht der Fall, dauert die Installation nur einen Moment.

Geben Sie unter Ubuntu diesen Befehl ein:

sudo apt get openssl

Installieren sshpass, verwenden Sie diesen Befehl:

sudo apt install sshpass

Auf Fedora müssen Sie Folgendes eingeben:

sudo dnf install openssl

Der Befehl zum Installieren sshpass ist:

sudo dnf install sshpass

Unter Manjaro Linux können wir OpenSSL installieren mit:

sudo pacman -Sy openssl

Endlich installieren sshpass, verwenden Sie diesen Befehl:

sudo pacman -Sy sshpass

Verschlüsselung auf der Kommandozeile

Bevor wir mit der Verwendung beginnen openssl Befehl mit Skripten, machen wir uns damit vertraut, indem wir ihn in der Befehlszeile verwenden. Nehmen wir an, das Passwort für das Konto auf dem Remote-Computer lautet rusty!herring.pitshaft. Wir werden dieses Passwort verschlüsseln mit openssl.

Wir müssen ein Verschlüsselungspasswort angeben, wenn wir dies tun. Das Verschlüsselungskennwort wird in den Verschlüsselungs- und Entschlüsselungsprozessen verwendet. Es gibt viele Parameter und Optionen in der openssl Befehl. Wir werden uns jeden von ihnen gleich ansehen.

echo 'rusty!herring.pitshaft' | openssl enc -aes-256-cbc -md sha512 -a -pbkdf2 -iter 100000 -salt -pass pass:'pick.your.password'

Wir verwenden echo um das Kennwort des Remote-Kontos über eine Pipe und in die openssl Befehl.

Verwandt :  So erstellen Sie einen Radiosender auf Spotify, Apple Music und YouTube Music

Das openssl Parameter sind:

  • enc -aes-256-cbc: Der Codierungstyp. Wir verwenden die Advanced Encryption Standard 256-Bit-Schlüsselchiffre mit Cipher-Block-Chaining.
  • -md sha512: Der Nachrichten-Digest (Hash)-Typ. Wir verwenden den kryptografischen Algorithmus SHA512.
  • -ein: Das sagt openssl um eine Base-64-Codierung nach der Verschlüsselungsphase und vor der Entschlüsselungsphase anzuwenden.
  • -pbkdf2: Die Verwendung von Password-Based Key Derivation Function 2 (PBKDF2) macht es für einen Brute-Force-Angriff viel schwieriger, Ihr Passwort zu erraten. PBKDF2 erfordert viele Berechnungen, um die Verschlüsselung durchzuführen. Ein Angreifer müsste all diese Berechnungen replizieren.
  • -Iter 100000: Legt die Anzahl der Berechnungen fest, die PBKDF2 verwendet.
  • -Salz: Die Verwendung eines zufällig angewendeten Salt-Werts macht die verschlüsselte Ausgabe jedes Mal anders, selbst wenn der Klartext gleich ist.
  • -pass pass:’wähle.dein.passwort‘: Das Passwort, das wir verwenden müssen, um das verschlüsselte Remote-Passwort zu entschlüsseln. Ersatz pick.your.password mit einem robusten Passwort Ihrer Wahl.

Die verschlüsselte Version unseres rusty!herring.pitshaft Passwort wird in das Terminalfenster geschrieben.

Verschlüsseltes Passwort in das Terminalfenster geschrieben

Um dies zu entschlüsseln, müssen wir diese verschlüsselte Zeichenfolge an pass übergeben openssl mit den gleichen Parametern, die wir zum Verschlüsseln verwendet haben, aber das Hinzufügen von -d (entschlüsseln) Option.

echo U2FsdGVkX19iiiRNhEsG+wm/uKjtZJwnYOpjzPhyrDKYZH5lVZrpIgo1S0goZU46 | openssl enc -aes-256-cbc -md sha512 -a -d -pbkdf2 -iter 100000 -salt -pass pass:'pick.your.password'

Die Zeichenfolge wird entschlüsselt und unser Originaltext – das Passwort für das Remote-Benutzerkonto – wird in das Terminalfenster geschrieben.

Entschlüsseltes Passwort in das Terminalfenster geschrieben

Das beweist, dass wir unser Passwort für das Remote-Benutzerkonto sicher verschlüsseln können. Wir können es auch entschlüsseln, wenn wir es benötigen, indem wir das Passwort verwenden, das wir in der Verschlüsselungsphase bereitgestellt haben.

Aber verbessert das tatsächlich unsere Situation? Wenn wir das Verschlüsselungskennwort zum Entschlüsseln des Remote-Kontokennworts benötigen, muss das Entschlüsselungskennwort dann doch im Skript enthalten sein? Nun ja, das tut es. Das verschlüsselte Kennwort für das Remote-Benutzerkonto wird jedoch in einer anderen, versteckten Datei gespeichert. Die Berechtigungen für die Datei verhindern, dass jemand außer Ihnen – und natürlich der Root-Benutzer des Systems – darauf zugreifen kann.

Um die Ausgabe des Verschlüsselungsbefehls an eine Datei zu senden, können wir die Umleitung verwenden. Die Datei heißt „.secret_vault.txt“. Wir haben das Verschlüsselungskennwort in etwas Robusteres geändert.

echo 'rusty!herring.pitshaft' | openssl enc -aes-256-cbc -md sha512 -a -pbkdf2 -iter 100000 -salt -pass pass:'secret#vault!password' > .secret_vault.txt

Es passiert nichts Sichtbares, aber das Passwort wird verschlüsselt und an die Datei „.secret_vault.txt“ gesendet.

Wir können testen, ob es funktioniert hat, indem wir das Passwort in der versteckten Datei entschlüsseln. Beachten Sie, dass wir verwenden cat nicht hier echo.

cat .secret_vault.txt | openssl enc -aes-256-cbc -md sha512 -a -d -pbkdf2 -iter 100000 -salt -pass pass:'secret#vault!password'

Das Kennwort wurde erfolgreich aus den Daten in der Datei entschlüsselt. Wir werden verwenden chmod um die Berechtigungen für diese Datei zu ändern, damit niemand sonst darauf zugreifen kann.

chmod 600 .secret_vault.txt
ls -l .secret_vault.txt

Verwandt :  So verwenden Sie benutzerdefinierte Hintergründe in Google Meet

Die Verwendung einer Berechtigungsmaske von 600 entfernt jeglichen Zugriff für andere als den Dateibesitzer. Wir können jetzt mit dem Schreiben unseres Drehbuchs fortfahren.

VERBUNDEN: So verwenden Sie den chmod-Befehl unter Linux

Verwenden von OpenSSL in einem Skript

Unser Skript ist ziemlich einfach:

#!/bin/bash

# name of the remote account
REMOTE_USER=geek

# password for the remote account
REMOTE_PASSWD=$(cat .secret_vault.txt | openssl enc -aes-256-cbc -md sha512 -a -d -pbkdf2 -iter 100000 -salt -pass pass:'secret#vault!password')

# remote computer
REMOTE_LINUX=fedora-34.local

# connect to the remote computer and put a timestamp in a file called script.log
sshpass -p $REMOTE_PASSWD ssh -T [email protected]$REMOTE_LINUX << _remote_commands
echo $USER "-" $(date) >> /home/$REMOTE_USER/script.log
_remote_commands
  • Wir setzen eine Variable namens REMOTE_USER zu „Geek“.
  • Wir setzen dann eine Variable namens REMOTE_PASSWD auf den Wert des entschlüsselten Passworts, das aus der Datei „.secret_vault.txt“ gezogen wurde, mit dem gleichen Befehl wie vorhin.
  • Der Standort des entfernten Computers wird in einer Variablen namens . gespeichert REMOTE_LINUX.

Mit diesen Informationen können wir die ssh Befehl, um eine Verbindung zum Remote-Computer herzustellen.

  • Das sshpass Befehl ist der erste Befehl in der Verbindungszeile. Wir verwenden es mit dem -p (Passwort)-Option. Damit können wir das Passwort angeben, das an die to gesendet werden soll ssh Befehl.
  • Wir benutzen das -T (Pseudo-Terminal-Zuweisung deaktivieren) Option mit ssh weil uns auf dem Remote-Computer kein Pseudo-TTY zugewiesen werden muss.
So verwenden Sie "Hier-Dokumente" in Bash unter Linux

VERBUNDENSo verwenden Sie „Hier-Dokumente“ in Bash unter Linux

Wir verwenden eine kurze hier Dokument um einen Befehl an den Remote-Computer zu übergeben. Alles zwischen den beiden _remote_commands strings wird als Anweisungen an die Benutzersitzung auf dem Remote-Computer gesendet – in diesem Fall handelt es sich um eine einzelne Zeile Bash-Skript.

Der an den Remote-Computer gesendete Befehl protokolliert einfach den Namen des Benutzerkontos und einen Zeitstempel in einer Datei namens „script.log“.

Kopieren Sie das Skript, fügen Sie es in einen Editor ein und speichern Sie es in einer Datei namens „go-remote.sh“. Denken Sie daran, die Details so zu ändern, dass sie die Adresse Ihres eigenen Remote-Computers, das Remote-Benutzerkonto und das Remote-Kontokennwort widerspiegeln.

Benutzen chmod um das Skript ausführbar zu machen.

chmod +x go-remote.sh

Es bleibt nur das Ausprobieren. Starten wir unser Skript.

./go-remote.sh

Da unser Skript eine minimalistische Vorlage für ein unbeaufsichtigtes Skript ist, erfolgt keine Ausgabe an das Terminal. Wenn wir jedoch die Datei „script.log“ auf dem Fedora-Computer überprüfen, können wir sehen, dass Remote-Verbindungen erfolgreich hergestellt wurden und dass die Datei „script.log“ mit Zeitstempeln aktualisiert wurde.

cat script.log

Ihr Passwort ist privat

Das Kennwort Ihres Remote-Kontos wird nicht im Skript aufgezeichnet.

Und obwohl das Entschlüsselungspasswort ist, im Skript kann niemand sonst auf Ihre Datei „.secret_vault.txt“ zugreifen, um sie zu entschlüsseln und das Passwort des Remote-Kontos abzurufen.

Moyens Staff
Moyens I/O-Personal. motivierte Sie und gab Ratschläge zu Technologie, persönlicher Entwicklung, Lebensstil und Strategien, die Ihnen helfen werden.