我是科学计算新手,正在进行一个涉及多个模拟的项目。 我为此提供的基础架构大约有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会话输入密码,则有两个快速选项。
使用sshpass处理密码提示。 这是一个快速和肮脏的工作很好。
sshpass -p <mypassword> ssh user@ip <REMOTE COMMAND>
您可以使用heredocs
通过SSH运行多个命令如下,
sshpass -p <mypassword> ssh user@ip bash<<EOF <command 1> <command 2> ... EOF