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

时间:2017-07-31 06:42:53

标签: linux bash shell ssh scientific-computing

我是科学计算的新手,正在开展一个涉及运行许多模拟的项目。我为此提供的基础设施是大约20个不同的Linux机器,它们共享存储。到目前为止,我一直在做的是单独ssh'in到每台计算机和手动运行模拟程序的极其低效的任务。

鉴于我列出了计算机的所有名称和每个计算机的相同密码,是否有人可以提供如何在许多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来说,手动操作非常繁琐。如果不清楚我在问什么,请道歉;我在这里问,因为我没有词汇知道我应该谷歌搜索找到解决这个问题的方法。

2 个答案:

答案 0 :(得分:4)

这个问题很少。

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

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

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

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

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

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

答案 1 :(得分:3)

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

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

    sshpass -p <mypassword> ssh user@ip <REMOTE COMMAND>
    
  3. 您可以使用heredocs通过SSH运行多个命令,如下所示,

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