您好我正在使用shell脚本语言(我是新手)。我有6台不同的Linux机器。我可以访问机器A.通过机器A并使用ssh -l <username> <ip_address>
,我可以连接到B. B只能访问C,D和E(无法直接访问它们。它必须仅通过B访问它们)。同样,F只能通过C访问。
我必须从我的系统“A”在所有Linux机器上运行某些命令(例如,pwd
和ls -lrt
)。我怎样才能使那个东西自动化?我的意思是在这种情况下可以在机器A上执行脚本,机器A本身连接到所有其他机器,如图所示,并给我输出在所有机器上执行的命令(仅通过脚本)作为机器A中的文本文件? / p>
我写了一个shell脚本。在机器A上执行该脚本时,它连接到机器B.然后,没有更多的事情发生,即脚本的其余部分没有被执行。当我在机器B上按Ctrl + D
时,脚本再次开始执行。这是我的问题,因为它只在机器A上执行命令,机器B上什么也没有。我希望脚本继续运行,即使机器现在已经改变了。我觉得问题是,机器B无法访问脚本。所以,我需要一个解决方法来解决这个问题。
如果在shell中不可能,那么哪种脚本语言对我想做的事情有好处呢?
我用谷歌搜索,但搜索结果不是我要找的:(
答案 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
这也应该有用。