如何在另一个linux vm上运行一个linux vm上的shell脚本

时间:2017-05-29 06:36:43

标签: linux shell ssh virtual-machine vmware

我使用VMware vsphere客户端v5.5。我已经开发了一个简单的shell脚本,它基本上使用命令" lscpu"来提供有关系统的信息。现在假设我有两个vm&rs; s,两个vm都安装了RHEL 6.5 。假设我已登录到VM 1并且此VM1中存在shell脚本,现在我想要有关VM2的信息,我想从VM1在VM2中运行此shell脚本文件并在vm1上返回结果,我该怎么做?我发现的一个想法是使用ssh,但我不太确定,有人能告诉我怎么做。

3 个答案:

答案 0 :(得分:0)

因为它只在VM中运行(我认为安全性不是问题),你可以在VM2中设置一个简单的TCP服务器来监听连接,你可以在VM1中有一个netcat客户端,它将连接到服务器,执行脚本并获取结果。

您可以在xinetd的帮助下轻松实现这一目标。

您需要先安装xinetd。如果您正在运行Ubuntu或基于ubuntu的发行版:

sudo apt install xinetd

您需要配置xinetd才能运行脚本。我强烈建议您在setting up xinetd上参考此特定指南来配置您的服务器。

您可以直接使用默认配置。

service myscript
{
    type            = UNLISTED
    socket_type     = stream
    wait            = no
    user            = username
    group           = groupname
    server          = /path/to/your/script.sh
    log_on_failure  += USERID HOST
    disable         = no
    port            = 1593
}

只需编辑usergroupserver(您的shell脚本的路径)和port字段,您就可以开始了。

启动服务器后,您可以通过在VM1中执行以下操作在VM2中运行脚本,

netcat $vm2_ip $port

这将在VM2中执行脚本并在VM1中显示结果。

答案 1 :(得分:0)

你可以简单地ssh over the other vm。

ssh username@hostname

输入密码,或者您可以在初始声明中提供

sshpass -p password ssh username@hostname

从此处可以像在终端上一样在VM2上执行任何命令。

稍微探索cat等等,你可以做更多的事情。

答案 2 :(得分:0)

这里实际上有两个不同的问题:

  1. 如何远程执行命令?

    你有很多其他答案可以解释ssh是要走的路。我只想添加您想要从脚本运行它的精度,您必须使用非对称密钥配置ssh以避免它要求输入密码。如果您需要在目标VM上拥有root权限,则应构建特殊的sudo配置,以允许指定的用户无需密码即可访问sudo

  2. 如何在远程VM上访问该命令?

    正如您所知,您可以在本地VM上读取脚本,并通过ssh将其行传递给远程VM。但是,如果您想进行大量的远程管理,那么设置共享文件系统也是有意义的。您可以使用NFS,AFS,甚至共享一个公共主机文件夹。这允许管理脚本的单个管理点,仍然可以从所有虚拟机中清楚地访问它们。