Đây là RẤT NHIỀU so với OP yêu cầu, nhưng vì đây là kết quả hàng đầu để chuyển mật khẩu an toàn đến curl
, tôi đang thêm các giải pháp này vào đây cho những người khác đến đây để tìm kiếm.
LƯU Ý: -s
arg cho read
lệnh không phải là POSIX và do đó không có sẵn ở mọi nơi, vì vậy nó sẽ không được sử dụng bên dưới. Chúng tôi sẽ sử dụng stty -echo
và stty echo
thay vào đó.
LƯU Ý: Thay vào đó, tất cả các biến bash bên dưới có thể được khai báo là cục bộ nếu trong một hàm, thay vì bỏ đặt.
LƯU Ý: perl
thường khá khả dụng trên tất cả các hệ thống mà tôi đã thử do nó phụ thuộc vào nhiều thứ, trong khi ruby
và python
không, vì vậy sử dụng perl
ở đây. Nếu bạn có thể đảm bảo ruby
/ python
nơi bạn đang làm điều này, bạn có thể thay thế perl
lệnh bằng tương đương của chúng.
LƯU Ý: Đã thử nghiệm trong bash
3.2.57 trên macOS 10.14.4. Một số bản dịch nhỏ có thể được yêu cầu cho các shell / cài đặt khác.
An toàn nhắc người dùng nhập mật khẩu (có thể sử dụng lại) để chuyển sang cuộn tròn. Đặc biệt hữu ích nếu bạn cần gọi curl nhiều lần.
Đối với hệ vỏ hiện đại, nơi tích echo
hợp (kiểm tra qua 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
Đối với các vỏ cũ hơn, nơi echo
giống như /bin/echo
(nơi mà bất kỳ âm vang nào có thể được nhìn thấy trong danh sách quy trình):
PHIÊN BẢN NÀY KHÔNG THỂ SỬ DỤNG PASSWORD , thay vào đó, hãy xem phía dưới.
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
Nếu bạn tình cờ cần lưu trữ mật khẩu tạm thời vào một tệp, hãy sử dụng lại nó cho nhiều lệnh trước khi xóa nó (giả sử vì bạn đang sử dụng các hàm để sử dụng lại mã và không muốn lặp lại mã và không thể lặp lại mã truyền giá trị xung quanh thông qua tiếng vang). (Vâng, đây là một chút giả định trong hình thức này không phải là chức năng trong các thư viện khác nhau; tôi đã cố gắng giảm chúng xuống mã tối thiểu cần thiết để hiển thị nó.)
Khi echo được tích hợp sẵn (điều này đặc biệt được tạo ra, vì echo là một tích hợp, nhưng được cung cấp cho sự hoàn chỉnh):
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
Khi tiếng vang là một cái gì đó như /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