Ist es möglich, Passwörter für ein Shell-Skript zu übergeben?

11

Lange Zeit suche ich danach, ich würde gerne wissen, ob es möglich ist, Passwörter in einem Shell-Skript zu übergeben? Viele der Antworten kamen mit Nein zurück. Kürzlich habe ich einen Artikel gelesen, der besagt, wie man Passwörter in einem Shell-Skript übergibt. Ich habe das versucht, aber es scheint nicht zu funktionieren. Dies ist der Link . Kann jemand auschecken und zurückkehren? Bitte sagen Sie mir auch, dass es eine Möglichkeit gibt, Passwörter in einem Shell-Skript zu übergeben. Wenn keine pls sagen mir, wie Linux die Eingabe für das Passwort bekommt?

karthick87
quelle

Antworten:

12

Mit "Passwörter eingeben" meinen Sie wahrscheinlich die Eingabe von Daten, ohne für den Benutzer sichtbar zu sein.

(von geirha vorgeschlagen) Wenn Sie bash verwenden, können Sie die -sOption verwenden, um zu verhindern, dass eingegebene Zeichen angezeigt werden:

read -p "Password please: " -s pass

Alternativ können Sie das Verhalten des Terminals ändern, um eingegebene Zeichen mit stty -echo(deaktivieren echo) auszublenden . Nachdem Sie das Kennwort mit der readin eine Variable integrierten Shell gelesen haben (im folgenden Beispiel $pass), schalten Sie es mit wieder ein stty echo. Da die neue Zeile von Enterausgeblendet ist, müssen Sie eine neue Zeile drucken, um die zukünftige Ausgabe in einer neuen Zeile zu erhalten.

stty -echo
read -p "Password please: " pass
stty echo
printf '\n'

readund printfsind Shell-Einbauten. sttywird von dem coreutilsPaket bereitgestellt , das standardmäßig installiert ist. Das bedeutet, dass dieses Snippet sehr portabel ist.

Hinweis: Die -pOption ist nicht Standard, sondern von bash. Wenn Sie eine Eingabeaufforderung in anderen Shells anzeigen müssen, verwenden Sie:

printf "Password please: "
stty -echo
read pass
stty echo
printf '\n'

Verweise:

Lekensteyn
quelle
Ich möchte nur das Root-Passwort des Remote-Systems im Skript angeben. Ist es in deinem Fall möglich?
karthick87
@ karthick87: nein, dieses Skript erfasst nur die Daten, die der Benutzer interaktiv eingibt. Wenn Sie Root-Passwörter in Skripten einfügen möchten, warum ziehen Sie keine schlüsselbasierten Anmeldungen in Betracht?
Lekensteyn
1
Bashs Lesen hat auch die Option, das Echo während des Lesens in der Zeile zu deaktivieren. Siehe help '\read'.
Geirha
In ist zshes erreichbar durch read -s 'pw?Prompt text', wo pwist eine Variable, wo Passwort platziert wird und -sist ein Flag, um Eingaben zu verbergen.
Baldrs
2

An welches Programm möchten Sie ein Passwort übergeben?

Das Skript auf dem Link funktioniert für mich. Beachten Sie, dass es sich nicht um ein Shell-Skript handelt, sondern um ein Expect-Skript (das Paket expectmuss installiert werden`). Die Verwendung von Expect ist eine gängige Methode zur Automatisierung textbasierter interaktiver Programme.

Nicht interaktive sshAnmeldungen werden häufig mithilfe der schlüsselbasierten Authentifizierung mit einer leeren Passphrase durchgeführt.

Einige andere Programme (wie sudo) haben Optionen zum Lesen eines Passworts von stdin.

Das Bereitstellen eines Kennworts als Befehlszeilenoption ist häufig ein Sicherheitsproblem, da auf den meisten Systemen jeder Benutzer die Prozesse anderer Benutzer einschließlich der Befehlszeilenargumente mit einfachen Tools wie z ps.

Florian Diesch
quelle
Ich möchte nur ein Passwort an das SSH-Programm übergeben.
karthick87
Vielleicht funktioniert die Schlüsselauthentifizierung für Sie: Verwenden Sie diese Option ssh-keygen, um einen Authentifizierungsschlüssel zu erstellen (drücken Sie einfach die Eingabetaste, wenn Sie nach einer ssh-copy-idPassphrase gefragt werden) und kopieren Sie ihn mit .Wenn die Schlüsselauthentifizierung für sshd aktiviert ist (standardmäßig), wird ssh dann Fragen Sie nicht nach einem Passwort.
Florian Diesch
1

Ein Skript sollte niemals wirklich mit Passwörtern umgehen. Lassen Sie die Anwendung, die das Kennwort benötigt, selbst danach fragen, oder suchen Sie ein besseres Mittel zur Authentifizierung bei der Anwendung, falls dies nicht möglich ist. Bitte lesen Sie http://mywiki.wooledge.org/BashFAQ/069

Geirha
quelle
0

Es gibt eine Möglichkeit, Kennwörter in einem Bash-Skript zu speichern, aber Sie müssen das Skript verschlüsseln, damit niemand es tatsächlich lesen oder einen Debugger ausführen kann, um genau zu sehen, was es tut. Um einen Bash / Shell - Skript zu verschlüsseln und hat es tatsächlich ausführbar sein, versuchen Sie das Kopieren und Einfügen hier

Auf der obigen Seite müssen Sie lediglich Ihr Skript einreichen (Sie können zunächst ein Beispielskript einreichen, um sich keine Sorgen zu machen). Eine Zip-Datei wird für Sie generiert. Klicken Sie mit der rechten Maustaste auf den Download-Link und kopieren Sie die angegebene URL. Gehen Sie dann zu Ihrer UNIX-Box und führen Sie die folgenden Schritte aus.

Installation:

   wget link-to-the-zip-file
   unzip the-newly-downloaded-zip-file
   cd /tmp/KingLazySHIELD
   ./install.sh  /var/tmp/KINGLAZY/SHIELDX-(your-script-name) /home/(your-username)  -force 

Der obige Installationsbefehl bewirkt Folgendes für Sie:

  1. Das verschlüsselte Skript wird im Verzeichnis installiert /var/tmp/KINGLAZY/SHIELDX-(your-script-name).

  2. Es wird ein Link zu diesem verschlüsselten Skript in das Verzeichnis eingefügt, das Sie als Ersatz angeben. Auf /home/(your-username)diese Weise können Sie problemlos auf das Skript zugreifen, ohne den absoluten Pfad eingeben zu müssen.

  3. Stellt sicher, dass niemand das Skript ändern kann - Alle Versuche, das verschlüsselte Skript zu ändern, machen es funktionsunfähig ... bis diese Versuche gestoppt oder entfernt werden.

  4. Stellt sicher, dass absolut niemand Kopien davon erstellen kann. Niemand kann Ihr Skript an einen abgelegenen Ort kopieren und versuchen, damit herumzuschrauben, um zu sehen, wie es funktioniert. Alle Kopien des Skripts müssen Links zu dem ursprünglichen Speicherort sein, den Sie bei der Installation angegeben haben.

HINWEIS:

Ich glaube nicht, dass dies für interaktive Skripte funktioniert , die den Benutzer zur Eingabe einer Antwort auffordern. Die Werte sollten fest im Skript codiert sein. Die Verschlüsselung stellt sicher, dass niemand diese Werte tatsächlich sehen kann, sodass Sie sich darüber keine Sorgen machen müssen.

SimplifiedWorkings
quelle
-1

Sie können einfach so etwas tun.

# echo -e "password_here\npassword_here" | su user

Quelle

fromnaboo
quelle