eli*_*eli 39 linux ssh remote-management perl
来自 Windows 管理,我想更深入地研究 Linux (Debian)。我在网上搜索(没有找到)时无法回答的一个紧迫问题是:如何像在 Windows PowerShell 中那样实现所谓的“一对多”远程处理?
为了将其分解为基础知识,我会说:
我对 Linux 的看法:
我在 Windows 上的经验:
我输入我的命令并使用“invoke-command”我可以将其“发送”到一堆服务器(可能来自文本文件)以同时执行并返回结果(作为进一步工作的对象)。
我什至可以建立多个会话,连接在后台保持,并有选择地向这些会话发送命令,并根据需要远程进出。
(我听说过厨师、木偶等。是这样的吗?)
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
对于向多个服务器发送远程命令,对于初学者,我会推荐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是 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 也被广泛使用,你会在 github 上找到很多项目,比如我自己的FreeRadius setup 项目。
虽然 Ansible 是一个免费的开源框架,但它也有一个付费的 Web 面板界面Ansible Tower,尽管许可相当昂贵。
如今,RedHat 收购之后,tower 也有开源版本,称为AWX。
作为奖励,Ansible 还能够管理 Windows 服务器,尽管我从未使用过它。
它还能够管理网络设备(路由器、交换机和防火墙),这使其成为一个非常有趣的自动化交钥匙解决方案。
再一次,对于一个更易于使用但不如 Ansible 强大的远程框架,我确实推荐Rundeck。
它是一个非常强大的多用户/登录图形界面,您可以在其中自动执行许多常见的日常任务,甚至可以向系统管理员或服务台人员提供淡化的视图。
运行命令时,它还为您提供按服务器/任务细分的输出窗口。
它可以在后台无缝运行多个作业,并允许您稍后查看报告和输出。
请注意,有人将 Ansible+RunDeck 作为 Web 界面运行;并非所有案件都适用于此。
不用说,使用 Ansible 和/或 RunDeck 可以被解释为基础结构文档的一种形式或一部分,并且随着时间的推移允许复制和改进操作/食谱/剧本。
最后,谈到中央命令服务器,我会为任务创建一个。实际上,技术术语是跳箱。“跳箱”可以提高安全性,如果你设置正确的话。
小智 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)