如何通过仅在一个终端中执行命令来在多个终端中执行一个命令?

3 ssh command-line gnome-terminal automation

我将有多台机器通过 SSH 连接,所以我将有多个终端窗口,尽管我想做的是执行一个命令以便所有机器都执行它,但目前我必须做的是在每个单独的终端窗口中执行它,有什么方法可以在一个终端中执行命令,该命令将在所有指定的终端会话中执行指定的命令以提高效率,因为我不想输入它进入每个单独的终端窗口?gnome-terminal如果这有什么不同,我将使用。

我正在使用 GNOME 3.18 运行 Ubuntu GNOME 15.10,其他机器应该运行相同的。

Ter*_*nce 5

我使用过的一种方法是ClusterSSH一次发送到多个终端窗口。

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

ClusterSSH将打开自己的终端窗口,您可以使用应用程序向其发送命令。一旦ClusterSSH按下Ctrl+ Shift++或点击Hosts菜单,并选择Add host(s) or cluster(s)在所有输入您要打开的每一个之间的空格隔开。你应该得到一个看起来像这样的窗口:

在此处输入图片说明

然后在File Hosts Send Help菜单项下方的框中键入要一次发送到所有窗口的任何命令。

我还编写了一个脚本,您可以从命令提示符运行该脚本,以根据需要打开任意数量的集群 SSH 窗口。我建议您在使用此脚本运行之前先执行此操作,ssh-copy-id localhost以便它在不要求输入密码的情况下启动。

剧本:

#!/bin/bash

if [[ $1 == "" ]]; then

echo -n "Please enter number of CSSH windows you want to open: "
read num1

else

num1=$1

fi

if [[ ! ${num1} || ${num1} = *[^0-9]* ]]; then
    echo "${num1} is invalid input.  Please only use numbers."
    exit 1
fi

for i in $(seq $num1); do echo localhost; done | xargs nohup cssh >/dev/null 2>&1 &
disown -a
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!