我们说我是SSH和多台远程机器。我想通过一个界面向所有机器发送命令。我正在考虑打开一个命名管道,其输出将通过管道输送到我连接到的每台机器。这样,如果我echo "ls -l" > namedpipe
,那么命令将在每台机器上运行。我尝试过这个,但它没有用。关于如何有一个终端可以与所有远程机器进行交互的任何建议?
答案 0 :(得分:1)
有很多工具可以帮助你做到这一点。其中一些值得检查的是:
他们都通过SSH工作。
如果您仍希望将自定义脚本与SSH客户端一起使用,则可以执行以下操作:
while read i
do
ssh user@$i <command to execute> <arg>
done < server.list
答案 1 :(得分:1)
GNU Parallel是要走的路。在SO和其他地方有很多例子,在需要时也使用命名管道。在并行手册页中提到并比较了其他工具。
至于你的例子,你想要的就像
一样parallel ssh {} "ls -l" ::: user1@machine1 user2@machine2 ...
某些Linux发行版附带了一个配置文件(通常为/etc/parallel/config
),其中默认设置了选项--tollef
。如果是这种情况并且您不想更改,则必须在上面的第一个示例中使用--
而不是:::
,或者使用--gnu
选项覆盖{ {1}}。
等效地,如果您创建一个名为--tollef
的文件,其中包含
remotelist
你可以发出:
user1@machine1
user2@machine2
或者,如下面的评论所述,
parallel -a remotelist ssh {} "ls -l"
parallel --nonall --slf remotelist ls -l
选项(--slf
的缩写)允许在--sshloginfile
文件中填充更多信息:注释,在每个远程主机上使用的处理器数量等。
您可能还会考虑remotelist
选项,该选项会在每个输出行前面添加它所源自的主机的名称。