다시 묻지 않고 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}"다음을 수행할 수 있습니다.

관련 정보