同时向多个 Amazon EC2 实例发送命令

同时向多个 Amazon EC2 实例发送命令

我正在使用 Windows 通过 SSH 连接到我的 Amazon EC2 机器。

是否有类似适用于 Windows 的 Cluster SSH 的工具?

我的目标是通过 SSH 连接到多台 EC2 机器,并同时向每台机器发送相同的命令,即编写一次命令,然后将其发送到多台 EC2 机器。此外,我想打开与一台 EC2 机器的多个连接,以防其中一台连接中断。

如何使用 Windows 作为主机来实现这一点?EC2 机器使用 Ubuntu。

答案1

听起来您要求的是配置管理/编排。目前有许多不同的编排引擎。

最“AWS”的解决方案是使用 OpsWorks,它由 chef 提供支持。您可以编写一个配方(可能包含一个或多个 shell 命令)并在多个实例上手动执行它,或者在发生某个事件(例如实例启动或应用程序部署)时执行它。

另一种选择是ansible,它与之类似,只是它仅通过 SSH 运行。

答案2

我通常在 Linux 上使用 tmux 和同步窗格来执行此操作,并使用选项

:setw synchronize-panes

也可以看看:http://blog.sanctum.geek.nz/sync-tmux-panes/

tmux 是一个终端多路复用器,因此您也可以使用它来打开到同一台机器的多个连接,就像您要求的那样。

根据这个线程,您应该能够在 cygwin 上安装 tmux(线程中还有其他有趣的选项):https://stackoverflow.com/questions/5473384/terminal-multiplexer-for-microsoft-windows-installers-for-gnu-screen-or-tmux

答案3

我建议您不要从 Windows 客户端计算机(可能使用不可靠的连接)管理集群,而是连接到“主节点”,然后从该节点向从属节点发送命令。

从这个主节点,你有很多选项可以发送分布式 shell 命令(clustersshdshpdsh...... 仅举几例,但还有好多其它的

答案4

使用命令行总是最简单的方式。对于 Windows,请使用 cygwin。

for i in 54.76.246.226 54.77.110.237 54.77.60.144; do ssh -i ~/.ssh/id_rsa root@$i 'uname -a'; done

或者对于很多服务器

for i in `echo hosts.txt`; do ssh -i ~/.ssh/id_rsa root@$i 'uname -a'; done

确保您使用钥匙串中的私钥,或者没有密码的密钥,这样您就不会在每个主机上都提示输入密码。

相关内容