pdsh:如何运行需要 root/sudo 权限的命令

pdsh:如何运行需要 root/sudo 权限的命令

我已经实现了一个小型的 beowulf 集群用于测试目的,所有节点都使用 Ubuntu 服务器 18.04。

我已经安装了pdsh用于在多个节点上同时在 ssh 上运行相同命令的程序。ssh 登录无需密码,并在节点上分发公钥/私钥(例如:https://www.rittmanmead.com/blog/2014/12/linux-cluster-sysadmin-ssh-keys/) 。

如果我尝试像“date”这样的简单命令,一切都很好:

me@master:~$ pdsh -w me@node[0-3] date
node0: Mon Mar 9 18:56:04 UTC 2020
node2: Mon Mar 9 17:26:15 UTC 2020
node3: Mon Mar 9 16:42:37 UTC 2020
node1: Mon Mar 9 17:42:52 UTC 2020
me@master:~$

但是如果我尝试执行需要 sudoer 权限的命令,如下所示:

me@master:~$ pdsh -w me@node[0-3] apt update

然后它会返回这些错误:

node0: WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
node0:
node0: Reading package lists...
node0: E: Could not open lock file /var/lib/apt/lists/lock - open (13: Permission denied)
node0: E: Unable to lock directory /var/lib/apt/lists/
node0: W: Problem unlinking the file /var/cache/apt/pkgcache.bin - RemoveCaches (13: Permission denied)
node0: W: Problem unlinking the file /var/cache/apt/srcpkgcache.bin - RemoveCaches (13: Permission denied)
pdsh@node00: node0: ssh exited with exit code 100

对于所有其他节点也是如此。

问题是“apt update”命令需要 sudo 执行,但我还没有找到用 pdsh 传递它的方法

使用“真实”根用户启动的相同类型的命令运行良好:

root@master:~$ pdsh -w root@node[0-3] apt update

但在这种情况下,这实际上意味着在所有节点上启用“真正的”根用户,这是我想避免的。

有可能吗?有没有办法在pdsh不启用 root 用户的情况下运行提升权限的命令?或者有其他工具可以做到这一点?

答案1

您应该能够使用该-S标志将您的密码传输到sudo如下位置:

pdsh -w me@node[0-3] echo "password" | sudo -S apt update

password你的实际密码在哪里?

~/.bash_history另外,您可以通过在文件中放置以下行来阻止密码显示在您的文件中~/.bashrc

export HISTIGNORE='*sudo -S*'

并且不要忘记获取~/.bashrc文件以应用更改:

source ~/.bashrc

您可能需要在所有机器上执行此操作。

答案2

在 Red Hat 上运行时,我运行需要提升权限的命令,如下所示:

sudo /usr/local/bin/pdsh -w node[n-m] ?command

只要 root 具有对其他节点的 ssh 访问权限,这应该就可以工作。

相关内容