在网络上传输数据

时间:2014-02-20 09:03:34

标签: c++ c ssh scripting network-programming

请提出一些解决方案。通常我ssh到另一台计算机并在那里进行一些计算然后当我需要将数据从该机器传输到我的本地主机时我只是sftp。这次我想从我的本地机器向远程机器发送一些输入,远程机器会做它的位,然后把它发回给我。如何自动执行此过程,以便重复我在本地计算机上指定的次数?这样做很复杂。如果我没有提供足够的细节,请告诉我。

这是手动过程。

ssh username@remote.machine !ssh to remote machine
program.o input.dat         !supply input to the program
sftp username@remote.machine !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。我是一名o.k程序员,但我从未遇到过上述情况,所以教我:)

我的本​​地和远程计算机都是linux / ubuntu

2 个答案:

答案 0 :(得分:1)

  1. 在要自动化的系统之间设置私钥/公钥登录。参见例如这里有关于如何操作的解释:https://wiki.archlinux.org/index.php/SSH_Keys - 请注意,使用ssh代理(例如钥匙串,如果适用)将使您受益匪浅。
  2. ssh可用于远程执行任何操作,将您写入其stdin的任何内容传递给远程进程'stdin。
  3. 示例:

    echo test | ssh yourmachine.example.com xargs echo
    

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

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

    这将在远程计算机上创建一个文件/tmp/file.txt,其内容为“more tests”(因为远程执行的cat命令将从其stdin和shell重定向中读取“more tests”字符串将其输出写入/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二进制文件并将其传递给stdin,并将此程序写入stdout的任何内容返回给{{1}本地机器上的文件。

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

答案 1 :(得分:0)

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