Nemo 작업 오류: sudo: tty가 존재하지 않으며 Askpass 프로그램이 지정되지 않았습니다.

Nemo 작업 오류: sudo: tty가 존재하지 않으며 Askpass 프로그램이 지정되지 않았습니다.

내 컴퓨터에 공유를 마운트하기 위해 다음 bash 스크립트가 있습니다.

#!/bin/bash
BA_LAST_OCTET=144
BA_IP=$(ip route get 8.8.8.8 | awk 'NR==1 {print $NF}' | awk -F'.' '{print $1,$2,$3"."}' OFS='.')$BA_LAST_OCTET
PROMPT="Sudo password: "

CAN_I_RUN_SUDO=$(sudo -n uptime 2>&1|grep "load"|wc -l)
if [ ${CAN_I_RUN_SUDO} -le 0 ]
then
    . getpass.sh $1 

    echo $PASSWORD | sudo -S : >/dev/null 2>&1
fi
OUTPUT=$(sudo mount.cifs //$BA_IP/huginn/ /mnt/huginn/ -o username=fileshare,password="",rw,file_mode=0777,dir_mode=0777 2>&1)
if [ -z "$OUTPUT" ]; then
    HUGINN="Huginn... Mounted."
else

    HUGINN="Huginn... Error.\n"$OUTPUT
fi
OUTPUT=$(sudo mount.cifs //$BA_IP/muninn/  /mnt/muninn/ -o username=fileshare,password="",rw,file_mode=0777,dir_mode=0777 2>&1)
if [ -z "$OUTPUT" ]; then
    MUNINN="Muninn... Mounted."
else

    MUNINN="Muninn... Error.\n"$OUTPUT
fi
MSG=$HUGINN"\n"$MUNINN"\nFinalized."
if [[ $1 == "--gui" ]] ; then
    zenity --info --title="Blackarmor" --text="$MSG"  2>/dev/null
else
    echo -e  "Mounting  Blackarmor shares... \n\n"$MSG
fi

명령줄에서 매우 잘 실행됩니다. 하지만 Nemo Action에서 사용하려고 하면 다음 메시지가 표시됩니다.

Huginn... Error.
sudo: no tty present and no askpass program specified
Muninn... Error.
sudo: no tty present and no askpass program specified
Finalized.

. getpass.shGUI나 명령줄에서 비밀번호를 가져와서 PASSWORD var에 넣으세요. Nemo Action에서도 잘 작동합니다(테스트했습니다).

Nemo 액션은 다음과 같습니다.

[Nemo Action]
Active=true
Name=Mount Blackarmor share
Exec=/bin/bash /usr/bin/ba --gui
Selection=Any
Extensions=any;

이 문제를 어떻게 해결할 수 있는지 아는 사람 있나요?

또한 더 나은 방식으로 실행하는 방법에 대한 제안에도 열려 있습니다. "터미널에서 실행" 옵션을 확인하지 않고 이 스크립트를 가리키는 실행 프로그램을 데스크탑에 생성하려고 하면 동일한 문제가 발생합니다.

편집하다

@meuh가 제안한 대로 다음과 같이 변경해 보았습니다.

. getpass.sh $1 

echo $PASSWORD | sudo -S : >/dev/null 2>&1

이와 관련하여:

 #. getpass.sh $1

 SUDO_ASKPASS=/usr/bin/ssh-askpass sudo -A : >/dev/null 2>&1

그러나 그것은 똑같은 메시지를 보여줍니다. ssh-askpass는 x11-ssh-askpass의 Ubuntu/Mint 버전입니다(저는 Mint를 사용합니다). "Launch in Terminal"을 선택하면 런처에서 작동한다는 점을 명심하세요. 하지만 뒤에 보이는 큰 창이 정말 마음에 안들고, 니모액션으로도 작동하지 않아서 더 좋을 것 같아요.

답변1

자신만의 비밀번호 가져오기 명령을 작성하는 대신 Fedora 시스템에 있는 동일한 이름의 패키지에 있는 명령 sudo과 같은 기존 명령을 실행하도록 요청할 수 있습니다 . x11-ssh-askpass당신은 말합니까?

SUDO_ASKPASS=/usr/libexec/openssh/x11-ssh-askpass sudo -A somecommand

비밀번호를 입력할 수 있는 그래픽 사용자 인터페이스가 나타납니다.

sudo또는 sudoers 파일을 편집하여 보안을 낮추고 tty 없이 명령이 실행되도록 허용할 수 있습니다 sudo visudo /etc/sudoers(참고: 필요한 경우 복구할 수 있도록 루트 로그인을 어딘가에 남겨 두십시오).

Defaults:myname !requiretty

귀하의 사용자 이름으로내 이름.


tty가 필요한 경우 script다음과 같은 명령을 실행할 때 tty를 제공하는 프로그램을 사용할 수 있습니다.

script <<<'SUDO_ASKPASS=/... sudo -A mycommand'

전체 스크립트를 로 묶어야 할 수도 있습니다 script. 그렇지 않으면 매번 새로운 tty를 얻게 되며 sudo매번 비밀번호를 묻는 메시지가 표시됩니다.

관련 정보