내 컴퓨터에 공유를 마운트하기 위해 다음 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.sh
GUI나 명령줄에서 비밀번호를 가져와서 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
매번 비밀번호를 묻는 메시지가 표시됩니다.