在许多不同的计算机上自动运行程序

我是科学计算新手,正在进行一个涉及多个模拟的项目。 我为此提供的基础架构大约有20台不同的Linux机器,它们共享存储空间。 到目前为止,我一直在做的工作是单独使用每台计算机并手动运行模拟程序,这是一项非常低效的任务。

鉴于我有一个所有计算机的名称和每个相同的密码的列表,有人可以提供一个稀疏的大纲如何去在许多Linux机器上自动运行许多可执行文件? 我现在必须做的每个模拟的一个例子是:

$ 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密钥,以避免每次都输入密码。 假设你已经设置了一个ssh密钥 :

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

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

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

但是,如果执行程序长时间运行,这可能并不理想,因为它会在退出ssh连接之前等待它完成。 有几种方法可以解决这个问题

现在剩下的就是将上面的代码写入一个脚本。

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

  1. 将您的SSH pub密钥复制到每台远程计算机。尝试登录时,它们不会再次要求输入密码。 (你可能不喜欢临时工作,因为你的公钥将被永久地添加到远程机器的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