Bu OP'nin istediğinden ÇOK daha fazla, ancak bu şifreleri güvenli bir şekilde geçirmek için en iyi sonuç olduğu için curl, bu çözümleri buraya arayanlar için buraya ekliyorum.
NOT: komut -siçin arg readPOSIX değildir ve bu nedenle her yerde kullanılamaz, bu nedenle aşağıda kullanılmayacaktır. Biz kullanacağız stty -echove stty echobunun yerine.
NOT: Aşağıdaki tüm bash değişkenleri bunun yerine bir işlev içindeyse ayar yerine yerel olarak bildirilebilir.
NOT: perloysa nedeniyle birçok şeyler için bir bağımlılık olmasının denedim tüm sistemlerde oldukça genel kullanıma rubyve pythonböylece kullanarak, değil perlburada. Bunu garanti ediyorsanız ruby/ pythonnerede yaptığınız varsa, perlkomutu eşdeğerleriyle değiştirebilirsiniz.
NOT: bashmacOS 10.14.4'te 3.2.57'de test edilmiştir . Diğer mermiler / kurulumlar için bazı küçük çeviriler gerekebilir.
Bir kullanıcıdan güvenli bir şekilde (yeniden kullanılabilir) bir parolanın kıvrılmasına geçmesini isteyin. Kıvrımı birden çok kez çağırmanız gerektiğinde özellikle kullanışlıdır.
echoDahili mermiler için modern mermiler için (üzerinden kontrol edin 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
Daha eski mermiler için, nerede echoolduğu gibi /bin/echo(işlem listesinde yankı ne olursa olsun):
BU SÜRÜM ŞİFREYİ TEKRAR KULLANAMAZ , bunun yerine aşağıya bakın.
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
Parolayı geçici olarak bir dosyaya depolamanız gerekiyorsa, temizlemeden önce birden çok komut için yeniden kullanmak için (kodu yeniden kullanmak için işlevleri kullandığınız ve kodu tekrarlamak istemediğiniz için değeri yankı yoluyla iletin). (Evet, bu formda farklı kütüphanelerdeki işlevler olmamak için biraz kıvrımlı; Onları göstermek için gereken minimum koda indirgeme çalıştım.)
Yankı yerleşik olduğunda (bu özellikle anlaşılır, çünkü yankı yerleşiktir, ancak bütünlük için sağlanmıştır):
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
Eko şöyle bir şey olduğunda /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