Dies ist VIEL mehr als das OP verlangt, aber da dies ein Top-Ergebnis für die sichere Weitergabe von Passwörtern ist curl
, füge ich diese Lösungen hier für andere hinzu, die hier ankommen und danach suchen.
HINWEIS: Der Befehl -s
arg for read
ist nicht POSIX und daher nicht überall verfügbar. Daher wird er im Folgenden nicht verwendet. Wir werden stty -echo
und stty echo
stattdessen verwenden.
HINWEIS: Alle unten aufgeführten Bash-Variablen können stattdessen in einer Funktion als lokale deklariert werden, anstatt sie zu deaktivieren.
HINWEIS: perl
ist ziemlich allgemein auf allen Systemen verfügbar Ich habe versucht , weil es eine Abhängigkeit für viele Dinge zu sein, während ruby
und python
nicht ist, so verwendet perl
hier. Wenn Sie können garantieren , ruby
/ python
wo Sie dies tun, können Sie die ersetzen perl
Befehl mit ihren Äquivalent.
HINWEIS: Getestet in bash
3.2.57 unter macOS 10.14.4. Für andere Shells / Installationen ist möglicherweise eine kleine Übersetzung erforderlich.
Fordern Sie einen Benutzer sicher auf, ein (wiederverwendbares) Kennwort an curl zu übergeben. Besonders nützlich, wenn Sie Curl mehrmals aufrufen müssen.
Wo echo
ist für moderne Muscheln ein eingebauter (Check via which echo
):
url='https://example.com'
printf "Username: "
read username
printf "Password: "
stty -echo # disables echoing user input, POSIX equivalent for 'read -s'
read pass
printf "\n" # we need to move the line ahead
stty echo # re-enable echoing user input
echo ${pass} | sed -e "s/^/-u ${username}:/" | curl --url "${url}" -K-
unset username
unset pass
Bei älteren Shells, wo echo
ist so etwas /bin/echo
(wo was auch immer es in der Prozessliste
wiedergibt ): DIESE VERSION KANN DAS PASSWORT NICHT WIEDERVERWENDEN , siehe stattdessen weiter unten.
url='https://example.com'
printf "Username: "
read username
printf "Password: "
stty -echo # disables echoing user input, POSIX equivalent for 'read -s'
perl -e '
my $val=<STDIN>;
chomp $val;
print STDERR "\n"; # we need to move the line ahead, but not send a newline down the pipe
print $val;
' | sed -e "s/^/-u ${username}:/" | curl --url "${url}" -K-
stty echo # re-enable echoing user input
unset username
Wenn Sie das Kennwort vorübergehend in einer Datei speichern müssen, um es vor dem Löschen für mehrere Befehle wiederzuverwenden (z. B. weil Sie Funktionen zur Wiederverwendung von Code verwenden und den Code nicht wiederholen möchten und nicht können Geben Sie den Wert per Echo weiter. (Ja, diese sind in dieser Form etwas erfunden und funktionieren nicht in verschiedenen Bibliotheken. Ich habe versucht, sie auf den Mindestcode zu reduzieren, der zum Anzeigen erforderlich ist.)
Wenn Echo eingebaut ist (dies ist besonders erfunden, da Echo eingebaut ist, aber der Vollständigkeit halber bereitgestellt wird):
url='https://example.com'
filepath="$(mktemp)" # random path, only readable by current user
printf "Username: "
read username
printf "Password: "
stty -echo # disables echoing user input, POSIX equivalent for 'read -s'
read pass
echo "${pass}" > "${filepath}"
unset pass
printf "\n" # we need to move the line ahead
stty echo # re-enable echoing user input
cat "${filepath}" | sed -e "s/^/-u ${username}:/" | curl --url "${url}" -K-
rm "${filepath}" # don't forget to delete the file when done!!
unset username
Wenn Echo so etwas wie /bin/echo
:
url='https://example.com'
filepath="$(mktemp)" # random path, only readable by current user
printf "Username: "
read username
printf "Password: "
stty -echo # disables echoing user input, POSIX equivalent for 'read -s'
$(perl -e '
my $val=<STDIN>;
chomp $val;
open(my $fh, ">", $ARGV[0]) or die "Could not open file \"$ARGV[0]\" $\!";
print $fh $val;
close $fh;
' "$filepath")
printf "\n" # we need to move the line ahead
stty echo # re-enable echoing user input
cat "${filepath}" | sed -e "s/^/-u ${username}:/" | curl --url "${url}" -K-
rm "${filepath}" # don't forget to delete the file when done!!
unset username