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毎回パスワードの入力を求められます。

おすすめ記事