通过dsh批量管理Linux服务器

本文介绍了一种通过命令行工具dsh高效批量管理大量Linux服务器的方法。dsh支持通过SSH连接远程执行Shell命令,并可通过配置文件定义不同的服务器组,实现灵活的远程管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目前在企业网络中越来越多的出现Linux服务器,而如何方便高效的管理大量的Linux服务器是系统管理员非常关心的一个问题。现在有大量的开源管理工具,可以实现这样的管理工具,现在给大家介绍一个通过命令行有效地管理大量Linux的工具---dsh。

dsh是专为在远程系统上运行Shell命令设计的,通过dsh可以简化对大量计算机的操作。dsh命令语法如下:

dsh [-m machinename | -a | -g groupname] [-f machinefile] [-M] [-q] [--wait-shell]--
commandline

常用选项:

-M:在显示远程命令执行的输出时,在前面加上主机名。

-a:如果经常操作同一组计算机,可以创建一个全局集合的组。$HOME/.dsh/machines.list文件是全局集合的定义。在该文件中每行一个计算机的IP地址,在指定-a后,dsh就会在machines.list中列出的所有计算机上执行指定的命令。

-q:指定使用安静模式输出。

-m machinename:指定需要执行指定命令的计算机。

-g groupname:指定需要执行指定命令的计算机组,主机名组在$HOME/.dsh/group/目录是定义,每个计算机组一个文件,文件名即是组外,在文件中每行一个计算机IP地址。

-f machinefile:指定计算机列表文件。

-wait-shell:在默认情况下,dsh是并行地在计算机上运行命令。如果希望顺序地运行命令则指定--wait-shell。

下面在我们一起来看看在如下图的网络中如何通过dsh有效的管理Linux服务器。

 

通过dsh批量管理Linux服务器

1、 dsh是通过SSH方式连接到服务器,所以需要在所有服务器上安装SSH。

2、 在srv.example.zqin上通过如下命令安装dsh。

srv:~# apt-get -y install libdshconfig1 libdshconfig1-dev dsh

3、 在使用dsh进行管理时,需要输入被管理服务器的用户名及密码,为了使用起来更加方便可使用如下命令将SSH的公钥复制到被管理服务器。

 srv:~# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
dd:e9:d3:84:fc:4c:ff:b4:b0:fa:12:fa:fd:49:3d:4d root@testsrv
The key's randomart image is:
+--[ RSA 2048]----+
| |
| |
| |
| . o o |
| S . = o E|
| o * oo|
| . +.+o=|
| . ...+.=|
| .o++.+.|
+-----------------+
srv:~# scp ~/.ssh/id_rsa.pub 192.168.159.21:/root/.ssh/authorized_keys
srv:~# scp ~/.ssh/id_rsa.pub 192.168.159.22:/root/.ssh/authorized_keys
srv:~# scp ~/.ssh/id_rsa.pub 192.168.159.31:/root/.ssh/authorized_keys
srv:~# scp ~/.ssh/id_rsa.pub 192.168.159.32:/root/.ssh/authorized_keys

如果被管理的服务器比较多也可以编写个脚本来复制公钥。下面是一个复制公钥到多个服务器上的脚本。

for i in $(seq 200 253)
do
ssh 192.168.159.$i -C mkdir /root/.ssh
scp ~/.ssh/id_rsa.pub 192.168.1.$i:/root/.ssh/authorized_keys
done

4、 为了方便使用dsh,可以将所有被管理服务器分类并存放到对应文件中。

将所有被管理服务器的IP地址(或FQDN)加入$HOME/.dsh/machines.list文件中(每行一个)。

在$HOME/.dsh/group/目录下建立名为web的文件,并将web1、web2的IP地址(或FQDN)加入其中(每行一个)。

在$HOME/.dsh/group/目录下建立名为db的文件,并将db1、db2的IP地址(或FQDN)加入其中(每行一个)。

在上述配置完成后就可以在srv上通过dsh进行批量操作了,下面我们一起来看几个例子。

1、 在db1.example.zqin上执行reboot命令。

srv:~# dsh -M -m db1.example.zqin -- reboot

2、 在$HOME/.dsh/machines.list文件中定义的所有服务器上同时执行updatedb命令。

srv:~# dsh -M -a -- updatedb

3、 在$HOME/.dsh/group/web文件中定义的所有服务上面上同时执行命令。

srv:~# dsh -M -g -- /etc/init.d/apache2 restart
### 编写和执行用于服务器批量部署脚本 #### Python 脚本实现 Linux 服务器批量管理 对于Linux服务器而言,采用Python编写的自动化脚本能有效提升工作效率。这类脚本适用于多种场合,如服务器集群维护、日志聚合以及应用程序发布等操作。为了确保项目的平稳推进,在实际开发过程中应当注重每次部署情况的日志记录工作,并维持代码良好的可拓展特性[^1]。 ```python import paramiko from scp import SCPClient def create_ssh_client(server_ip, port, user, password): client = paramiko.SSHClient() client.load_system_host_keys() client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) client.connect(server_ip, port=port, username=user, password=password) return client server_list = ["192.168.0.1", "192.168.0.2"] # 替换为真实的IP地址列表 for server in server_list: ssh = create_ssh_client(server, 22, 'root', 'password') with SCPClient(ssh.get_transport()) as scp: scp.put('local_file_path', '/remote/path') # 文件传输 stdin, stdout, stderr = ssh.exec_command("command_to_execute") # 命令执行 output = stdout.read().decode() error_output = stderr.read().decode() print(f"Output from {server}: ", output) if error_output: print(f"Error occurred on {server}: ", error_output) ssh.close() ``` 此段程序展示了通过`paramiko`库建立SSH连接并借助SCP协议上传文件至目标主机;随后调用远端指令完成特定任务(例如安装软件包),最后获取命令返回的结果以便后续分析处理。 #### Shell 脚本实例 - Nginx 安装配置 当涉及到具体的服务搭建时,Shell脚本同样扮演着重要角色。下面给出一段简单的例子来说明怎样构建一个能够跨多台机器推送相同设置的过程——这里以Nginx为例: ```bash #!/bin/bash # 更新源并安装依赖项 apt-y # 启动服务 service nginx start # 设置开机自启 update-rc.d nginx defaults ``` 这段简短却实用的小工具可以在每台待初始化的工作站上运行,从而达到统一化环境的目的[^2]。 #### Windows 平台下的批处理方案 针对Windows操作系统,则可以通过创建`.bat`格式的批处理文档来进行类似的作业流控制。将所有必要的资源打包进同一目录下,并编辑相应的启动命令集,只需简单点击就能触发整个流程的运转。此外还可以利用网络驱动器映射功能达成资料同步分享的效果[^3]。 ```batch @echo off xcopy /E /I "\\source\path" "C:\destination" "C:\Program Files\example.exe" /silentinstall ``` 以上示例实现了从指定位置复制文件夹结构到本地磁盘,并静默安装某款第三方应用的功能。 #### 利用 dsh 或 pssh 工具优化远程执行效率 考虑到某些情况下可能需要频繁向众多节点下发相同的指示,这时像dsh这样的专门型解决方案就显得尤为合适了。不过需要注意其局限性在于仅支持基本的命令传递而不具备文件传送能力。因此面对复杂需求时推荐选用更加全面的产品线,比如Parallel SSH(pssh)[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值