Linux相当于PowerShell的“一对多”远程处理


38

来自Windows管理,我想更深入地研究Linux(Debian)。我无法在网络上搜索(找不到)的最棘手的问题之一是:如何像在Windows PowerShell中那样实现所谓的“一对多”远程处理?

简而言之,我会说:

我对Linux的看法:

  • 我可以进入服务器并输入命令
  • 我得到结果。对于10个服务器的环境,我必须编写一个(perl / python?)脚本,为每个服务器发送命令?

我在Windows上的经验:

  1. 我键入命令,然后使用“调用命令”将其“发送”到一堆服务器(可能来自文本文件)以同时执行并返回结果(作为进一步工作的对象)。

  2. 我什至可以建立多个会话,连接保留在后台,然后有选择地向这些会话发送命令,并根据需要进行远程输入和输出。

(我听说过厨师,木偶等。是这样吗?)


Update 2019:
尝试了很多之后-我建议使用Rex(请参阅下面的评论)-易于设置(实际上只需要ssh,不需要其他操作)并使用(如果您只知道一点点perl,效果会更好,但它是可选的)
Rex(ify )您可以执行adhoc命令并将其推进到实际的配置管理中(...含义:它首先是CM,但也适用于addhoc任务)该网站已过时,但是目前(截至01/2019)它正在积极开发中,并且IRC通道也处于活跃状态。

使用Windows的新openssh,甚至还有更多可能性

你可以试试: rex -u user -p password -H 192.168.1.3 -e 'say run "hostname"'



MobaXTerm在许多ssh会话中都支持“多重执行”:mobaxterm.mobatek.net/features.html(向下滚动)。同样,如果您的主要工作站环境是Windows,那么它也是连接Linux机器等的绝佳工具。
凯夫

与tmux::setw synchronize-panes onunix.stackexchange.com/a/124800/161003
eli

Answers:


50

摘要

  • Ansible是一个DevOps工具,可以替代PowerShell
  • RunDeck作为图形界面很方便
  • 有些人一起运行RunDeck + Ansible

clusterssh

为了将远程命令发送到多个服务器,对于初学者,我建议使用clusterssh

clusterssh在Debian中安装:

apt-get install clusterssh

另一个clusterssh教程

ClusterSSH是Tk / Perl包装器,它包装了标准Linux工具(如XTerm和SSH)。这样,它几乎可以在存在该库的所有POSIX兼容操作系统上运行-我已经在Linux,Solaris和Mac OS X上运行它。它需要Perl库Tk(在Debian或Ubuntu上为perl-tk)和X11 :: Protocol(在Debian或Ubuntu上为libx11-protocol-perl),以及xterm和OpenSSH。

Ansible

至于用于多系统管理的远程框架,Ansible是Puppet的非常有趣的替代品。它更精简,并且不需要专用的远程代理,因为它可以通过SSH进行工作(它也已被RedHat购买)

这些Playbooks比命令行选项更为详尽。

但是,要开始使用Ansible,您需要简单的安装并设置客户端列表文本文件。

然后,要在所有服务器上运行命令,就很简单:

ansible all -m command -a "uptime"

每个规则/服务器的输出格式也非常好,并且分开,并且在后台运行时,可以将其重定向到文件并在以后进行查询。

您可以从简单的规则开始,随着您在Linux中的增长,Ansible的用法将变得更加有趣,并且您的基础结构也将变得更大。这样一来,它将比PowerShell发挥更多的作用。

例如,我写了一个非常简单的Playbook来升级Linux服务器:

---
- hosts: all
  become: yes
  gather_facts: False
  tasks:
   - name: updates a server
     apt: update_cache=yes
   - name: upgrade a server
     apt: upgrade=full

它还定义了许多模块,可让您轻松编写全面的策略。

模块索引-Ansible文档

它还有一个有趣的官方中心/“社交”存储库网络,以搜索社区已制定的烦人政策。Ansible星系

Ansible也被广泛使用,您将在github中找到许多项目,例如我自己的FreeRadius setup项目

尽管Ansible是一个免费的开放源代码框架,但它也具有付费Web面板界面Ansible Tower,尽管许可费用相当昂贵。

如今,在RedHat收购它之后,Tower还拥有称为AWX的开源版本。

作为奖励,Ansible还能够管理Windows服务器,尽管我从未使用过。

它还能够管理网络设备(路由器,交换机和防火墙),这使其成为自动化交钥匙解决方案非常有趣的解决方案。

如何安装Ansible

朗德克

再说一次,对于易于使用但不如Ansible强大的远程框架,我建议使用Rundeck

它是一个非常强大的多用户/登录图形界面,您可以在其中自动化许多日常任务,甚至可以为sysops或服务台人员提供淡化的视图。

运行命令时,它还会为您提供窗口,其中按服务器/任务细分了输出。

