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 -sarg for readist nicht POSIX und daher nicht überall verfügbar. Daher wird er im Folgenden nicht verwendet. Wir werden stty -echound stty echostattdessen verwenden.
HINWEIS: Alle unten aufgeführten Bash-Variablen können stattdessen in einer Funktion als lokale deklariert werden, anstatt sie zu deaktivieren.
HINWEIS: perlist ziemlich allgemein auf allen Systemen verfügbar Ich habe versucht , weil es eine Abhängigkeit für viele Dinge zu sein, während rubyund pythonnicht ist, so verwendet perlhier. Wenn Sie können garantieren , ruby/ pythonwo Sie dies tun, können Sie die ersetzen perlBefehl mit ihren Äquivalent.
HINWEIS: Getestet in bash3.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 echoist 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 echoist 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