我实现了一个用于测试的小型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其他节点也是如此。
问题是需要sudo执行的"apt update“命令,但我还没有找到将它传递给pdsh的方法。
与“真正”根用户启动的相同类型的命令运行良好:
root@master:~$ pdsh -w root@node[0-3] apt update但在这种情况下,这实际上意味着在所有节点上启用“真正的”根用户,这是我想要避免的。
它是可占有的吗?有没有一种方法可以在不启用根用户的情况下使用pdsh运行提升的特权命令?或者有其他的工具可以做到这一点?
发布于 2020-04-06 19:00:44
您应该能够使用-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你可能需要在所有的机器上这样做。
发布于 2021-03-11 19:58:02
在Red上运行的命令需要提升特权,如下所示:
sudo /usr/local/bin/pdsh -w node[n-m] ?command只要root对其他节点具有ssh访问权限,这就可以工作。
https://askubuntu.com/questions/1223777
复制相似问题