นี่คือมากกว่า OP ที่ขอมา แต่เนื่องจากนี่เป็นผลลัพธ์ที่ดีที่สุดสำหรับการส่งผ่านรหัสผ่านอย่างปลอดภัย curl
ฉันจึงเพิ่มโซลูชันเหล่านี้ที่นี่เพื่อผู้อื่นที่มาถึงที่นี่เพื่อค้นหาสิ่งนั้น
หมายเหตุ: -s
หาเรื่องสำหรับread
คำสั่งไม่ใช่ POSIX และไม่สามารถใช้งานได้ทุกที่ดังนั้นจะไม่ถูกใช้ด้านล่าง เราจะใช้stty -echo
และstty echo
แทน
หมายเหตุ: ตัวแปรทุบตีด้านล่างทั้งหมดสามารถประกาศเป็นคนท้องถิ่นได้หากอยู่ในฟังก์ชันแทนที่จะยกเลิกการตั้งค่า
หมายเหตุ: perl
โดยทั่วไปแล้วค่อนข้างใช้ได้ในทุกระบบที่ฉันได้ลองเพราะมันเป็นการพึ่งพาหลายสิ่งในขณะที่ruby
และpython
ไม่ใช้ดังนั้นจึงใช้perl
ที่นี่ หากคุณสามารถรับประกันruby
/ python
คุณกำลังทำสิ่งนี้อยู่คุณสามารถแทนที่perl
คำสั่งด้วยสิ่งที่เทียบเท่าได้
หมายเหตุ: ทดสอบในbash
3.2.57 บน macOS 10.14.4 อาจจำเป็นต้องใช้การแปลเล็กน้อยสำหรับเชลล์ / ติดตั้งอื่น ๆ
ขอให้ผู้ใช้รหัสผ่าน (นำมาใช้ใหม่) อย่างปลอดภัยส่งผ่านไปยัง curl มีประโยชน์อย่างยิ่งหากคุณจำเป็นต้องโทรหาขดหลาย ๆ ครั้ง
สำหรับกระสุนสมัยใหม่ที่echo
มีในตัว (ตรวจสอบผ่าน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
สำหรับกระสุนเก่าที่echo
มีลักษณะคล้าย/bin/echo
(ที่ใดก็ตามที่สามารถสะท้อนได้ในรายการกระบวนการ):
รุ่นนี้ไม่สามารถนำรหัสผ่านกลับมาใช้ใหม่ได้ให้ลดระดับลงแทน
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
หากคุณจำเป็นต้องจัดเก็บรหัสผ่านไว้ชั่วคราวในไฟล์เพื่อนำมาใช้ใหม่สำหรับคำสั่งหลาย ๆ คำสั่งก่อนที่จะล้างมัน (พูดเพราะคุณกำลังใช้ฟังก์ชั่นสำหรับการใช้รหัสซ้ำและไม่ต้องการทำซ้ำรหัสและไม่สามารถ ส่งค่าผ่านทาง 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'
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
เมื่อเสียงสะท้อนเป็นสิ่งที่ชอบ/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