2014-02-20 40 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在計算機之間傳輸文件和數據,調用遠程程序並將結果傳回給您是很簡單的。