![dmenu에서 비밀번호 숨기기](https://linux55.com/image/143607/dmenu%EC%97%90%EC%84%9C%20%EB%B9%84%EB%B0%80%EB%B2%88%ED%98%B8%20%EC%88%A8%EA%B8%B0%EA%B8%B0.png)
나는 dmenu를 처음 사용합니다. sudo
dmenu 권한이 필요한 프로그램을 실행하려고 합니다 . 나는 팔로우했다이 링크. 그래서 내 폴더에는 다음과 같은 ./dpass
스크립트가 있습니다 .bin
#!/bin/bash
dmenu -p "$1" <&- && echo
나는 또한 다음 명령을 실행했습니다.
$ export SUDO_ASKPASS=/home/username/bin/dpass
bin
이제 다음과 같은 폴더가 있습니다 shutdown
.
#!/bin/bash
sudo -A shutdown -h now
dmenu를 통해 실행하려고 하면 비밀번호를 물어보는데, 문제는 비밀번호를 입력해도 비밀번호가 숨겨지지 않는다는 점입니다. 누구나 내 비밀번호를 볼 수 있기 때문에 이것이 정말 안전하지 않다고 생각합니다. dmenu에서 비밀번호를 숨기는 방법이 있나요?
답변1
&& echo
통화가 끝난 후 제거해 보세요 dmenu
.
#!/bin/bash
dmenu -p "$1" <&-
이렇게 하면 사용자 입력 에코가 비활성화됩니다 dmenu
. 이 방법은 다음 제목의 블로그 게시물에 설명되어 있습니다.d메뉴에서 비밀번호를 입력하세요.
$ cat dpass #! /bin/sh # shellcheck disable=2046 caller="$(ps -o comm= -p $(ps -o ppid= -p $$))" prompt="${1:-[$caller]}" promptfg=black promptbg=red hidden=white font="Liberation Sans-20:Bold" dmenu -p "$prompt" -fn "$font" \ -nf "$hidden" -nb "$hidden" -sf "$promptfg" -sb "$promptbg" <&-
- 매개변수가 전달되지 않으면 호출 애플리케이션에 프롬프트(빨간색 부분)가 설정됩니다. 따라서 사용자는 항상 일종의 프롬프트를 받게 됩니다.
&& echo
다른 비밀번호 처리기와 함께 작동하도록 후행 문을 제거합니다 .
답변2
에서 영감을 받다서킷브레이커팀, 나는 stprompt라는 스크립트를 작성했습니다.
#!/bin/bash
prompt="$1"
answer=$(st -o "-" -g 100x5 -c st-prompt sh -c "echo -n '$prompt: '; read -s ANSWER; echo \$ANSWER")
echo "${answer#*: }" | tr -d '\r'
스크립트는 사용자에게 메시지를 표시하고 입력을 숨긴 다음 응답을 출력합니다.
특정 사례의 경우 이 스크립트를 다음과 같이 사용할 수 있습니다.
sudopgm==$(echo "${options[@]}" | dmenu -i -p 'Programs that need sudo: ')
SUDO_ASKPASS=$(stprompt "sudo pass") sudo -A $sudopgm
stprompt
내 애플리케이션에서 이를 사용하는 방법에 대한 자세한 정보도트 파일 읽어보기, 그리고 내 예제 사용법dmenu_ibmicmd스크립트.
Fuseteam이 말했듯이 st는 터미널입니다. 원하는 단말기로 교체 가능합니다.
답변3
해결책은 dterm
다음과 같은 스크립트를 실행하는 것일 수 있습니다.
#!/bin/bash
command="$@";st -- $command
이렇게 하면 터미널을 실행하면 dterm sudo command
비밀번호를 입력하라는 팝업이 나타납니다.
추가 보너스로 dmenu를 통해 터미널 애플리케이션을 실행할 수도 있습니다.
ps st는 터미널이며 -e 또는 -- 인수를 허용하는 터미널로 대체될 수 있습니다.
pps는 dmenu를 통해 스크립트를 실행할 수 있다고 가정합니다.