7

我的目标是成功地将一个文件夹链接到 /opt/ 目录——这需要使用 sudo 运行。

我试过这个:

 system(sudo ln -s $$OUT_PWD/xampp /opt/lampp):message("You should manually link LAMPP")

但是从 qt-creator 构建它不会提示输入 sudo 密码,因此我无法让它链接文件夹。我在编译器输出中收到“错误的密码尝试...”错误。然后我用构建步骤尝试了这些:

make
sudo make install

看看它是否会在那里提示我,但它在make install步骤中失败并出现相同的错误,详细信息如下:

00:31:20: Starting: "/usr/bin/sudo" make install
sudo: no tty present and no askpass program specified
sudo: no tty present and no askpass program specified
Sorry, try again.
sudo: no tty present and no askpass program specified
sudo: no tty present and no askpass program specified
Sorry, try again.
sudo: no tty present and no askpass program specified
sudo: no tty present and no askpass program specified
Sorry, try again.
sudo: 3 incorrect password attempts
00:31:20: The process "/usr/bin/sudo" exited with code 1.

当我从终端system()使用时,qmake 脚本中的函数可以正常工作,因为它会在命令之前提示我;但为了快速测试的目的,我觉得在 Qt Creator 中使用 CTRL-B 构建也应该使用 sudo 命令......qmake && make && make installsudo ln...

有没有办法从 Qt Creator 中得到提示,或者解决这个问题?就像将 sudo 通行证存储在 Qt Creator 中(尽管它是有风险的)......或者也许让它在会提示我的终端上运行构建步骤?prompt()qmake 中的功能是否可以收集 sudo 密码?

欢迎任何建议...

4

4 回答 4

3

经过大量研究:

ssh-askpass Sudo Password | sudo -S bash ./script

就像一个魅力,它要求在一个单独的窗口/提示框中输入密码。我在自定义构建步骤下添加了它。重要的是要sudo知道它将期望通过-S选项输入密码。

echo "password" | sudo -S bash ./script

也适用于 bash 脚本,但是您可能认为将 sudo 密码存储在脚本中是不安全的。据说读取权限应该可以解决这个问题。

于 2012-05-19T20:37:47.330 回答
2

正如 Cameron Tinker 的评论所述,您可以设置 Qt Creator 以使用命令 gnome-terminal 和参数 -e "sudo make install" 进行部署。

效果和跑步一样gnome-terminal -e "sudo make install"

图片是这个配置在 Qt Creator 中的截图:)

Qt Creator 与 sudo make install 步骤与 gnome 终端项目设置

gksudo不再推荐或默认安装在 Ubuntu 上

于 2018-06-15T14:53:01.207 回答
2

@Logan您可以sudo直接使用ssh-askpass(GUI密码请求对话框)及其-A选项,这可以使用SUDO_ASKPASS环境变量覆盖/usr/bin/ssh-askpass可能在/etc/sudo.conf[1]中配置的值(如@herophuong的建议gksudokdesudo来自@herophuong的建议)。这可以解决您答案中第二种解决方案的安全风险,该解决方案"password"使任何可以观察命令行参数的东西都可以看到。等效于您的第一个解决方案变为:

sudo -A -s ./script

不要忘记这可能sudo会提供凭据缓存,因此,如果最近使用过(默认为 5 分钟?),重复调用会使用该缓存的密码值,而不是发出另一个密码请求。 如果出于理智/安全原因,不希望使用没有其他参数的脚本(或其他地方)立即清除任何缓存的凭据(该使用不需要密码),以便任何后续使用需要身份验证。sudo -Ksudo

visudo1 -如果您想编辑/etc/sudo.conf添加,请记住以 root 身份使用:

# Path to askpass helper program
Path askpass /usr/bin/ssh-askpass

于 2016-01-15T01:39:10.433 回答
0

我认为您应该使用gksudo(在 GNOME 中)或kdesudo(在 KDE 中)。然后,这些命令将使用一个窗口提示您输入密码。

于 2012-07-12T13:51:10.983 回答