我来自 Windows 管理部门,想更深入地了解 Linux (Debian)。我在网上搜索(没有找到)无法回答的最紧迫的问题之一是:如何实现所谓的“一对多”远程处理,就像 Windows 的 PowerShell 中那样?
为了将其分解为基础知识,我会说:
我对Linux的看法:
- 我可以 ssh 进入服务器并输入命令
- 我得到结果了。对于 10 台服务器的环境,我必须编写一个(perl/python?)脚本为每台服务器发送命令?
我在 Windows 上的经验:
我输入命令,然后使用“调用命令”,我可以将其“发送”到一堆服务器(可能来自文本文件)以同时执行并获取结果(作为进一步工作的对象)。
我什至可以建立多个会话,连接在后台保持,并有选择地向这些会话发送命令,并根据需要进行远程输入和输出。
(听说过厨师、木偶等,是这样的吗?)
Update 2019:
经过多次尝试后 - 我建议雷克斯(看下面这条评论) - 简单的设置(实际上它只需要 ssh,不需要其他任何东西)和使用(如果你知道一点点珀尔它甚至更好,但它是可选的
)雷克斯(化)你可以做特别指定命令并将其推进到真实的配置管理(...意思是:它首先是一个 CM,但也适合临时任务)该网站似乎已经过时,但目前(截至 01/2019)它正在积极开发中,并且 IRC 频道也很活跃。
随着 Windows 的新打开ssh还有更多的可能性
你可以试试:
rex -u user -p password -H 192.168.1.3 -e 'say run "hostname"'
答案1
概括
- Ansible 是一个 DevOps 工具,是 PowerShell 的强大替代品
- RunDeck 作为图形界面很方便
- 有些人一起运行 RunDeck+Ansible
集群sh
对于初学者来说,要向多个服务器发送远程命令,我建议集群sh
要clusterssh
在 Debian 中安装:
apt-get install clusterssh
其他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)。
安西布尔
至于用于多个系统管理的远程框架,安西布尔是 Puppet 的一个非常有趣的替代品。它更精简,并且不需要专用的远程代理,因为它通过 SSH 工作(它也已被 RedHat 收购)
Playbooks 比命令行选项更详细。
但是,要开始使用 Ansible,您需要进行简单的安装并设置客户端列表文本文件。
之后,要在所有服务器中运行命令,就像执行以下操作一样简单:
ansible all -m command -a "uptime"
输出的格式也非常好,并且按规则/服务器分开,并且在后台运行时可以将其重定向到文件并稍后查阅。
您可以从简单的规则开始,随着您在 Linux 中的成长,以及您的基础设施变得越来越大,Ansible 的使用将会变得更加有趣。因此,它的作用比 PowerShell 多得多。
举个例子,我写了一个非常简单的用于升级 Linux 服务器的 Playbook:
---
- hosts: all
become: yes
gather_facts: False
tasks:
- name: updates a server
apt: update_cache=yes
- name: upgrade a server
apt: upgrade=full
它还定义了许多模块,使您可以轻松编写全面的策略。
它还拥有一个有趣的官方中心/“社交”存储库网络,用于搜索社区已经制定的可靠政策。安塞布尔银河
Ansible 也被广泛使用,你会在 github 上找到很多项目,比如我自己的这个项目FreeRadius 设置。
虽然 Ansible 是一个免费的开源框架,但它也有一个付费的 Web 面板界面,安西布尔塔尽管许可相当昂贵。
如今,RedHat收购后,tower也有了开源版本,称为AWX。
作为奖励,Ansible 还能够管理 Windows 服务器,尽管我从未使用过它。
它还能够管理网络设备(路由器、交换机和防火墙),这使其成为一个非常有趣的自动化统包解决方案。
伦德克
再次强调,对于更易于使用但不如 Ansible 强大的远程框架,我确实推荐伦德克。
它是一个非常强大的多用户/登录图形界面,您可以在其中自动执行许多常见的日常任务,甚至可以向系统操作员或帮助台人员提供淡化的视图。
运行命令时,它还会为您提供按服务器/任务细分的输出窗口。
它可以在后台无缝运行多个作业,并允许您稍后查看报告和输出。
请注意,有人将 Ansible+RunDeck 作为 Web 界面运行;并非所有案例都适合这样做。
不言而喻,使用 Ansible 和/或 RunDeck 可以被解释为基础结构文档的一种形式或一部分,并且随着时间的推移,可以复制和改进操作/食谱/剧本。
最后,谈到中央命令服务器,我将创建一个专门用于该任务的服务器。实际上,技术术语是跳箱。如果设置正确,“跳箱”可以提高安全性。
答案2
答案3
您还可以使用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
答案4
如果您使用 KDE,还有另一种方法。
- 打开 Konsole 窗口。
对于要与之通信的每个服务器:
- 打开一个选项卡
- 与服务器建立 ssh 连接
在“编辑”菜单中,选择“复制输入”到“所有选项卡”
您在该选项卡中输入的每个命令都将被复制到所有服务器。
您可以从一个选项卡切换到另一个选项卡以查看不同的结果。
注意:我的菜单标签(带引号)可能是错误的,因为我不使用英文版的 KDE