2014-02-20 22 views
0

请提出一些解决方案。通常我使用其他计算机进行一些计算,然后在需要将数据从该计算机传输到本地主机时进行计算。这次我想从本地机器发送一些输入到远程机器,远程机器将完成它的位,然后将其输出。我怎样才能使这个过程自动化,以便重复我在本地机器上指定的次数?这很复杂吗?如果我没有提供足够的细节,请告诉我。在网络上传输数据

这是手动过程。

ssh [email protected] !ssh to remote machine 
program.o input.dat   !supply input to the program 
sftp [email protected] !ftp to remote machine from another terminal 
get output.dat    !output.dat was produced by program.o 
!open an other terminal 
another_prog.o output.dat !run another program on my local machine 
!Then repeat. Some times I may compile using a make file. 

我想自动执行此过程。我有什么选择。这些程序是用C++/c,fortran等许多语言编写的。我是一个好的程序员,但我从未有过的情况下,我不得不做上面,所以教我:)

我的两个本地和远程机器的Linux/Ubuntu的

回答

0

可以使用SCP命令将文件从远程复制到本地或从本地复制到远程。 对于自动化,您可以编写相同的脚本。

1
  1. 在要自动化的系统之间设置私钥/公钥登录。见例如这里的解释如何做到这一点:https://wiki.archlinux.org/index.php/SSH_Keys - 请注意,您将从使用ssh代理(如钥匙链,如果适用)中受益匪浅
  2. ssh可用于远程执行任何操作,将任何您写入的标准输入到远程进程的标准输入。

例子:

echo test | ssh yourmachine.example.com xargs echo 

这将调用远程xargs计划,该计划将阅读从标准输入“测试”的字符串,通过ssh传递给它,它在第一个管道通过它echo命令,并且它(xargs)将执行远程echo二进制文件,并将字符串“test”作为其参数,将远程“echo”命令写入其stdout的任何内容返回到您自己的ssh命令的stdout(这是您的终端)。简而言之,这是在远程计算机上调用echo以复制任意字符串并将其返回给您的复杂方式。

echo more tests | ssh yourmachine.example.com "cat > /tmp/file.txt" 

这将与内容“更多的测试”在远程机器上创建文件/tmp/file.txt(因为远程执行cat命令将读取从它的标准输入了“更多的测试”的字符串和壳重定向将写入其输出到/tmp/file.txt - 请注意,引号是必需的,因为您要将“cat> /tmp/file.txt”字符串作为整体传递给远程系统的整体命令。

cat input_data.txt | ssh yourmachine.example.com /usr/bin/my_number_cruncher > output_data.txt 

这将input_data.txt文件的内容传输到远程机器,执行/usr/bin/my_number_cruncher二进制文件并将它传递给它的标准输入,并返回无论这个程序写入到标准输出到你的本地计算机上的文件output_data.txt

综合使用所有这些,您可以看到使用ssh在计算机之间传输文件和数据,调用远程程序并将结果传回给您是很简单的。