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

eli*_*eli 39 linux ssh remote-management perl

来自 Windows 管理,我想更深入地研究 Linux (Debian)。我在网上搜索(没有找到)时无法回答的一个紧迫问题是:如何像在 Windows PowerShell 中那样实现所谓的“一对多”远程处理?

为了将其分解为基础知识,我会说:

我对 Linux 的看法:

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

我在 Windows 上的经验:

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

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

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


Update 2019:
在尝试了很多之后 - 我建议Rex(见下面的评论) - 简单的设置(实际上它只需要 ssh,没有别的)和使用(如果你知道一点点perl,它会更好,但它是可选的)
Rex(ify) )您可以执行adhoc命令并将其推进到真正的配置管理中(...意思是:它首先是一个 CM,但也适用于临时任务)网站接缝已过时,但目前(截至 01/2019)它正在积极开发中,IRC 频道也处于活跃状态。

有了 Windows 的新openssh,还有更多的可能性

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

Rui*_*iro 50

概括

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

簇sh

对于向多个服务器发送远程命令,对于初学者,我会推荐clustersh

clusterssh在 Debian 中安装:

apt-get install clusterssh
Run Code Online (Sandbox Code Playgroud)

另一个clustersh教程

ClusterSSH 是围绕标准 Linux 工具(如 XTerm 和 SSH)的 Tk/Perl 包装器。因此,它几乎可以在任何存在库的 POSIX 兼容操作系统上运行——我已经在 Linux、Solaris 和 Mac OS X 上运行过它。它需要 Perl 库 Tk(Debian 或 Ubuntu 上的 perl-tk)除了 xterm 和 OpenSSH 之外,还有 X11::Protocol(Debian 或 Ubuntu 上的 libx11-protocol-perl)。

Ansible

至于多系统管理的远程框架,Ansible是 Puppet 的一个非常有趣的替代品。它更精简,不需要专门的远程代理,因为它通过 SSH 工作(它也被 RedHat 收购了)

Playbooks 比命令行选项更复杂。

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

之后,要在所有服务器上运行命令,就像这样做一样简单:

ansible all -m command -a "uptime"
Run Code Online (Sandbox Code Playgroud)

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

您可以从简单的规则开始,随着您在 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
Run Code Online (Sandbox Code Playgroud)

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

模块索引 - Ansible 文档

它还有一个有趣的官方中心/“社交”存储库网络,用于搜索社区已经制定的可靠政策。Ansible 银河

Ansible 也被广泛使用,你会在 github 上找到很多项目,比如我自己的FreeRadius setup 项目

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

如今,RedHat 收购之后,tower 也有开源版本,称为AWX

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

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

如何安装 Ansible

跑台

再一次,对于一个更易于使用但不如 Ansible 强大的远程框架,我确实推荐Rundeck

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

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

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

rundeck 图像

如何安装 RunDeck

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

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

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


jll*_*gre 24

如果你想以交互方式进行,你可以使用terminatorwhich 允许向多个终端广播命令。

在此处输入图片说明

请参阅:如何同时在多个选项卡/shell 中运行相同的 linux 命令?


小智 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
Run Code Online (Sandbox Code Playgroud)


小智 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 Code Online (Sandbox Code Playgroud)

所以,在命令行中:

$ 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
Run Code Online (Sandbox Code Playgroud)

  • 我建议在输出之前打印服务器的名称。并行运行脚本也会带来其他问题,比如摸索脚本的输出——必须采取额外的措施来保持输出的活动。在前台运行每个任务也提供了最小化输入交互的可能性。 (5认同)