网站搜索

DSH (Dancer's Shell) - 在多个 Linux 主机上运行命令


系统管理员非常清楚能够在短时间内监控和管理大量机器的重要性,最好是通过最少的物理移动。无论是小型云环境还是大型服务器集群,集中管理计算机的能力都是至关重要的。

为了部分实现这一目标,我将向您展示如何使用一个名为 DSH(舞者 shell/分布式 shell)的漂亮小工具,它允许用户跨多台机器运行命令。

什么是 DSH?

DSH 是“Distributed Shell”或“Dancer's Shell”的缩写,它是大多数主要 Linux 发行版上免费提供的工具,但也可以通过如果您的发行版未将其包含在其软件包存储库中,则可以轻松地从源构建。

在Linux中安装DSH(分布式Shell)

在本教程的范围内,我们将假设一个 Debian/Ubuntu 环境。如果您使用其他发行版,请用适当的命令替换您的包管理器。

在基于 Debian 的发行版上,您可以在终端中使用以下 apt 命令安装 DSH

sudo apt install dsh

在基于 RHEL 的发行版上,您需要从源 tar 球编译它,但在此之前,请确保编译并安装“libdshconfig”库。

wget http://www.netfort.gr.jp/~dancer/software/downloads/libdshconfig-0.20.10.cvs.1.tar.gz
tar xfz libdshconfig*.tar.gz 
cd libdshconfig-*
./configure ; make
sudo make install

然后编译dsh并安装。

wget https://www.netfort.gr.jp/~dancer/software/downloads/dsh-0.22.0.tar.gz
tar xfz dsh-0.22.0.tar.gz
cd dsh-*
./configure ; make 
sudo make install

如何在 Linux 中使用 DSH

主配置文件“/etc/dsh/dsh.conf”(对于Debian)和“/usr/local/etc/dsh.conf” >”(对于 Red Hat) 非常简单,但由于 rsh 是一个未加密的协议,我们将使用 SSH 作为远程 shell。

使用您选择的文本编辑器,找到这一行:

remoteshell =rsh

并将其更改为:

remoteshell =ssh

如果您愿意,还可以在此处传递其他选项,并且可以在 dsh 手册页上找到很多选项。现在,我们将接受默认值并查看下一个文件 /etc/dsh/machines.list(对于 Debian)。

对于基于 Red Hat 的系统,您需要在“/usr/local/etc/”中创建一个名为“machines.list”的文件目录。

这里的语法非常简单。您所要做的就是每行输入一个计算机的凭据(主机名IP 地址FQDN)。

注意:当同时访问多台计算机时,您应该在所有计算机上设置基于密钥的无密码 SSH。这不仅可以轻松访问,而且从安全角度来看,它还可以强化您的机器。

我的“/etc/dsh/machines.list”或“/usr/local/etc/machines.list”文件显示:

172.16.25.125
172.16.25.126

输入要访问的计算机的凭据后,让我们运行一个简单的命令,例如对所有计算机运行正常运行时间。

dsh -aM -c uptime

示例输出

172.16.25.125: 05:11:58 up 40 days, 51 min, 0 users, load average: 0.00, 0.01, 0.05
172.16.25.126: 05:11:47 up 13 days, 38 min, 0 users, load average: 0.00, 0.01, 0.05

那么,“dsh”命令有什么作用?

很简单。首先,我们运行dsh并将“-a”选项传递给它,该选项表示将“uptime”命令发送到“uptime” “/etc/dsh/machines.list”中列出的计算机的 >ALL”。

接下来,我们指定了“-M”选项,该选项表示返回“机器名称”(在“/etc/dsh/machines.list<”中指定)“)以及 uptime 命令的输出。 (对于在多台机器上运行命令时进行排序非常有用)。

-c”选项代表“要执行的命令”,在本例中为“正常运行时间”。

DSH 还可以在“/etc/dsh/groups/”文件中配置计算机组,其中的文件包含与格式相同的计算机列表“/etc/dsh/machines.list”文件。在组上运行 dsh 时,请在“-g”选项后指定组名称

对于基于 Red Hat 的系统,您需要在“/usr/local/etc/”目录中创建一个名为“groups”的文件夹。在该“groups”目录中,您创建一个名为“cluster”的文件。

例如,在“cluster”组文件“/etc/dsh/groups/cluster”中列出的所有计算机上运行“w”命令”或“/usr/local/etc/groups/cluster”。

dsh -M -g cluster -c w

DSH 提供了更大的灵活性,本教程仅涉及表面。除了执行命令之外,DSH 还可用于传输文件、安装软件、添加路由等等。

对于负责大型网络的系统管理员来说,这是无价的。