一个提示 pkexec - 两个命令

Ham*_*let 5 command-line bash virtual-machine polkit virsh

pkexec有人可以回答我,当我必须使用两个带有身份验证的命令时,如何发出一个提示?我的简单示例脚本:

pkexec virsh net-start default;
pkexec "/home/user/program";
Run Code Online (Sandbox Code Playgroud)

我是 Linux 环境的新手,谢谢:)

Zic*_*Zic 1

旧答案: 您可以将 pkexec 从脚本中删除吗?尝试创建下一个脚本,在其中粘贴代码(不使用 pkexec)并通过脚本中的 pkexec 执行他。你的脚本:#!/bin/bash pkexec ./new_script 新脚本: #!/bin/bash your command:

编辑:新答案

在与@Thrig 交谈后,我猜你会做什么。您希望在 root 权限下运行这两个程序,而无需双重身份验证(仅一次)。这两个程序是:“virsh”和“gnome-boxes”。我之前的(上面)解决方案是可以的,但在这种情况下不行。您写信给@Thrig 表示您正在考虑使用“sudo”。为什么不一起使用“pkexec”和“sudo”呢?正确完成“/etc/sudoers”后,您在脚本中使用“sudo”命令时将不需要进行身份验证。我让自己改进你的想法。我希望你喜欢它。我将一步步描述一切。

1.创建三个脚本:

a) main.sh - 建立连接、销毁连接、运行 gnome-boxes。一切都作为根

b) net.sh - 执行命令

c) die.sh - 执行命令

A)

#!/Bin/bash
sudo /home/ham/..your..path../net.sh && pkexec /usr/bin/gnome-boxes;
sudo /home/ham/..your..path../die.sh;
exit
Run Code Online (Sandbox Code Playgroud)

为什么?操作符描述

b)

#!/Bin/bash
virsh net-start default
Run Code Online (Sandbox Code Playgroud)

C)

#!/Bin/bash
virsh net-destroy default
Run Code Online (Sandbox Code Playgroud)

2.编辑“sudoers”文件以使脚本: b) c) 以 root 权限运行:

$ sudo nano /etc/sudoers

%sudo ALL=(root) NOPASSWD: /home/..your..path../net.sh
%sudo ALL=(root) NOPASSWD: /home/..your..path../die.sh 
Run Code Online (Sandbox Code Playgroud)

3.将脚本 b) c) 的所有者更改为 root:

$ sudo chown 700 /home/ham/..your..path../net.sh
$ sudo chown 700 /home/ham/..your..path../die.sh;
Run Code Online (Sandbox Code Playgroud)

4.在 polkit 中为 gnome-boxes 创建规则。答案是:“怎么办?” 在这里:simple_polkit_rule

5.编辑文件:

  • org.gnome.Boxes.service

    Exec=/home/..your..path../start.sh

  • org.gnome.Boxes.desktop

    Exec=/home/..your..path../start.sh

6.现在,单击快捷方式图标来运行 gnome-boxes 应用程序。完成的。我自己添加了当您关闭 gnome-boxes 应用程序时自动关闭连接的功能。