Пожалуйста, предложите некоторые решения. Обычно я ssh на другой компьютер и выполняю некоторые вычисления там, тогда я просто sftp, когда мне нужно перенести данные с этого компьютера на локальную хост-машину. На этот раз я хочу отправить некоторые данные с моего локального компьютера на удаленный компьютер, удаленный компьютер сделает свой бит, а затем отправит обратно его вывод. Как я могу автоматизировать этот процесс, чтобы он повторялся столько раз, сколько я указываю на своей локальной машине? Это довольно сложно сделать. Пожалуйста, дайте мне знать, если я не дал достаточно подробностей.
Это ручной процесс.
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
Примеры:
echo test | ssh yourmachine.example.com xargs echo
Это вызовет удаленную программу xargs
, которая будет считывать "тестовую" строку из stdin, переданную ей через ssh, которую вы передали ей в первой управляемой эхо-команде, и она (xargs) выполнит двоичный файл удаленного echo
с помощью строки "test" в качестве аргумента, возвращая то, что удаленная команда "echo" записывает в свой stdout, в вашу собственную ssh-команду stdout, которая является вашим терминалом. Короче говоря, это сложный способ вызова echo
на удаленном компьютере для эхо-строки произвольной строки и возврата ее вам.
echo more tests | ssh yourmachine.example.com "cat > /tmp/file.txt"
Это создаст файл /tmp/file.txt
на удаленном компьютере с содержимым "больше тестов" (поскольку удаленно выполненная команда cat
будет читать строку "больше тестов" из своего stdin, а перенаправление оболочки будет записывать свой вывод в /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
на удаленный компьютер, выполнит input_data.txt
файл /usr/bin/my_number_cruncher
и передаст его на свой stdin и вернет все, что эта программа записывает в stdout в файл output_data.txt
на вашей локальной машине,
Используя все эти комбинации, вы можете видеть тривиальным передачу файлов и данных между машинами с помощью ssh, вызывать удаленные программы и передавать результаты обратно вам.
вы можете использовать команду scp для копирования файла с удаленного на локальный или с локального на удаленный. для автоматизации вы можете написать сценарий для того же самого.