我是科学计算的新手,正在开展一个涉及运行许多模拟的项目。我为此提供的基础设施是大约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
来说,手动操作非常繁琐。如果不清楚我在问什么,请道歉;我在这里问,因为我没有词汇知道我应该谷歌搜索找到解决这个问题的方法。
答案 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会话的密码,则有两个快速选项。
使用sshpass处理密码提示。这对于快速而肮脏的工作来说非常好。
sshpass -p <mypassword> ssh user@ip <REMOTE COMMAND>
您可以使用heredocs
通过SSH运行多个命令,如下所示,
sshpass -p <mypassword> ssh user@ip bash<<EOF
<command 1>
<command 2>
...
EOF