服务器系统管理员都知道,能够在短时间内监控和管理多个机器是多么重要,最好能做到最少的物理操作。无论是小型云环境还是大型服务器集群,集中管理计算机的能力至关重要。
为了解决这个问题,我将向您展示如何使用一个非常实用的工具——DSH(分布式 Shell),它可以让用户在多台机器上运行命令。
DSH 是 “Distributed Shell” 或 “Dancer’s Shell” 的缩写,它是一个在大多数主流 Linux 发行版中都可以免费获得的工具,如果您的发行版没有包含该工具的安装包,也可以从源代码编译安装。
在 Linux 上安装 DSH(分布式 Shell)
本文假设您正在使用 Debian 或 Ubuntu 系统。如果您使用的是其他发行版,请相应地替换适合的包管理命令。
在 Debian/Ubuntu 上安装 DSH
您可以使用以下命令在终端中安装 DSH:
sudo apt install dsh
在 RHEL/CentOS 上安装 DSH
在 RHEL 或 CentOS 等基于 Red Hat 的发行版中,您需要先从源代码编译安装 DSH。首先,确保编译并安装 `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
如何使用 DSH 在 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` 的文件。
配置机器列表
`machines.list` 文件的语法非常简单,每行写一个机器的凭据(主机名、IP 地址或 FQDN)。例如:
172.16.25.125
172.16.25.126
配置无密码 SSH
当同时访问多台机器时,建议在所有机器上设置基于密钥的无密码 SSH 认证,这不仅方便访问,还能增强安全性。
运行命令
一旦您配置好了机器列表,就可以在所有机器上运行简单的命令,比如查看系统的 `uptime`(运行时间):
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` 命令发送到 `/etc/dsh/machines.list` 文件中列出的 **所有** 机器。
– `-M` 选项表示返回机器的名称(在 `machines.list` 文件中指定)以及命令的输出。这对于当在多台机器上运行命令时,非常有用,可以帮助我们快速分辨哪个机器输出了什么。
– `-c` 选项后面跟着要执行的命令,这里是 `uptime`。
配置机器组
DSH 还可以通过 `/etc/dsh/groups/` 文件配置机器组,在该文件中,列出的机器使用与 `machines.list` 文件相同的格式。运行 DSH 时,指定组名即可。
对于基于 Red Hat 的系统,您需要在 `/usr/local/etc/` 目录下创建一个名为 `groups` 的文件夹,在该文件夹下创建一个名为 `cluster` 的文件。
例如,在 `cluster` 组文件中列出所有机器后,运行 `w` 命令来查看它们的状态:
dsh -M -g cluster -c w
DSH 提供了更多的灵活性,本文仅展示了它的一部分功能。除了执行命令,DSH 还可以用于传输文件、安装软件、添加路由等。
对于需要管理大规模网络的系统管理员来说,DSH 是一个非常宝贵的工具。











