Ubuntu 在Linux中,如何在Qt Creator中添加一个使用su权限的构建步骤,而不会在构建中获得错误的密码?

Ubuntu 在Linux中,如何在Qt Creator中添加一个使用su权限的构建步骤,而不会在构建中获得错误的密码?,ubuntu,qt-creator,sudo,qmake,Ubuntu,Qt Creator,Sudo,Qmake,我的目标是成功地将文件夹链接到/opt/directory,这需要使用sudo运行 我试过这个: system(sudo ln -s $$OUT_PWD/xampp /opt/lampp):message("You should manually link LAMPP") 但是从qt creator构建它不会提示输入sudo密码,因此我无法让它链接文件夹。我在编译器输出中遇到了“错误的密码尝试…”错误。然后我尝试了以下构建步骤: make sudo make install 查看它是否会在

我的目标是成功地将文件夹链接到/opt/directory,这需要使用sudo运行

我试过这个:

 system(sudo ln -s $$OUT_PWD/xampp /opt/lampp):message("You should manually link LAMPP")
但是从qt creator构建它不会提示输入sudo密码,因此我无法让它链接文件夹。我在编译器输出中遇到了“错误的密码尝试…”错误。然后我尝试了以下构建步骤:

make
sudo make install
查看它是否会在那里提示我,但在
makeinstall
步骤中失败,出现相同的错误,具体如下:

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.
当我从终端使用
qmake&&make&&make&&make install
时,qmake脚本中的
system()
函数工作正常,因为它在
sudo ln…
命令之前提示我;但出于快速测试的目的,我觉得在Qt Creator中使用CTRL-B构建也应该与sudo命令一起使用

有没有办法从Qt Creator得到提示,或者有没有办法解决这个问题?就像在Qt Creator中存储sudo密码一样(尽管这很危险)。。。或者让它在终端上运行构建步骤,在那里它会提示我?qmake中的
prompt()
函数是否可以用于收集sudo密码


欢迎提出任何建议……

经过大量研究:

ssh-askpass Sudo Password | sudo -S bash ./script
它就像一个符咒,在一个单独的窗口/提示框中请求密码。我在自定义构建步骤下添加了它。重要的是让
sudo
知道它需要通过
-S
选项输入密码

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

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

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

@Logan您可以使
sudo
直接使用
ssh askpass
(GUI密码请求对话框)及其
-a
选项,这可以使用
SUDO_ASKPASS
环境变量覆盖
/usr/bin/ssh ASKPASS
值,该值可以在
/etc/SUDO.conf
[1]中配置(如@herophung中的
gksudo
kdesudo
的建议)。这绕过了答案中第二个解决方案的安全风险,该解决方案使任何可以观察命令行参数的人都可以看到
“password”
。与您的第一个解决方案等效的是:

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

1-如果要编辑
/etc/sudo.conf
以添加以下内容,请记住使用
visudo
作为根目录:

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

如Cameron Tinker的评论所述,您可以使用命令gnome terminal和参数-e“sudo make install”设置Qt Creator的部署步骤

实际上与运行
gnome终端-e“sudo make install”

图为此配置在Qt Creator中的屏幕截图:)


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

你能从gnome终端构建吗?我不确定如何在Qt Creator中集成需要提升权限的构建步骤。无论如何,从终端构建可能会更容易。您可以很容易地创建一个bash脚本,该脚本执行所有构建步骤,包括qmake、make和makeinstall。谢谢你的建议,我在想bash脚本也会更容易…:)