もう一度尋ねずにsudoパスワードを入力/確認する方法は?

もう一度尋ねずにsudoパスワードを入力/確認する方法は?

Bashスクリプト用にsudoまだパスワードを入力していない場合(およびsudoスクリプトを実行するときにユーザーに権限がない場合)、ユーザーにパスワードの入力を求める必要があります。

まず、Passwordbogを使用してパスワードを要求してから、dialogsudoのように入力します。

SUDOPWD=$(dialog --title "Password" --clear --passwordbox "Enter your sudo password" 10 30  2>&1 > /dev/tty)

echo ${SUDOPWD} | sudo -Sn -v

しかし残念ながらこれはうまくいきません!明らかに-S(でパスワードを読むstdin)と-n(非対話型sudo)は互換性がありません!存在する場合、-n入力したパスワードはsudo無視されます(したがって特権の昇格は発生しません)。パスワードがない場合、sudo間違ったパスワードを入力すると、再入力するように求められます。

sudoパスワードが間違っているときに再度尋ねずにパスワードを確認する方法はありますか?

必然的に、誰かが車輪を再発明するのではなく、提供された施設を使用する必要があるか、パイプを介してパスワードを提供するとセキュリティsudoリスクが発生することを指摘するでしょう。sudo私はこれらの要素を知っており、可能であれば上記の作業を続けたいと思います。また、コマンドを入力したり/etc/sudoers、再コンパイルしたりsudo(スクリプトがある程度移植可能でなければならないため)、sudo通常パスワードプロンプトを無効にする(このスクリプトでのみ)必要はありません。

Ubuntu 16.04でこの問題に対処しています。

ベストアンサー1

ユーザーが認証されたことを確認できます。sudo -vn 2>/dev/null

そうでない場合は、次のコマンドを使用してパスワードを要求しますsudo

printf '%s\n' "$(dialog --output-fd 1 --passwordbox "Enter password:" 10 30)" | \
sudo -Svp ''
  • --output-fd 1dialog出力を知らせるSTDOUT
  • printf入力に改行文字を追加するために使用されます。これは必須です。sudo -S
  • sudo -p ''パスワードプロンプト情報として使用して''非表示にします。

出力を変数に保存する場合は、printf '%s\n' "${SUDOPWD}"次のことができます。

おすすめ記事