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 -s
için arg read
POSIX değildir ve bu nedenle her yerde kullanılamaz, bu nedenle aşağıda kullanılmayacaktır. Biz kullanacağız stty -echo
ve stty echo
bunun yerine.
NOT: Aşağıdaki tüm bash değişkenleri bunun yerine bir işlev içindeyse ayar yerine yerel olarak bildirilebilir.
NOT: perl
oysa nedeniyle birçok şeyler için bir bağımlılık olmasının denedim tüm sistemlerde oldukça genel kullanıma ruby
ve python
böylece kullanarak, değil perl
burada. Bunu garanti ediyorsanız ruby
/ python
nerede yaptığınız varsa, perl
komutu eşdeğerleriyle değiştirebilirsiniz.
NOT: bash
macOS 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.
echo
Dahili 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 echo
olduğ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