如何使用zenity,pv和dd将密码传递给sudo

时间:2019-05-31 09:52:27

标签: bash sudo dd zenity pv

我想让用户从Thunar或Dolphin内部将ISO写入USB随身碟。

为此,我创建了一个使用dd,pv和zenity的bash脚本。

当前,我在执行dd命令之前使用pkexec要求输入密码,但是pkexec窗口和zenity进度窗口都同时打开。我想先打开一个root密码窗口,然后再打开zenity进度窗口。

我先尝试以zenity要求输入密码,然后我将密码通过管道传递到sudo,但是无论我把“ echo $ PWD”放在哪里,密码都不会通过管道传递到sudo。

#!/bin/bash

TITLE='Zenity Progress Test'

PASSWORD=$(zenity --password \
                     --width=300 \
                     --title="$TITLE")
if [ ! -z "$PASSWORD" ]; then
    echo "Your password: $PASSWORD"
    dd if=/dev/zero of="$PWD/testfile1" bs=1M count=100
    pv -n testfile1 2> >(zenity --progress \
                                           --width=300 \
                                           --title="$TITLE" \
                                           --percentage=0 \
                                           --auto-close \
                                           --auto-kill) | echo "$PASSWORD" | sudo -S dd of="$PWD/testfile2" bs=64k oflag=dsync
    echo "$PASSWORD" | sudo -S rm "$PWD/testfile1" "$PWD/testfile2"
else
    echo 'No password provided'
    exit 1
fi

Zenity进度窗口仅闪烁一次,什么也没有传输,这很可能是因为密码未通过管道传送到sudo。

如果将“ echo $ PASSWORD | sudo -S”替换为“ pkexec”,则代码功能将同时打开pkexec窗口和zenity进度窗口。

关于如何解决这个难题的任何想法?

1 个答案:

答案 0 :(得分:0)

使用param -S从stdin中读取

$echo <password> | sudo -S <command>