运行 一个程序在多台不同的电脑上自动运行

Running a program on many different computers automatically

我是科学计算的新手,正在从事一个涉及 运行 多次模拟的项目。为此我提供的基础设施是大约 20 台不同的 linux 机器,它们都共享存储。到目前为止,我一直在做的是单独通过 ssh 连接到每台计算机并手动 运行 模拟程序的极其低效的任务。

鉴于我有所有计算机名称的列表以及每台计算机的相同密码,有人可以提供一个关于如何自动进行的简单概述 运行 许多 [=20] 上的许多可执行文件=] 机器?我现在必须为每个模拟做的一个例子是:

$ ssh username@computername.university.edu

username@computername.university.edu's password:

username@computername:~$ ./executeprogram 2 5 8 &

username@computername:~$ ./executeprogram 2 5 10 &

username@computername:~$ ./executeprogram 2 5 12 &

其中数字只是主目录中模拟 executeprogram 接受的参数。希望您能理解,对于 20 个不同的 computername,手动完成这非常乏味。如果不清楚我在问什么,请道歉;我在这里问是因为我没有词汇来知道我应该用谷歌搜索来找到解决这个问题的方法。

这个问题的内容很少。

第一步是在这些机器上安装您的 ssh 密钥,以避免每次都必须输入密码。假设您已经 setup a ssh key:

ssh-copy-id username@computername.university.edu

然后,您不需要通过 ssh 进入机器以执行 运行 命令。您可以将其作为初始 ssh 调用的一部分传递。例如:

ssh username@computername.university.edu ./executeprogram 2 5 8

但是如果 executeprogram 是 long-运行ning,这可能不是理想的,因为它会在退出 ssh 连接之前等待它完成。 There are a few ways around this

现在剩下的就是将以上内容写入单个脚本。

如果您的主要问题是必须为每个 SSH 会话输入密码,有两个快速选项。

  1. 将您的 SSH 公钥复制到每个远程 machines.They 尝试登录时不会再次要求输入密码。 (你可能不喜欢这个临时工作。因为你的 public 密钥将永久添加到远程机器的 authorized_keys 文件中)
  2. 使用sshpass处理密码提示。这对于快速而肮脏的工作来说很好。

    sshpass -p <mypassword> ssh user@ip <REMOTE COMMAND>
    

您可以使用 heredocs 通过 SSH 运行 多个命令,如下所示,

sshpass -p <mypassword> ssh user@ip bash<<EOF
<command 1>
<command 2>
...
EOF