我正在使用 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 命令(clusterssh
,
dsh
,pdsh
...... 仅举几例,但还有好多其它的)
答案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
确保您使用钥匙串中的私钥,或者没有密码的密钥,这样您就不会在每个主机上都提示输入密码。