现在kdesudo已经消失了,如何在kubuntu 18.04上的bash中运行图形sudo?

TL; DR:从shell脚本执行图形化sudo的新方法是什么?

挥舞:

我刚从kubuntu 16.04升级到18.04,我正在进行正常的分流。

kdesudo在18.04离开了(没有维护)。

我在使用GUI i / o的bash脚本中经常使用它。

有些post说使用kdesu – 这看起来很奇怪。 我似乎记得它与有效的用户或类似的东西混淆。

那个没有安装在我的PATH中。

我找到了

 bigbird@sananda:~/pq$ ls -l /etc/alternatives/kdesu rwxrwxrwx 1 root root 41 Aug 19 03:23 /etc/alternatives/kdesu -> /usr/lib/kde4/libexec/kdesu-distrib/kdesu 

仍然说kde4。

我试过sudo -A ls

它说

 bigbird@sananda:~$ sudo -A ls sudo: no askpass program specified, try setting SUDO_ASKPASS 

我走了几圈看着ksshaskpassssh-askpass ,但两人都说他们不打算直接打电话。

没有ssh做任何事情。

我需要这个用于作为普通用户执行几乎所有操作的bash脚本,然后以root身份运行一个或两个命令。 这些脚本通常是从没有打开终端窗口的桌面图标启动的(我不需要或想要一个。)他们经常使用yad (如zenitykdialog )与用户交互。

正如您所发现的,您可以在sudo中使用-A选项,但是您需要一个为sudo提供密码的gui方法。

你可以随意编写这样的工具,只要它将密码传递回stdout上的sudo即可。 我使用了一个很久以前有人向我建议的简单解决方案,它使用kdialog,就像所有简单的解决方案一样,它一直是我的追随者。

所以创建一个简单的kdialog脚本,比如这个

  #!/bin/bash kdialog --password "Password required to proceed" 

现在你像这样使用sudo

  #!/bin/bash export SUDO_ASKPASS= sudo -A foo 

如果你没有kde,你当然可以使用你想要的任何语言为你的gui密码提供者

编辑: 绕过sudo passwd_tries的解决方案

因此,您只需要输入一次密码(如您所愿),就可以在脚本中的变量中捕获密码,并使用-S开关将该变量直接传递给sudo命令。

这样做的好处是它忽略了sudo passwd_tries规则,并且仍然需要交互式密码输入,因此密码不会存储在脚本中。

 PASSWD=$(kdialog --password "sudo password required") echo $PASSWD | sudo -S foo 

如果在脚本中不需要多个sudo命令,也可以直接在一行上执行此操作

 echo $(kdialog --password "sudo password required") | sudo -S foo 

当然,如果你想在所有脚本中使用标准的kdialog提示符,你可以使用我们之前讨论的kdialog脚本代替在这里使用kdialog。

从我的POV绕过sudo的passwd_tries的问题是,如果你输错密码,你的脚本将继续处理sudo命令之后的任何命令,所以如果sudo raise命令对于脚本的成功至关重要,那么你就会遇到问题。

需要注意的是,来自kdialog的密码(或者像zenity这样的替代品)写在stdout上,这是我之前应该提到的,所以任何捕获了PID标准输出的人都会看到你的密码。 但是,你系统上的任何黑客都会做更多的事情。

我刚刚在这里找到了一些答案。

它的要点是:

目前,解决方法是找到系统上安装kdesu位置

你可以做什么

 ls -l /etc/alternatives/kdesu 

然后为$HOME/.bashrc添加kdesudo的别名,或者如果使用它, $HOME/.bash_aliases

别名是

 ## Resurect kdesudo - this will probably fail eventually alias kdesudo='/usr/lib/kde4/libexec/kdesu-distrib/kdesu' 

确保将kdesu的路径调整为您在上一步中找到的路径。

这不适用于KDE下的某些程序,因为

KDE开发人员正在开发一个polkit路由,以便为其他应用程序提供临时提升权限,就像他们已经为Kate所做的那样。 – GreyGeek

当他们这样做时,他们禁用直接提升,因为(如果它正常工作)你不再需要它。 程序只需要在需要执行特权操作时请求密码。 它将如何在脚本中起作用还有待观察。

你试过pkexec

 pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY gedit 

不仅kdesudo,而且gksu也被弃用了。 这些变化至少有点令人讨厌。 看来我们现在要采用的方法是使用admin://前缀,例如,如果您以前使用kdesudo gedit /etc/default/grub那么你应该改为gedit admin:///etc/default/grub这将如果我为了“新的和改进的”版本降低16.04,肯定会有一些习惯。

另一种可能的解决方案是简单地在终端中启动脚本。

资料来源: https : //www.linuxuprising.com/2018/04/gksu-removed-from-ubuntu-heres.html