通过Shell脚本在不同的Linux机器上自动执行连接和命令执行

时间:2014-05-26 04:28:56

标签: linux shell

您好我正在使用shell脚本语言(我是新手)。我有6台不同的Linux机器。我可以访问机器A.通过机器A并使用ssh -l <username> <ip_address>,我可以连接到B. B只能访问C,D和E(无法直接访问它们。它必须仅通过B访问它们)。同样,F只能通过C访问。

我必须从我的系统“A”在所有Linux机器上运行某些命令(例如,pwdls -lrt)。我怎样才能使那个东西自动化?我的意思是在这种情况下可以在机器A上执行脚本,机器A本身连接到所有其他机器,如图所示,并给我输出在所有机器上执行的命令(仅通过脚本)作为机器A中的文本文件? / p>

我写了一个shell脚本。在机器A上执行该脚本时,它连接到机器B.然后,没有更多的事情发生,即脚本的其余部分没有被执行。当我在机器B上按Ctrl + D时,脚本再次开始执行。这是我的问题,因为它只在机器A上执行命令,机器B上什么也没有。我希望脚本继续运行,即使机器现在已经改变了。我觉得问题是,机器B无法访问脚本。所以,我需要一个解决方法来解决这个问题。

如果在shell中不可能,那么哪种脚本语言对我想做的事情有好处呢?

我用谷歌搜索,但搜索结果不是我要找的:( enter image description here

2 个答案:

答案 0 :(得分:1)

这可能会遇到您的问题:

ssh <username>@<hostname> "<your_command>"

多个命令,使用“;”分开。

祝你好运!

答案 1 :(得分:1)

我认为在不同的计算机上拆分代码会对您的情况有所帮助,但这会增加您的可管理性任务,

一个解决方案可能是,

在各个节点上编写脚本,以执行要对其执行的任务 并且只需从父节点使用ssh调用这些脚本。

在节点A上编写脚本/运行命令,如

ssh user@nodeB "execute script on B(nodeBscript.sh)" 

无论你想在B上执行什么,都要在脚本nodeBscript.sh

中写下来

现在在nodeBscript.sh中,调用那些存在于节点C,D,E上的脚本并执行所需的任务。

ssh user@nodeC "nodeCscript.sh"
ssh user@nodeD "nodeDscript.sh"
ssh user@nodeE "nodeEscript.sh"

和类似的链条一直持续到最后。 这可以让您实现目标。 如果您愿意,可以将输出重定向到NFS共享的文件中,以便您也可以从计算机A访问这些文件。

另一个解决方案(我想你已经尝试过了)

在像

这样的脚本中写所有内容
ssh user@nodeB "ssh user@nodeC 'your command'" > outputC
ssh user@nodeB "ssh user@nodeD 'your command'" > outputD
ssh user@nodeB "ssh user@nodeE 'your command'" > outputE

这也应该有用。