它可以在后台无缝运行多个作业,并允许您稍后查看报告和输出。

梯形图

如何安装RunDeck

请注意,有人将Ansible + RunDeck作为Web界面运行;并非所有情况都适用于此。

不用说,可以将Ansible和/或RunDeck解释为基础结构文档的一种形式或一部分,并且随着时间的推移,它可以复制和改进操作/食谱/ Playbook。

最后,谈到中央命令服务器,我将为任务创建一个服务器。实际上,技术术语是跳转框。如果正确设置“跳箱”,则可以提高安全性


1
与某些脚本或实用程序相比,Ansible是一个不错的解决方案,该脚本或实用程序仅将命令广播到多个SSH服务器。Ansible可以做到这一点(并且比Puppet或Chef更适合于此目的),但还为您提供了一种以更好的方式实现目标的选项,例如使用内置模块来幂等地安装某些东西,而不仅仅是发出install命令并希望最好的。
JBentley '16


12

您还可以使用pssh(或parallel-ssh),这是一个SSH客户端,可连接到主机列表并在所有主机上并行执行命令:

$ parallel-ssh -i -H "host1 host2" uname -a
[1] 11:37:12 [SUCCESS] host2
Linux host2 3.19.0-25-generic #26~14.04.1-Ubuntu SMP Fri Jul 24 21:16:20 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
[2] 11:37:12 [SUCCESS] host1
Linux host1 3.19.0-25-generic #26~14.04.1-Ubuntu SMP Fri Jul 24 21:16:20 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

11

也许您可以通过简单的zsh(bash)函数实现您的目标。假设您有服务器l61 l62 l63,并且经常需要在它们上运行命令:

function run_on_cluster()
{
    (for srv in l61 l62 l63;
    do
        echo "ssh $srv $1";
    done) | parallel --gnu
}

因此,在命令行中:

$ run_on_cluster "uname -r"
2.6.32-279.el6.x86_64
2.6.32-279.el6.x86_64
2.6.32-504.23.4.el6.x86_64

5
我建议在输出之前打印服务器的名称。并行运行脚本还会带来其他问题,例如弄乱脚本的输出-必须采取额外的措施来保留输出的活动。在前台运行每个任务还​​可以提供最少的输入交互。
Rui F Ribeiro

3

如果您使用的是KDE,这是另一种方法。
-打开Konsole窗口。
对于要与之通信的每个服务器:
-打开选项卡
-与服务器建立ssh连接
在“编辑”菜单中,将“复制输入”选择为“所有选项卡”

您在该选项卡中输入的每个命令都将被复制到所有服务器。
您可以在选项卡之间切换,以查看不同的结果。

注意:我的菜单标签(带引号)可能是错误的,因为我没有使用英文版的KDE


1

GNU并行

它允许简单的单线保存设置,因此您可以创建一个配置文件“ prod”,其中将包含服务器列表和常用开关。然后只需添加所需的命令,就可以使用了,还可以将文件复制到服务器并在最后自动删除它们,这对于更大的脚本来说非常方便,而且速度非常快。

唯一的问题是它有这么多的选项;)但是文档中还包含很多示例,因此您可以从头开始看它们。


2
嗨,欢迎来到Linux和Linux。有人已经使用gnu-parallel提供了一个脚本。我建议您环顾四周,我们将为您提供更多详尽的答案,并为您提供更多积分。
Rui F Ribeiro

1
@RuiFRibeiro对不起,我没有注意到,所以带有代码框的android应用程序有错误,我看不到大部分内容(它生成空白)。您提到gnu-parallel使输出
混乱

是的,我不熟悉它,但是已经很怀疑了,因此提及答案需要改进。谢谢。没有什么可以阻止您围绕它写出更好的答案,但是对于评论,我建议您在该答案中进行评论。
Rui F Ribeiro

1

我也想在这里提及“ Rex”:https : //www.rexify.org/

它是使用perl + ssh(用户/密码或密钥验证)的出色工具,并且因为perl已安装在每个(?!)linux系统上,所以我认为使用起来似乎更自然(它与Ansible&Co.有一些相似之处)

您可以一次在多个服务器上运行adhoc命令(server1,server2,server ...-设置身份验证后,或者使用-p / -u参数和-s / -S来执行命令的sudo):

$ rex -H "server[1..3]" -e 'say run "uptime"'

或创建一个文件,在其中指定不同的“任务”并从那里调用它们

$ rex -f myConfigFile.rex uptime

它可以通过资源库,甚至与皮尔斯进行安装CPAN(或cpanm Rex和它的初始设置是很容易,请参阅:
- https://www.rexify.org/
- https://www.rexify.org/docs/guides/ start_using__r__ex.html-http
: //www.admin-magazine.com/Archive/2014/21/First-steps-in-IT-automation-by-Rex

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.