Bashスクリプト用にsudo
まだパスワードを入力していない場合(およびsudo
スクリプトを実行するときにユーザーに権限がない場合)、ユーザーにパスワードの入力を求める必要があります。
まず、Passwordbogを使用してパスワードを要求してから、dialog
次sudo
のように入力します。
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 1
dialog
出力を知らせるSTDOUT
printf
入力に改行文字を追加するために使用されます。これは必須です。sudo -S
sudo -p ''
パスワードプロンプト情報として使用して''
非表示にします。
出力を変数に保存する場合は、printf '%s\n' "${SUDOPWD}"
次のことができます。